World: r4wp
[#Red] Red language group
older newer | first last |
DocKimbel 22-Aug-2012 [1166x4] | BTW, for those not following me on Twitter (raise your hand!), I just got my first Red/System DLL working on Windows. ;-) |
So now, who wants to write R3 extensions in Red/System? ;-) | |
As Red/System compiler is written in R2, you could imagine a full toolchain library for R2 that could integrate Red/System deeply with R2, imagine: >> foo: make-native [a [integer!] return: [integer!]][a + 1] >> foo 123 == 124 MAKE-NATIVE here would compile the Red/System function, emit a DLL, load it and map the function back. ;-) | |
I don't receive notification emails anymore for the newly added github issues...If I activate Settings->Notification->Watching->Email, I get them again, but also from all others repo I'm watching...Is there a way to only get the notifications by email for the repos I'm owning? | |
james_nak 22-Aug-2012 [1170x2] | Does this help? https://github.com/blog/1204-notifications-stars |
Someone else wrote: So the 'solution' I found to this was to set up filters for the various repository emails by filtering on email list. The list filtering is mentioned here on the github blog: https://github.com/blog/967-github-secrets (scroll down the page a bit). I would then just forward the emails from selected repositories to the "correct" email address. | |
DocKimbel 22-Aug-2012 [1172] | Thanks for the links James, I'm watching and have starred my Red repo, so I should receive those notifications... |
BrianH 22-Aug-2012 [1173x2] | R3 extensions in Red/System sound interesting. Does Red/System have some easy way to replicate what the R3 extension macros do with unions? |
Have you done experiments in JIT compiling yet? R3's extension/command model is really easy to use to implement JIT compiled functions. | |
DocKimbel 22-Aug-2012 [1175] | R3 unions: I'm not familiar with R3 extension macros, got a link? JIT compilation: not yet, but I guess it could be interesting to do it for R3 as an extension (not on my roadmap though). |
BrianH 22-Aug-2012 [1176x3] | Not R3 unions, C unions. The arg type for R3 extension commands is a union, with the different potential datatypes being alternates. |
The macros are defined in the headers that come with the R3 host kit. | |
A Red/System extension kit would need to replicate the functionality of the macros, to implement the datatypes involved. | |
Kaj 22-Aug-2012 [1179x2] | DLL: excellent! Does Windows not need PIC or something? |
Unions: I had to match them for the SDL binding. Red/System doesn't have them, but I just define STRUCTs for each variety, and then cast a particular instance to the right one | |
DocKimbel 22-Aug-2012 [1181x2] | PIC is not required for Windows libraries. There's a relocation mechanism though, that I haven't implemented yet, to solve libraries loaded on overlapping memory areas. |
Unions: I am not a big fan of them, if a better alternative exists in other languages, we might borrow it for Red/System? | |
Kaj 22-Aug-2012 [1183] | Not sure that's practical, as the main purpose would be to support C interfaces |
DocKimbel 22-Aug-2012 [1184] | We could be ABI-compatible with C while using something different than C unions. |
Kaj 22-Aug-2012 [1185] | That would be nice indeed |
DocKimbel 22-Aug-2012 [1186x2] | I would prefer an elegant solution that covers both bitfields and unions. |
In fact, if we could merge struct, unions and bitfield in a single concept, with a nice syntax, that would be the best option. | |
Kaj 22-Aug-2012 [1188] | Agreed, I always felt unions were a bit shaky, too |
BrianH 22-Aug-2012 [1189] | Fortunately the R3 host kit unions are tagged, so they can be used a bit more safely. Most higher-level languages that implement this kind of thing do something basically equivalent to the Variant type of VB, COM and .NET; even Objective C, Smalltalk, most Lisp/Scheme languages, and REBOLs have variant types. A variant is basically a tagged union type underneath. Having a cleaner way to do this in Red/System would be good., perhaps something like the polymorphic types in most functional languages. Red itself could have a dynamic value type like REBOL, which is basically another variant type. Red/System should have a way to specify different variant types because the variants of different platforms tend to not be compatible with each other. |
Oldes 22-Aug-2012 [1190x2] | There is no literal form for float32! datatype values, so why not use literal form used in C, mostly seen in GL functions like: glColor3f( 1.0f, 0.0f, 0.0f ); ? |
Values like 1.0f could be recognized by loader and converted to (1.0 as float32!) | |
DocKimbel 22-Aug-2012 [1192x4] | Brian: thanks for the input. Oldes: I think this has been discussed in same channel on Rebol3 world long time ago. Basically, the problem is that it breaks REBOL's syntactic rules (digits as first characters of a word are not allowed). Also, this kind of syntax looks cryptic, it's IMHO, and goes a bit in opposite direction of what REBOL wants to promote (readable syntax). Maybe we can do some implicit casting when a float literal is passed as argument to a function expecting a float32!. |
Preprocessing by loader: I think it's not doable because matching rules would be ambiguous (you wouldn't catch some typo errors for example anymore). | |
I'm giving a try to implicit float32! casting... | |
I've pushed the change in master branch, no regression it seems so it should be a safe change. Let me know if it works well for you. | |
Kaj 22-Aug-2012 [1196] | Nice! I've missed that. It will make parts of my OpenGL binding look much nicer |
Oldes 23-Aug-2012 [1197] | Fine, I will try it and it could be even more elegant solution. Anyway, when you say it would break REBOL's synactic rules, does not your hexa format breaks it as well? Personaly I found very annoying to change many values like 0x00FF (usually in C's defines) into 00FFh. But I can live with that as I can always use some converting script. |
Pekr 23-Aug-2012 [1198] | I see no reason why Red/System could not support typically used 0xx00FF format ... IIRC, when designing R3, we were also thinking to extend the syntax to support more formats, but nothing concrete appeared ... |
DocKimbel 23-Aug-2012 [1199x4] | 0x00FF format would kill pair! syntax, remember that Red/System is a dialect of Red and that Red will have pair!. |
Hexa format: you're right and I hope to fix that once we rewrite Red/System in Red (then we'll have our own lexer instead of been limited by LOAD). | |
BTW, we can also decide that C-like hex format is more important than pair! syntax and find another literal form for pairs, but that would push us further away from REBOL (and clones) compatibility. | |
Pekr: from my little experience with lexers, I found it surprizingly difficult to design a set of consistent rules for a simple and readable syntax. If I had to design a new language syntax from scratch, this would probably be the hardest part. Carl did a fantastic job when designing REBOL syntactic rules (even if it's not 100% perfect, R3 did fix a lot of those issues). | |
Pekr 23-Aug-2012 [1203] | Ok then ... I think we have more iportant things to solve/design :-) |
Rebolek 23-Aug-2012 [1204] | How do I generate DLL? I added #export but it stills create .EXE file. Should I just rename it, or is there some compiler switch? |
DocKimbel 23-Aug-2012 [1205] | You need to use the WinDLL target: -t WinDLL |
Rebolek 23-Aug-2012 [1206] | Thanks. |
DocKimbel 23-Aug-2012 [1207] | Note that currently your exported function will have cdecl calling convention forced on them. I'll change the #export syntax today to allow optional convention to be specified (default will still be cdecl). |
Rebolek 23-Aug-2012 [1208] | So I build my first Red/System DLL, but R2 refuses to load it with: ** Access Error: Cannot open builds/temp.dll as library. |
Pekr 23-Aug-2012 [1209] | It is probably not related, but you might try with secure none, but I does not seem to be problem of REBOL's security or licence missing ... |
Rebolek 23-Aug-2012 [1210] | secure none doesn't help. |
DocKimbel 23-Aug-2012 [1211x5] | Let me test if there's no regression in last commits... |
Works fine here. I'm testing with: Red/System [ ] i: 56 foo: func [a [integer!] return: [integer!]][a + 1] #export [foo i] | |
You're sure that you're in `dyn-lib-emitter` branch? | |
(just in case) | |
If you still can't make it work, send me a copy of your DLL, I'll see what's wrong with it. | |
older newer | first last |