Skip to content

Draft: Make Rust an implementation language #202

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 26 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
395ccba
Create initial files
robertgoss Sep 22, 2023
762cf5e
Create initial files
robertgoss Sep 23, 2023
c92b20a
Get basic project structure
robertgoss Sep 23, 2023
fa5cd4f
Buildable .so (but empty)
robertgoss Sep 23, 2023
5833caa
Get interface compiled in
robertgoss Sep 23, 2023
9b1ca8f
Merge branch 'gossr/rust_impl' of https://github.com/robertgoss/Autom…
robertgoss Sep 23, 2023
186f12b
Output struct and enum types needed
robertgoss Sep 23, 2023
846785a
Start generating parameters
robertgoss Sep 24, 2023
d3a745a
Add basic writing of interfaces
robertgoss Sep 24, 2023
8c2a41c
Handle base class auto methods
robertgoss Sep 24, 2023
9760ff3
Make interface for global methods
robertgoss Sep 24, 2023
8901513
Create the stub impls
robertgoss Sep 25, 2023
fc311f7
Basic conversion of parameters for global wrappers
robertgoss Sep 25, 2023
09fe8bd
Fix merge issues
robertgoss Sep 25, 2023
8d2bb3c
Add the coercion for the handler type
robertgoss Sep 26, 2023
23cee1c
Check errors, get string out
robertgoss Sep 26, 2023
1e91177
Handle return parameters
robertgoss Sep 26, 2023
8a4ff6a
Support all parameter types in wrapper
robertgoss Sep 26, 2023
3c13291
Avoid spurious rust warnings if interfaces unused
robertgoss Sep 26, 2023
c32c0d0
Tidy up some dev changes
robertgoss Sep 26, 2023
1e9d82b
Tidy some personal dev changes
robertgoss Sep 26, 2023
1469001
Fix languagewriter mismerge
robertgoss Sep 26, 2023
ab3ecdd
Track memory across boundary add error API
robertgoss Sep 28, 2023
b60f3ad
Implement the example prime library with rust
robertgoss Sep 29, 2023
edd7b41
Add primes implementation to test
robertgoss Sep 30, 2023
15e1a3b
Avoid CutPrefix not available in all go versions
robertgoss Oct 1, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,4 @@ Examples/**/obj

# Visual Studio Code
debug
.vscode

.DS_Store
.vscode
4 changes: 1 addition & 3 deletions Build/build.bat
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ set startingDir="%CD%"
set basepath="%~dp0"

cd %basepath%\..\Source
set Sources=actutils.go automaticcomponenttoolkit.go buildbindingccpp.go buildbindingccppdocumentation.go buildbindingcsharp.go buildbindinggo.go buildbindingnode.go buildbindingpascal.go buildbindingpython.go buildimplementationcpp.go buildbindingjava.go buildimplementationpascal.go componentdefinition.go componentdiff.go languagewriter.go languagec.go languagecpp.go languagepascal.go

set GOOS=windows
set Sources=actutils.go automaticcomponenttoolkit.go buildbindingccpp.go buildbindingccppdocumentation.go buildbindingcsharp.go buildbindinggo.go buildbindingjava.go buildbindingnode.go buildbindingpascal.go buildbindingpython.go buildimplementationcpp.go buildimplementationpascal.go buildimplementationrust.go componentdefinition.go componentdiff.go languagewriter.go languagec.go languagecpp.go languagepascal.go languagerust.go
set GOARCH=amd64
echo "Build act.win64.exe"
go build -o ..\act.win64.exe %Sources%
Expand Down
2 changes: 1 addition & 1 deletion Build/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ startingpath="$(pwd)"
basepath="$(cd "$(dirname "$0")" && pwd)"
cd "$basepath/../Source"

Sources="actutils.go automaticcomponenttoolkit.go buildbindingccpp.go buildbindingccppdocumentation.go buildbindingcsharp.go buildbindinggo.go buildbindingnode.go buildbindingpascal.go buildbindingpython.go buildbindingjava.go buildimplementationcpp.go buildimplementationpascal.go componentdefinition.go componentdiff.go languagewriter.go languagec.go languagecpp.go languagepascal.go"
Sources="actutils.go automaticcomponenttoolkit.go buildbindingccpp.go buildbindingccppdocumentation.go buildbindingcsharp.go buildbindinggo.go buildbindingnode.go buildbindingpascal.go buildbindingpython.go buildbindingjava.go buildimplementationcpp.go buildimplementationpascal.go buildimplementationrust.go componentdefinition.go componentdiff.go languagewriter.go languagec.go languagecpp.go languagepascal.go languagerust.go"

echo "Build act.win64.exe"
export GOARCH="amd64"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Copyright (C) 2019 PrimeDevelopers
#
# All rights reserved.
#
# This file has been generated by the Automatic Component Toolkit (ACT) version 1.8.0-develop.
#
# Abstract: This is an autogenerated Cargo file for the development of Prime Numbers Library.
#
# Interface version: 1.2.0

[package]
name = "primes"
version = "0.1.0"
[lib]
path = "lib.rs"
crate-type = ["cdylib"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/*++

Copyright (C) 2019 PrimeDevelopers

All rights reserved.

This file has been generated by the Automatic Component Toolkit (ACT) version 1.8.0-develop.

Abstract: This is an autogenerated Rust implementation file in order to allow easy
development of Prime Numbers Library. The functions in this file need to be implemented. It needs to be generated only once.

Interface version: 1.2.0

*/


// Handle passed through interface define the casting maps needed to extract

use libprimes_interfaces::*;

#[allow(dead_code)]
impl HandleImpl {
pub fn as_base(&self) -> Option<&dyn Base> {
match self {
HandleImpl::TCalculator(_, ptr) => Some(ptr.as_ref()),
HandleImpl::TFactorizationCalculator(_, ptr) => Some(ptr.as_ref()),
HandleImpl::TSieveCalculator(_, ptr) => Some(ptr.as_ref()),
_ => None
}
}
pub fn as_mut_base(&mut self) -> Option<&mut dyn Base> {
match self {
HandleImpl::TCalculator(_, ptr) => Some(ptr.as_mut()),
HandleImpl::TFactorizationCalculator(_, ptr) => Some(ptr.as_mut()),
HandleImpl::TSieveCalculator(_, ptr) => Some(ptr.as_mut()),
_ => None
}
}

pub fn as_calculator(&self) -> Option<&dyn Calculator> {
match self {
HandleImpl::TFactorizationCalculator(_, ptr) => Some(ptr.as_ref()),
HandleImpl::TSieveCalculator(_, ptr) => Some(ptr.as_ref()),
_ => None
}
}
pub fn as_mut_calculator(&mut self) -> Option<&mut dyn Calculator> {
match self {
HandleImpl::TFactorizationCalculator(_, ptr) => Some(ptr.as_mut()),
HandleImpl::TSieveCalculator(_, ptr) => Some(ptr.as_mut()),
_ => None
}
}

pub fn as_factorization_calculator(&self) -> Option<&dyn FactorizationCalculator> {
match self {
_ => None
}
}
pub fn as_mut_factorization_calculator(&mut self) -> Option<&mut dyn FactorizationCalculator> {
match self {
_ => None
}
}

pub fn as_sieve_calculator(&self) -> Option<&dyn SieveCalculator> {
match self {
_ => None
}
}
pub fn as_mut_sieve_calculator(&mut self) -> Option<&mut dyn SieveCalculator> {
match self {
_ => None
}
}

pub fn inc_ref_count(&mut self) {
match self {
HandleImpl::TBase(count, _) => *count += 1,
HandleImpl::TCalculator(count, _) => *count += 1,
HandleImpl::TFactorizationCalculator(count, _) => *count += 1,
HandleImpl::TSieveCalculator(count, _) => *count += 1,
}
}
pub fn dec_ref_count(&mut self) -> bool {
match self {
HandleImpl::TBase(count, _) => {*count -= 1; *count == 0},
HandleImpl::TCalculator(count, _) => {*count -= 1; *count == 0},
HandleImpl::TFactorizationCalculator(count, _) => {*count -= 1; *count == 0},
HandleImpl::TSieveCalculator(count, _) => {*count -= 1; *count == 0},
}
}
}
Loading