[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: case sensitivity
resend.
Date: Sun, 2 Mar 2003 22:19:01 -0500
Subject: Re: case sensitivity
From: James Knight <foom@fuhm.net>
To: googoogaga@ai.mit.edu
In-Reply-To: <3E87461D.1050708@jenkon.com>
I've thought that the best way to interface GOO to C would be to make
an analog to the "asm" syntax in C. And just think, then you can do asm
in C in GOO! Something like (see note at bottom about r"""stuff"""):
(df example (my-num|<int> my-str|<str>)
(c-inline (("int" "my_num" my-num) ("char *" "my_str" my-str) =>
(("int" "result" result) ("int" "my_num" my-num))
(r"""sprintf("foo %d %s\n", my_num, my_str);"""))
Or perhaps you could leave out some of the options in the name
declaration line and have suitable defaults (ie convert "-" to "_" (and
rules for other chars), convert <int> to "int", <str> to "char *", etc.
(df example (my-num|<int> my-str|<str>)
(def result|<int> 0)
(c-inline (my-num my-str => (("int" result) my-num))
(r"""sprintf("foo %d %s", my_num++, my_str); result = 5;"""))
Also allow the creation of C functions from the GOO file so you can
call them from other C inlines:
(c-code r"""
#define BLAHBLAH 5
void do_stuff()
{
stuff;
}
""")
r"foo"
Basically, I don't feel that it's all that useful in most cases to
actually expose the C API directly to GOO. You almost always want to
wrap it up somehow, so why go through the whole exercise of making up
GOO functions of the C primitives and then making a second layer of
wrappers around those. Just make it so you can jump straight to the
second layer, and you've got a much more usable system. Since GOO is
generating C anyhow, it isn't that farfetched to just allow the user to
intersperse their own code in the output stream. The only hard part is
nice-ifying the name/type conversions at the boundaries. Of course, if
the user does something stupid like "#define void int", the generated
GOO code will miscompile as well as the user's C code, but I don't
consider that possibility something worth worrying an excessive amount
about.
Unfortunately I didn't have time to try implementing this.
Also - I used two pythonish notations in the example, which GOO doesn't
actually support. One is the """string""" for having strings that
contain ". The other is the character 'r' prefix for the string, which
makes it a raw string (ie: doesn't interpret backslash escapes).
James
PS: case insensitive (but preserving!) systems are great. I want one
for linux. :)
On Sunday, March 30, 2003, at 02:31 PM, Bryn Keller wrote:
> jm wrote:
>
>>> This is bad practice, though, as it's confusing and introduces
>>> potential for errors. IMVHO, whatever is decided, bad practice from
>>> thirty-year-old programming languages is a problem for wrapper
>>> generators rather than new programming languages.
>>>
>>
>> this sounds like an argument for designing goo in a vacuum. however,
>> I don't think we can ignore the computing landscape in which goo has
>> to operate. the fact is that a very large number of libraries are
>> written in c and some of them will use bad coding standards and
>> some of these will need to be wrapped. I consider wrapping a library
>> for use in goo as part of the 'goo experience' so weaknesses in
>> wrapper generators are weaknesses in goo.
>>
> Is there some reason we can't make an FFI that allows us to specify
> the C name separately (in a string, say) from the GOO name? Wouldn't
> that solve this whole problem? If FFI is the only area where case is
> important, let's just address it there.
>
> Regards,
> Bryn