mirror of https://github.com/exaloop/codon.git
1.3 KiB
1.3 KiB
Calling C/C++ from Codon is quite easy with from C import
, but Codon
can also be called from C/C++ code. To make a Codon function externally
visible, simply annotate it with @export
:
@export
def foo(n: int):
for i in range(n):
print(i * i)
return n * n
Note that only top-level, non-generic functions can be exported. Now we
can create a shared library containing foo
(assuming source file
foo.codon):
codon build -o libfoo.so foo.codon
Now we can call foo
from a C program:
#include <stdint.h>
#include <stdio.h>
int64_t foo(int64_t);
int main() {
printf("%llu\n", foo(10));
}
Compile:
gcc -o foo -L. -lfoo foo.c
Now running ./foo
should invoke foo()
as defined in Codon, with an
argument of 10
.
Converting types
The following table shows the conversions between Codon and C/C++ types:
Codon | C/C++ |
---|---|
int |
long or int64_t |
float |
double |
bool |
bool |
byte |
char or int8_t |
str |
{int64_t, char*} (length and data) |
class |
Pointer to corresponding tuple |
@tuple |
Struct of fields |