World: r3wp
[Red] Red language group
older newer | first last |
Dockimbel 16-Sep-2011 [3325] | Slides are available here: http://portal.sliderocket.com/AOLUS/Red_SFD2011_45mn_2 |
Kaj 16-Sep-2011 [3326x3] | The C library's vprintf() function is the one that gets passed one argument that is a list of the variable arguments. This seems to match the declaration of a variadic Red function, so I thought PRINT would match vprintf(). Looking at it again, is it the other way around and does PRINT match printf() ? |
The example in 6.3.3 in the manual also mixes up these names | |
Magnusson, are you sure you have the latest versions of the bindings? | |
Dockimbel 17-Sep-2011 [3329x2] | About the examples in 6.3.3, I would need to rename the vprint and vprintf functions to avoid confusion. |
About the [variadic] attribute used in imported functions declaration, as you can notice, you don't need to declare any arguments. In this context, the attribute is interpreted just as "variable number of arguments" and the C calling convention will be used in such case (the Red/System variadic stack layout is different than the C one, as it also passes the arguments count). | |
MagnussonC 17-Sep-2011 [3331] | Kaj, I downloaded all files again and tried it on another PC with Win 7 (x64). Same compilation error, but I also noticed while running do/args %rsc.r "%tests/hello-GTK-world.reds" The first run *** Warning: type casting from pointer! to pointer! is not necessary *** in: %tests/hello-GTK-world.reds *** at: [as integer! :gtk-quit null *** Compilation Error: invalid struct member alias in: type *** in file: %tests/hello-GTK-world.reds *** in function: window *** at: [type system/alias/gdk-image! [ The next runs *** Compilation Error: a variable is already using the same name: window *** in file: %tests/hello-GTK-world.reds *** in function: window *** at: [ |
Dockimbel 17-Sep-2011 [3332] | MagnussonC: have you downloaded the latest version of Red sources (the "Download.zip" button and not the v0.2.1 link)? |
Kaj 17-Sep-2011 [3333x2] | If the Red variadic stack layout is different from C, how can you import printf() from the C library? Or do you mean it's compatible for imports? |
I think so, after reading it three times. :-) I previously assumed just one method was used | |
Dockimbel 17-Sep-2011 [3335] | The meaning of [variadic] is relative to the context. ;-) In imports, it will just pass a stack of arguments as expected by the C calling convention. When used in a Red/System function, it will add more information on stack. |
Kaj 17-Sep-2011 [3336] | OK, thanks. I feel certain enough now to update the C library binding |
MagnussonC 17-Sep-2011 [3337] | Dockimbel, no, I didn't realize there was a difference, but now I have and it compiled OK. Thanks. |
Dockimbel 17-Sep-2011 [3338] | Good! I will make a new 0.2.2 release asap to avoid such issues with the older version. |
MagnussonC 17-Sep-2011 [3339] | GTK-input-field.reds compiles OK and catches the input, but exe also gives *** Runtime Error 1: access violation at: 63A45193h |
Dockimbel 17-Sep-2011 [3340] | I have a similar error here. It's on my todo list, I'll investigate that issue in a couple of hours. |
Kaj 17-Sep-2011 [3341] | That looks like the error I'm getting on Linux on an older GTK version |
Dockimbel 17-Sep-2011 [3342x5] | The crash is occuring in the 'action callback function. |
It seems to happen on callback exit. | |
I think I get what is going wrong: the action handler calling convention is inferred as stdcall, because it is passed to a Red/System 'button function. But this function is passing it to an imported C function, so the hanlder's calling convention should be cdecl. | |
The compiler can't infer correctly in such case, so we need a way to force the cdecl convention on the callback function. | |
I guess a solution could be to implement a 'cdecl attribute support, to be able to manually force the right convention. But that would make things it a bit more complicated for the GTK binding user. Another option would be to define a trampoline function in the GTK binding that would call the user callback. That trampoline function would be directly (no nested calls) passed as argument to the imported function, so the compiler could infer its calling convention correctly. | |
Kaj 17-Sep-2011 [3347x2] | I was suspecting something like that. I hope it also helps the Linux and SDL cases |
It could also be what went wrong for Jocko with cURL on Windows | |
Dockimbel 17-Sep-2011 [3349] | It's probable if you're not passing callbacks directly to their caller function. So, what option for solving it do you prefer? |
Kaj 17-Sep-2011 [3350] | Thinking. I'm a bit foggy today |
Dockimbel 17-Sep-2011 [3351] | Ah, I know that feeling very well. :-) |
Kaj 17-Sep-2011 [3352] | Have to get back into Red. I've been looking into Freecoin and other stuff for a few days |
Dockimbel 17-Sep-2011 [3353] | How complicated would it be to make a Red binding for Freecoin? |
Kaj 17-Sep-2011 [3354x3] | Red would be more suitable than Red/System |
It's quite a mess, and that's why everybody is rewriting stuff | |
Freecoin still has the Bitcoin interface, so you'd have to do JSON with a daemon. Not very comfortable until you have PARSE | |
Dockimbel 17-Sep-2011 [3357] | I see. I haven't looked yet at Freecoin source code. |
Kaj 17-Sep-2011 [3358x5] | LibBitcoin has bindings, so you could bind to the C interface. But they're using 64 bits numbers everywhere, so that would be uncomfortable until Red/System has them |
Freecoin doesn't seem to use LibBitcoin at all yet | |
I've decided to first port some of it to Syllable and wait a while with the bindings | |
There are also horrible heaps of C++ dependencies | |
On the callback matter, wouldn't it be better to always generate them as cdecl? | |
Dockimbel 17-Sep-2011 [3363] | Maybe. |
Kaj 17-Sep-2011 [3364] | I don't see how a trampoline would work very well, because we're talking user written callbacks, so each would need its own trampoline |
Dockimbel 17-Sep-2011 [3365] | No, only your GTK dialect API would need them (one for button, one for window, ...). |
Kaj 17-Sep-2011 [3366] | The callbacks can have different numbers of arguments, and the widgets will eventually have multiple callbacks |
Dockimbel 17-Sep-2011 [3367x3] | Ah, I thought that "action" callback would all share the same definition. |
callbacks | |
Anyway, forcing cdecl for all callbacks might be a better option. I would need to check first if there's no internal compiler drawback on this option. | |
Kaj 17-Sep-2011 [3370] | Not always. You can for example pass gtk-quit without parameters, while the regular number of parameters is two |
Dockimbel 17-Sep-2011 [3371] | If I force the 'action callback in the GTK script to 'cdecl (by hardcoding it in the compiler), it's not crashing anymore. So the cause is confirmed. |
Kaj 17-Sep-2011 [3372] | Cool |
Dockimbel 17-Sep-2011 [3373] | Just thinking about a drawback for your proposition: Windows API expects callbacks using stdcall convention... |
Kaj 17-Sep-2011 [3374] | I'm falling apart here. I'm going to sleep |
older newer | first last |