World: r3wp
[!REBOL3 Extensions] REBOL 3 Extensions discussions
older newer | first last |
Oldes 22-Dec-2010 [1958] | works |
Andreas 22-Dec-2010 [1959] | Ok, so works on XP, fails on Linux and Wine. Will try Win7 later on. |
Kaj 22-Dec-2010 [1960] | I've tested extensively, and no matter what I do, it segfaults right away on init when there are more than 14 commands in the init block. That's indeed on Linux |
Andreas 22-Dec-2010 [1961x2] | Hm, a trivial extension exporting 20 commands seems to work fine for me: https://gist.github.com/e9192ae7083a2fbf5d78 |
Both for A110 Linux and A110 Win32+Wine. | |
Kaj 22-Dec-2010 [1963x3] | Interesting, but that's a very empty example. Can you try with command parameters? |
I'm exporting them wrapped in a context. That may make a difference | |
When I split the cURL binding in two contexts, it works, so it seems to be some object limit | |
Andreas 22-Dec-2010 [1966x3] | Very peculiar. |
When I export a context wrapping the above 20 cmds, it still works. | |
export cmds: context [cmd01: command [] cmd02: ...] | |
Kaj 22-Dec-2010 [1969x2] | Then please give them some more work to do |
It also bombs out for me when the fifteenth context slot is such an empty command | |
Andreas 22-Dec-2010 [1971x2] | Makes no difference even if I add 3 parameters to each of them. |
Let me try with 10 parameters each. | |
Kaj 22-Dec-2010 [1973] | It sure is a strange thing :-) |
Andreas 22-Dec-2010 [1974x3] | Most peculiar, yes. |
Nope, 20 cmds with 10 params each works as well. | |
Maybe something to do with the length of the init block? | |
Kaj 22-Dec-2010 [1977x2] | OK, let me upload the cURL binding source for you |
I tried shortening the init block, but it didn't help | |
Kaj 24-Dec-2010 [1979] | An error return code is defined for extensions, but it's not used anywhere in the host kit or documentation, so we don't know how to use it |
Kaj 25-Dec-2010 [1980] | There's also a SET_EXT_ERROR macro, but also undocumented, and it only allows setting an unknown number |
Oldes 26-Dec-2010 [1981] | I'm experimenting with image! as a command agrument and found this strange behaviour: I have: img-echo: command [img [image!] ] In RX_Call I use just: return RXR_VALUE; And then when I call the img-echo I get image, but with index at the tail so it looks like: >> i: img-echo img == make image! [50x20 #{ }] >> index? i == 1001 Is this normal? How I can set the index on the C side? |
Oldes 27-Dec-2010 [1982] | I've found solution for my answer related to warning: ../R3A110/src/include/reb-config.h:107: warning: ignoring #pragma warning To remove this warning, use this compiler option: -Wno-unknown-pragmas |
Kaj 27-Dec-2010 [1983x4] | Image index at tail sounds like a bug |
This should set it at the head: | |
RXA_INDEX(arguments, 1) = 0; | |
But it should already be at that value | |
Oldes 27-Dec-2010 [1987x5] | I've located where is the problem.. it's returning the image at the tail if the command is used in exported context! |
Correction... it returns image index at tail when there is any exported context.. the command can be out of the context. | |
http://issue.cc/r3/1809 | |
btw... I was trying to use: RXA_INDEX(frm, 1) = 0; but in my complex extension I was even able to crash REBOL. But I'm not able to simplify it. The sample.c included with the bug report must be enough, it clearly shows that there is something wrong. | |
It's also strange that it returns correct index before I eval the exported context. | |
BrianH 27-Dec-2010 [1992] | I added that last sentence to the ticket, as it might help diagnose the problem. |
Kaj 30-Dec-2010 [1993] | The callbacks documentation is incomplete, and refers to the host-ext-test.c file for examples, but this isn't in the current host kit |
Kaj 31-Dec-2010 [1994x2] | RL_Protect_GC protects unreferenced series from disappearing, but does it also protect them from being moved? |
If not, how can an extension be sure that a pointer to a series is still valid? | |
BrianH 31-Dec-2010 [1996] | I don't think the REBOL GC is copying or compacting. Series are only moved when they are expanded (a reallocation) so if you don't want it to move, preallocate the length you want. |
Kaj 31-Dec-2010 [1997x8] | OK, I gathered that it must work like that if it is to be stable now. But I wonder if it won't get complicated by tasking |
I saw a warning somewhere in the documentation that series can be moved, but maybe that is indeed limited to their own isolated memory management | |
It would explain some of REBOL's high memory usage, because it it doesn't do compacting, there can be a lot of unusable, fragmented memory | |
if it | |
I don't understand, though, how the RL_SET_CHAR and RL_SET_VALUE functions could extend a series when necessary without ever moving it | |
There must be a guarantee that the description data that is pointed to will stay immobile, while the actual data does get moved | |
REBOL must have a global series descriptors registry, much like the words registry | |
It must be only the references to descriptors that get moved when in blocks | |
Oldes 17-Jan-2011 [2005x3] | I would like to make a dialect for making extensions... so far I parsed spec for MagickWand and PixelWand API - https://github.com/Oldes/R3-extension-iMagick But I have a question... in some cases, like in this one: MagickGetImageChannelRange: [ "Gets the range for one or more image channels" wand "MagickWand *" "the magick wand." channel "ChannelType" "the image channel(s)." minima "double *" {The minimum pixel value for the specified channel(s).} maxima "double *" {The maximum pixel value for the specified channel(s).} return: "MagickBooleanType" ] The command should return block [minima maxima] or FALSE... any idea how to specify it in the dialect? |
It's quite clear, what it should return, when you see it in REBOL like form, but it's quite difficult to do such a decision when parsing the spec.. that's also the main reason, why I decided to work on human readable dialect. (I was trying to generate the extension directly, it's possible, but it seems to be hard to maintain.) | |
Just to make clear what's the issue.. for above example, the extension command should looks like: MagickGetImageChannelRange: command [ "Gets the range for one or more image channels" wand [handle!] "the magick wand." channel [integer!] "the image channel(s)." ] The minima, maxima are just pointers to values which are used to return the result, which I must convert to REBOL block. | |
older newer | first last |