-
Notifications
You must be signed in to change notification settings - Fork 147
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
External function from Rust not being called #873
Comments
These cannot be called from the gluon side, instead a one argument function that takes `()` should be used. Fixes gluon-lang#873
That should have been a compilation error (see #873) |
I think you meant #874, but yeah I see what you mean. So basically there can be no zero argument functions in Gluon? Edit: And it works now by making the |
Yeah, the implementation still exists since (Technically there is only 1-argument functions in gluon, two argument functions are just a 1 argument function that returns a function that takes 1 argument, |
I was testing other things, and while this is not my original problem, it seems to be in the same vein. If I change the imports to be in a record, then the function is only called once. // ...
let res = vm.run_expr::<()>(
"test",
r#"
let counter @ { ? } = import! test
counter.inc_counter ()
counter.inc_counter ()
"#,
);
// ... In this case, the before & after pair is only shown once, and the counter at the end is 1. Also, what should I look into if I need to debug further problems like this? |
Are you using 0.17.1, this may be an optimizer issue on lower versions. |
I was using 0.15.0, but I just tested on 0.17.1, and the issue persists. |
These cannot be called from the gluon side, instead a one argument function that takes `()` should be used. Fixes gluon-lang#873
These cannot be called from the gluon side, instead a one argument function that takes `()` should be used. Fixes gluon-lang#873
These cannot be called from the gluon side, instead a one argument function that takes `()` should be used. Fixes gluon-lang#873
These cannot be called from the gluon side, instead a one argument function that takes `()` should be used. Fixes gluon-lang#873
<a name="v0.17.2"></a> ### v0.17.2 (2020-10-25) #### Features * Allow the http module to be used without a tcp listener ([c45353d](gluon-lang@c45353d)) * Format seq expressions without seq ([5c0cec2](gluon-lang@5c0cec2)) * Compile block expressions as monadic sequences ([bce5973](gluon-lang@bce5973), closes [gluon-lang#884](gluon-lang#884)) * **std:** * add Option assertions to std.test ([28e5053](gluon-lang@28e5053)) * add modulo functions to int and float ([92f188a](gluon-lang@92f188a)) #### Bug Fixes * Recognize raw string literals without any `#` ([4d66fbb](gluon-lang@4d66fbb), closes [gluon-lang#885](gluon-lang#885)) * Prevent zero-argument functions from being created in Rust ([e91ea06](gluon-lang@e91ea06), closes [gluon-lang#873](gluon-lang#873)) * Give tuple fields a span ([2a1c2c7](gluon-lang@2a1c2c7)) * xor_shift_new inconsistent description ([591b64b](gluon-lang@591b64b))
891: Version 0.17.2 r=Marwes a=Marwes <a name="v0.17.2"></a> ### v0.17.2 (2020-10-25) #### Features * Allow the http module to be used without a tcp listener ([c45353d](c45353d)) * Format seq expressions without seq ([5c0cec2](5c0cec2)) * Compile block expressions as monadic sequences ([bce5973](bce5973), closes [#884](#884)) * **std:** * add Option assertions to std.test ([28e5053](28e5053)) * add modulo functions to int and float ([92f188a](92f188a)) #### Bug Fixes * Recognize raw string literals without any `#` ([4d66fbb](4d66fbb), closes [#885](#885)) * Prevent zero-argument functions from being created in Rust ([e91ea06](e91ea06), closes [#873](#873)) * Give tuple fields a span ([2a1c2c7](2a1c2c7)) * xor_shift_new inconsistent description ([591b64b](591b64b)) Co-authored-by: Markus Westerlind <marwes91@gmail.com>
<a name="v0.18.0"></a> ## v0.18.0 (2021-10-03) #### Bug Fixes * Don't use the empty span in derive macros ([d05f1ca](gluon-lang@d05f1ca)) * Provide the type of imported modules with errors ([d3bfc59](gluon-lang@d3bfc59)) * Don't refine already refined skolems ([f39b396](gluon-lang@f39b396), closes [gluon-lang#842](gluon-lang#842)) * Recognize raw string literals without any `#` ([4d66fbb](gluon-lang@4d66fbb), closes [gluon-lang#885](gluon-lang#885)) * Prevent zero-argument functions from being created in Rust ([e91ea06](gluon-lang@e91ea06), closes [gluon-lang#873](gluon-lang#873)) * Give tuple fields a span ([2a1c2c7](gluon-lang@2a1c2c7)) * xor_shift_new inconsistent description ([591b64b](gluon-lang@591b64b)) #### Performance * Avoid recreating the vm for each formatted file ([0335733](gluon-lang@0335733)) #### Features * Make channels and reference require IO ([c904189](gluon-lang@c904189), breaks [#](https://github.com/gluon-lang/gluon/issues/)) * Allow specifying type signatures in do bindings ([fac08dc](gluon-lang@fac08dc)) * Allow macros to refer to symbols in scope at the expansion site ([1a5489c](gluon-lang@1a5489c), closes [gluon-lang#895](gluon-lang#895)) * Allow the http module to be used without a tcp listener ([c45353d](gluon-lang@c45353d)) * Format seq expressions without seq ([5c0cec2](gluon-lang@5c0cec2)) * Compile block expressions as monadic sequences ([bce5973](gluon-lang@bce5973), closes [gluon-lang#884](gluon-lang#884)) * **std:** * add Option assertions to std.test ([28e5053](gluon-lang@28e5053)) * add modulo functions to int and float ([92f188a](gluon-lang@92f188a)) #### Breaking Changes * Make channels and reference require IO ([c904189](gluon-lang@c904189), breaks [#](https://github.com/gluon-lang/gluon/issues/))
<a name="v0.18.0"></a> ## v0.18.0 (2021-10-03) #### Performance * Avoid recreating the vm for each formatted file ([0335733](gluon-lang@0335733)) #### Breaking Changes * Make channels and reference require IO ([c904189](gluon-lang@c904189), breaks [#](https://github.com/gluon-lang/gluon/issues/)) #### Features * Make channels and reference require IO ([c904189](gluon-lang@c904189), breaks [#](https://github.com/gluon-lang/gluon/issues/)) * Allow specifying type signatures in do bindings ([fac08dc](gluon-lang@fac08dc)) * Allow macros to refer to symbols in scope at the expansion site ([1a5489c](gluon-lang@1a5489c), closes [gluon-lang#895](gluon-lang#895)) * Allow the http module to be used without a tcp listener ([c45353d](gluon-lang@c45353d)) * Format seq expressions without seq ([5c0cec2](gluon-lang@5c0cec2)) * Compile block expressions as monadic sequences ([bce5973](gluon-lang@bce5973), closes [gluon-lang#884](gluon-lang#884)) * **std:** * add Option assertions to std.test ([28e5053](gluon-lang@28e5053)) * add modulo functions to int and float ([92f188a](gluon-lang@92f188a)) #### Bug Fixes * Allow the repl to compile concurrently ([2118f4d](gluon-lang@2118f4d)) * Don't use the empty span in derive macros ([d05f1ca](gluon-lang@d05f1ca)) * Provide the type of imported modules with errors ([d3bfc59](gluon-lang@d3bfc59)) * Don't refine already refined skolems ([f39b396](gluon-lang@f39b396), closes [gluon-lang#842](gluon-lang#842)) * Recognize raw string literals without any `#` ([4d66fbb](gluon-lang@4d66fbb), closes [gluon-lang#885](gluon-lang#885)) * Prevent zero-argument functions from being created in Rust ([e91ea06](gluon-lang@e91ea06), closes [gluon-lang#873](gluon-lang#873)) * Give tuple fields a span ([2a1c2c7](gluon-lang@2a1c2c7)) * xor_shift_new inconsistent description ([591b64b](gluon-lang@591b64b))
915: Version 0.18.0 r=Marwes a=Marwes <a name="v0.18.0"></a> ## v0.18.0 (2021-10-03) #### Performance * Avoid recreating the vm for each formatted file ([0335733](0335733)) #### Breaking Changes * Make channels and reference require IO ([c904189](c904189), breaks [#](https://github.com/gluon-lang/gluon/issues/)) #### Features * Make channels and reference require IO ([c904189](c904189), breaks [#](https://github.com/gluon-lang/gluon/issues/)) * Allow specifying type signatures in do bindings ([fac08dc](fac08dc)) * Allow macros to refer to symbols in scope at the expansion site ([1a5489c](1a5489c), closes [#895](#895)) * Allow the http module to be used without a tcp listener ([c45353d](c45353d)) * Format seq expressions without seq ([5c0cec2](5c0cec2)) * Compile block expressions as monadic sequences ([bce5973](bce5973), closes [#884](#884)) * **std:** * add Option assertions to std.test ([28e5053](28e5053)) * add modulo functions to int and float ([92f188a](92f188a)) #### Bug Fixes * Allow the repl to compile concurrently ([2118f4d](2118f4d)) * Don't use the empty span in derive macros ([d05f1ca](d05f1ca)) * Provide the type of imported modules with errors ([d3bfc59](d3bfc59)) * Don't refine already refined skolems ([f39b396](f39b396), closes [#842](#842)) * Recognize raw string literals without any `#` ([4d66fbb](4d66fbb), closes [#885](#885)) * Prevent zero-argument functions from being created in Rust ([e91ea06](e91ea06), closes [#873](#873)) * Give tuple fields a span ([2a1c2c7](2a1c2c7)) * xor_shift_new inconsistent description ([591b64b](591b64b)) Co-authored-by: Markus Westerlind <marwes91@gmail.com>
Hi, I'm looking to using Gluon in a system I'm developing, where I'm using Gluon to mutate a single stateful object. I created this simple example to test things out:
However, the
dbg!
at the end gave me 0, and theprintln!
s in the middle are not being printed.I suspected that I'm not calling the function, so I tried
inc_counter ()
(I can only guess, as there's no documentation on how to call a function with no arugments), but I got the following errors:I have no idea what this error means, as
inc_counter
is for sure defined as a function throughprimitive!
.So is the
inc_counter
function being optimized out? If so, how can I include the call back? And where can I find the documentation for it, or around which source files should I look into to understand that behaviour?Thanks a lot for any pointers and suggestions!
The text was updated successfully, but these errors were encountered: