Re: Myrddin: Partial C ABI compatibility
[Thread Prev] | [Thread Next]
- Subject: Re: Myrddin: Partial C ABI compatibility
- From: Ryan Gonzalez <rymg19@xxxxxxxxx>
- Date: Fri, 21 Aug 2015 22:37:15 -0500
- To: Ori Bernstein <ori@xxxxxxxxxxxxxx>,myrddin-dev@xxxxxxxxxxxxxx
On August 21, 2015 10:02:01 PM CDT, Ori Bernstein <ori@xxxxxxxxxxxxxx> wrote:
>C ABI compatibility on Linux is partly done. Floats, ints, pointers,
>and
>anything else in that class of types is likely to work.
>
>Passing structs or unions will not work, although passing pointers to
>them
>should be ok. Doing anything interesting in C will involve adding a
>call to
>initialize libc.
>
>Making this work on Plan 9 shouldn't be too far off, and I believe that
>it
>will be easier to make it 100% ABI compatible.
>
>Integrating it into the build system is another task, and I'm not sure
>how
>that would be best done at the moment.
>
Here be dragons. No one on earth can ever agree on how to build C code. Add in messes like configuration, and it's quite a bit of trouble.
I would personally just NOT support building C files, or have very limited support (no external pkg-config calls and such) and make people run some configure script first (not autoconf, hence my signature :).
>Example:
>
>=== Myrddin ===
>
> use std
>
> type s = struct
> a : int
> b : int
> c : byte[:]
> ;;
>
>extern const frob : (a : int, b : int, c : uint64, d : s#, str :
>byte[:]# -> int)
> const main = {
> var s = [.a = 1000, .b = 2000, .c = "abc"]
> var str = "abcd"
> std.put("{}\n", frob(1, 2, 3, &s, &str))
> }
>
>=== C ===
>
> #include <stdlib.h>
> #include <stdint.h>
>
> typedef struct Myrsl Myrsl;
> typedef struct S S;
>
> struct Myrsl {
> void *p;
> size_t len;
> };
>
> struct S {
> int a;
> int b;
> Myrsl c;
> };
>
> int
> frob(int a, int b, uint64_t c, S *d, Myrsl *str)
> {
> return a + b + c + d->a + d->b + d->c.len + str->len;
> }
>
>=== To compile ===
>
> 6m myrcode.myr
> cc -c ccode.c
>ld -o mixed $prefix/lib/myr/_myrrt.o myrcode.o ccode.o
>-L$prefix/lib/myr -lstd -lsys
> $ ./mixed
> 3013
--
Sent from my Nexus 5 with K-9 Mail. Please excuse my brevity.
| Myrddin: Partial C ABI compatibility | Ori Bernstein <ori@xxxxxxxxxxxxxx> |
- Prev by Date: Myrddin: Partial C ABI compatibility
- Next by Date: Myrddin support for the Howl programming text editor
- Previous by thread: Myrddin: Partial C ABI compatibility
- Next by thread: Myrddin support for the Howl programming text editor
- Index(es):