World: r3wp
[Red] Red language group
older newer | first last |
Dockimbel 28-Feb-2011 [46x2] | I didn't need a CASE-like statement so far in Red/System, so it's there yet. Current implemented control flow statements: IF, EITHER, UNTIL, WHILE, ANY, ALL. So implementing CASE should be doable. |
it's there => it's not there | |
BrianH 28-Feb-2011 [48] | Look at the source of LOAD and sys/load-header for some good examples of the CASE/all style. It's worth supporting. |
Dockimbel 28-Feb-2011 [49] | I'm sure it would be nice to have it, but my short term goal with Red/System is to just code the minimal set of primitives required to build the upper layer (Red's runtime layer). I was hoping that other developers could keep expanding/improving Red/System while I would progress on the Red part. |
BrianH 28-Feb-2011 [50] | Good point. |
Andreas 28-Feb-2011 [51x2] | What makes CASE/all different from a long sequence of IFs? |
(In respect to Red/System, where those will be equal, performance-wise.) | |
BrianH 28-Feb-2011 [53] | Maintainability of code. We found that the CASE/all style makes changes to code easy to make, and control flow easy to understand. This realization came out of the process of rewriting R3's module system into easier-to-maintain code. |
Dockimbel 28-Feb-2011 [54] | It's sleep time here, but I can't resist to post a first Red/System source example: #import [ "kernel32.dll" [ GetStdHandle: "GetStdHandle" [ type [integer!] return: [integer!] ] WriteConsole: "WriteConsoleA" [ handle [integer!] buffer [string!] len [integer!] written [struct! [value [integer!]]] reserved [integer!] return: [integer!] ] ] ] stdout: GetStdHandle -11 written: struct [value [integer!]] prin: func [s [string!] return: [integer!]][ WriteConsole stdout s length? s written 0 ] prin "Hello Red World!" |
Andreas 28-Feb-2011 [55] | Ladislav, regarding Red being a REBOL dialect if Red's syntax is a subset of the data exchange dialect syntax: I fully agree. |
Dockimbel 28-Feb-2011 [56] | Of course, this will be part of Red/System own small runtime, exposing among other functions, PRIN and PRINT. |
BrianH 28-Feb-2011 [57] | How are the types of local variables declared in Red/System? The slideshow says no type inference... |
Dockimbel 28-Feb-2011 [58] | As in REBOL: using /LOCAL followed by name and datatype. |
BrianH 28-Feb-2011 [59] | And /local is special, not just another refinement? |
Dockimbel 28-Feb-2011 [60] | Yes, it's a reserved keyword. I planned to add refinement support also, but I'm not sure I will need it to implement Red runtime, so it will be probably postponed. |
Mchean 28-Feb-2011 [61] | how many attended the conference? |
Dockimbel 28-Feb-2011 [62] | We were 5, but it felt like 10 ;-) |
Mchean 28-Feb-2011 [63] | heh, well having actually had a conf i think you can use a 3x multiplier |
Dockimbel 28-Feb-2011 [64] | Brian: here's an example of /LOCAL usage from my Red/System tests scripts (just a variation on the real PRINT function): print: func [s [string!] return: [integer!] /local lf [string!] sz [integer!]][ lf: "^/" prin s sz: 1 WriteConsole stdout lf sz written 0 ] |
BrianH 28-Feb-2011 [65] | No tmp variables then :) |
Dockimbel 28-Feb-2011 [66] | Nope. |
Kaj 28-Feb-2011 [67] | Cool examples, Doc |
Dockimbel 28-Feb-2011 [68] | The real PRINT is defined as: print: func [s [string!]][ prin s prin "^/" ] |
BrianH 28-Feb-2011 [69x3] | Only string!, no binary!? |
I'm wondering about the Unicode strategy... | |
In Red/System, I mean. Of course Red will have both. | |
Dockimbel 28-Feb-2011 [72] | Binary! is half-supported. It was part of my initial list of type to support, but as I didn't needed it so far, it's not supported. That might change when I'll implement the lexical analyzer. |
BrianH 28-Feb-2011 [73] | Have you decided yet whether the lexical analyzer will have the same source-is-UTF8-binary strategy as R3? |
Dockimbel 28-Feb-2011 [74] | I plan to support UTF-8 scripts for both Red & Red/System. The memory storage model is not yet decided, could be UTF-8 or UCS-2. |
BrianH 28-Feb-2011 [75] | And arguments and locals can only have one type in their typespecs for Red/System? |
Dockimbel 28-Feb-2011 [76] | In fact, they can have several types as long as they take the same space in memory, but support for that has not yet been implemented. |
Andreas 28-Feb-2011 [77] | Do you currently compile the above directly to binary machine code? |
Dockimbel 28-Feb-2011 [78] | Yes, machine code, then generating an executable. |
Andreas 28-Feb-2011 [79] | ABI differences will probably give you the heebie-jeebies :) |
Dockimbel 28-Feb-2011 [80x2] | The whole compiler is 40KB, the linker is 20KB. |
I did the PE/COFF support, no other ABI can be so screwed up. :-) | |
Kaj 28-Feb-2011 [82] | Obviously, GCC is superior at 50 MB or so |
Andreas 28-Feb-2011 [83x2] | That is only the binary format :) |
I assume you currently do x86 stdcall only? | |
Dockimbel 28-Feb-2011 [85] | Yes, but the support for cdecl is like adding a couple of lines to the current code. |
Andreas 28-Feb-2011 [86] | Sure. But that quickly gets extremely annoying :) |
Dockimbel 28-Feb-2011 [87] | Red/System uses stdcall for its own functions, I found out that it was generating shorter code than cdecl. |
BrianH 28-Feb-2011 [88] | That's why stdcall was invented :) |
Andreas 28-Feb-2011 [89] | Or on x86, fastcall, rather :) |
Dockimbel 28-Feb-2011 [90x2] | The really annoying part was having to reverse the arguments list to support stdcall. It's a much more difficult when you're compiling in one pass directly to machine code. |
Fastcall, sure, that would be the target in a future version with an optimizing compiler. | |
BrianH 28-Feb-2011 [92] | Do string references in Red/System have indexes, or are they just pointers? |
Dockimbel 28-Feb-2011 [93] | They support indexed read/write accesses like in C, but using a REBOL syntax, so s/1, s/2, s/3... |
BrianH 28-Feb-2011 [94] | I meant offset references an internal pointer to the head and an offset index, like s: next s. |
Dockimbel 28-Feb-2011 [95] | Indexing with a variable should also be possible: s: "hello" c: 1 s/c or s/:c (haven't decided yet which one is the more appropriate) |
older newer | first last |