r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Red] Red language group

Kaj
10-Jun-2011
[1949x2]
I'm fine with the extra code generated. It would be like inlining 
just one as-logic operation, and only generated when needed
The alternative is always going through the wrapper function, which 
is slower, and only for the as-logic, so this strikes me as a case 
where you would want to inline. The #import spec can be a nice syntax 
touch to signal that
Dockimbel
10-Jun-2011
[1951x5]
Pushed a fix for the missing conversion code on type casting function 
call return value.
Right, as-logic will inline some conversion code only when required 
by the conversion rules from the type casting matrix.
I am considering your request for an implicit casting for imported 
functions using a return: [logic!] declaration. I could add it, by 
forcing a type conversion if the function is imported, but if the 
function already returns the right value (0 | 1), it will have to 
pay an extra cost for a useless conversion and no way to avoid it.
Like in the case where users would link to their own external libs, 
where return values are prepared specifically for Red/System.
So manually controlling the casting seems like a better option.
Kaj
10-Jun-2011
[1956x2]
But then you have the overhead of the wrapper function
How about having return: [logic!] mean that 0 | 1 is returned, so 
no conversion is necessary?
Dockimbel
10-Jun-2011
[1958]
Wrapper: not necessarily if you use a define as shown above.
Kaj
10-Jun-2011
[1959]
The problem with that is that you have to do it for every function. 
It's more work, in a different place than the #import. It feels like 
a hack, whereas return: [logic!] lets the compiler know the exact 
type
Dockimbel
10-Jun-2011
[1960]
Well, that is the default behaviour already. You just have to be 
sure that the imported function is respecting that convention strictly.
Kaj
10-Jun-2011
[1961]
Besides, the #define would still generate the extra code, wouldn't 
it? There's currently no way to specify that no conversion is necessary 
for a return value
Dockimbel
10-Jun-2011
[1962]
Just don't use any type casting and no conversion code will be added.
Kaj
10-Jun-2011
[1963]
But will integer! than be handled as logic! in expressions?
Dockimbel
10-Jun-2011
[1964]
Certainly not, but we were talking about an imported function with 
a return: [logic!] declaration?
Kaj
10-Jun-2011
[1965x2]
Well, that was my original question, whether that already works as 
I would like :-)
So it can only be used when strictly 0 and 1 are returned in integer! 
format?
Dockimbel
10-Jun-2011
[1967]
Exactly.
Kaj
10-Jun-2011
[1968]
OK, thanks
Dockimbel
10-Jun-2011
[1969]
If you function return 0 for false and a positive number for true, 
it needs a runtime conversion.
Kaj
10-Jun-2011
[1970x2]
Fair enough
Any plans to implement automatic inlining in the future?
Dockimbel
10-Jun-2011
[1972x3]
Yes, but probably as part of a future optimizing compiler version.
So, probably when Red/System will be rewritten in Red.
I would also adopt a fastcall convention as default for Red/System 
function calls.
Kaj
10-Jun-2011
[1975]
Awaiting that, I'll refrain from the #define solution, then
Dockimbel
11-Jun-2011
[1976]
Andreas, Kaj: what were the changes required on ELF emitter to make 
it work on Syllable? Just entry point address?
Kaj
11-Jun-2011
[1977]
Base address, really, and address alignment
Dockimbel
11-Jun-2011
[1978]
Ah, yes, base address, not entry point. Thanks.
Kaj
11-Jun-2011
[1979x2]
Base address for Syllable Desktop is 80000000h which currently needs 
to be coded as -2147483648
The same change would be necessary for BeOS, by the way
Andreas
14-Jun-2011
[1981x3]
Red/System can now generate dynamically linked ELF binaries.
Along with some additional pre-processor directives added (#if, #either, 
#switch), this now enables the Red/System runtime being fully writen 
in Red/System itself.
If someone wants to test the generated ELF binaries on Syllable, 
I have a pre-built "hello.reds" available at http://bolka.at/2011/tmp/hello-syllable.bin
Steeve
14-Jun-2011
[1984]
btw, I tried to install syllabe within VirtualBox some weeks ago, 
And It failed/
Dockimbel
14-Jun-2011
[1985]
Andreas: tested on Syllable, works flawlessly!
Andreas
14-Jun-2011
[1986x2]
Oh, great to hear :)
Wouldn't have expected that, actually.
Dockimbel
14-Jun-2011
[1988]
Is it compiled with C bindings? (length? == strlen( ))?
Andreas
14-Jun-2011
[1989x4]
Compiled with the current default settings.
So yes, with C bindings.
readelf says that alloc, free, memset, memmove, strlen are imported 
in the binary.
malloc*
Dockimbel
14-Jun-2011
[1993x2]
Steeve: which system image file have you used?
Great! :)
Steeve
14-Jun-2011
[1995x2]
I check it
SyllableDesktop-0.6.6.i586.iso
Dockimbel
14-Jun-2011
[1997x2]
I am currently working on runtime error catching. I have successfully 
redirected default handlers for SIGILL, SIGSEGV, SIGFPE on Linux, 
but on Windows, the systems seems to ignore my handlers (using signal( 
) function). So I am currently testing with SetUnhandledExceptionFilter() 
(http://msdn.microsoft.com/en-us/library/ms680634%28VS.85%29.aspx)
If anyone has experience with that API on Windows, advices and tips 
are welcome. :-)