ipv4`192.168.0.1`
and get your object. Are there other benefits besides a literal syntax? (Not to slag on Red. One advantage I can see is avoiding the call at runtime to the ipv4 function.) ipv4`192.168.0.1`
and get your object. Are there other benefits besides a literal syntax? (Not to slag on Red. One advantage I can see is avoiding the call at runtime to the ipv4 function.)Red doesn't have all types in place yet (e.g. date! is coming, and maybe an @ref type, among others), but can still load the following:
at 10:00 send gregg@host.dom a link to http://red-lang.org (216.239.32.21)
delete %/c/temp/junk.dat
assign #DECAFBAD-7337 to John
make the main window 800x600 with a color of 255.0.0
answer: yes
Here's a quick console session showing what types it found: >> blk: [ at 10:00 send gregg@host.dom a link to http://red-lang.org (216.239.32.21)
[ delete %/c/temp/junk.dat
[ assign #DECAFBAD-7337 to John
[ make the main window 800x600 with a color of 255.0.0
[ answer: yes
[ ]
== [at 10:00:00 send gregg@host.dom a link to http://red-lang.org (216.239.32.21)
delete %/c/temp/junk.dat
>> unique collect [foreach val blk [keep type? val]]
== [word! time! email! url! paren! file! issue! pair! tuple! set-word!]
And you can parse at that level: >> parse blk [
[ some [
[ 'window set val pair! (print ["size:" val])
[ | 'assign set val issue! (print ["issue:" val])
[ | 'link 'to set val url! (print ["link:" val])
[ | skip
[ ]
[ ]
link: http://red-lang.org
issue: DECAFBAD-7337
size: 800x600
Of course, you could do something similar in ES6. If you use template literals, your data might look like this: at time`10:00` send email`gregg@host.dom` a link to url`http://red-lang.org` paren`(ipv4`216.239.32.21`)`
delete file`%/c/temp/junk.dat`
assign issue`#DECAFBAD-7337` to John
make the main window pair`800x600` with a color of color`255.0.0`
name`answer:` bool`yes`
Sorry for getting carried away. :)Oh, very high I would say
I liked this big:
>> unique collect [foreach val blk [keep type? val]] == [word! time! email! url! paren! file! issue! pair! tuple! set-word!]
I think it could almost be read and understood by a person who does not know REBOL or Red.
"Red or REBOL" = Redbol (sounds like Red Bull) :) And where Perl has Mongers, Ruby has Rubyists, Python has Pythonistas, and Rebol has Rebolers, Red has Reducers.
A couple other new features make dealing with non-loadable input easier too. You can use macros to pre-process data, trap errors that `load` triggers and still get back a block of values, or spec some simple rules in `system/lexer/pre-load`. That's another way we might deal with IPv6 values.