World: r3wp
[All] except covered in other channels
older newer | first last |
BrianH 9-Jan-2009 [3336x4] | Actually, that is exactly what we need. One problem though: >> transcode "a," == [make error! [ code: 200 type: 'Syntax id: 'invalid arg1: "word" arg2: "a," arg3: none near: "(line 1) a," where: [transcode] ] ""] I've requested that this be changed to: >> transcode "a ," == [a ","] putting off the error until the next call. That change would be enough to do LOAD/else. |
All it would require is to make "," a delimiter in the scanner - a trivial change for Carl. | |
Sorry, two messages back: "a ," -> "a," | |
in the second example. | |
btiffin 10-Jan-2009 [3340] | Pekr; I think a convo we had on the blog wayy back was partly why Carl relaxed TRANSCODE ;) We went through a phase of trying to name the junk! datatype, and very real issues were raised about where the lexical scan should restart after. Then someone discussed the linguistic analytic potential and another very real concern about polluting the semantics of REBOL datatypes was raised. Carl may have been afraid we'd all run off and produce "any old crap that works", where I aim to provide a console that takes "any old crap" and works. ;) Leaving Gabriele and others free to use the ever cool true semantic meaning of data and code and leave junk! that floats for analysis of real world information sans REBOLification. Part of that conversation lead to and is included in http://www.rebol.net/cgi-bin/r3blog.r?view=0078#comments |
Pekr 10-Jan-2009 [3341] | BrianH: ... then I expect you will propose the change to Carl, to enable load/else? :-) |
Gabriele 10-Jan-2009 [3342] | any known rebol datatype should be recognised, and the rest should be assigned under junk! or similiarly named datatype. What is AI about that? Telling the different between a REBOL value and "the rest" is AI. If you can without AI, then "the rest" is defined with a specific parse rule... then you can just use string parsing, and it's not a human language anymore but a specific language you just designed. |
Dockimbel 10-Jan-2009 [3343] | Right, I misunderstood LOAD/else proposal, I thought you could supply your own parsing rules to be used from the point where LOAD fails. But I still can't see the point of using LOAD on non-REBOL data, instead of string parsing or LOAD/next. LOADing a whole book would most probably blow out REBOL words limit. If it all boils down to splitting untrusted input into whitespace separated tokens, why no just use PARSE data "" ? Is there a real benefit for the programmer of having LOAD not stop on syntax errors? |
btiffin 10-Jan-2009 [3344] | Doc; no not really a benefit to programmers and rebol-by-nature types; The goal is non-rebol types and creating ease of use that attracts those types to become rebol-by-nature. But I've sure wasted a lot of good rebol time already, so ... Go Doc Go and Do Gabriele Do Ok ... and Yay Brian! ;) |
BrianH 10-Jan-2009 [3345] | Pekr, I have already proposed the TRANSCODE change, and I can start the implementation of LOAD/else asap (which will likely be after the release). LOAD/else will work without the TRANSCODE fix, but will work better with the fix. |
Henrik 28-Mar-2009 [3346] | About VPS: Looks like it could be Linode for me. Slicehost is pretty on the surface, but it appears that customers are a bit happier with Linode. Also Slicehost was recently purchased by Rackspace, and some customers reported a lower service quality after that. That might be a bad sign. |
Maxim 28-Mar-2009 [3347x2] | doc, its faster to let rebol do what is does best in binary and let us take over on those tokens it can't recognise. just ignoring comma would have allowed me use scientific data more than once directly without having to dare understand parse intricacies. remember that parse IS NOT EASY. I didn't use it for over 6 years, cause everytime I dared, it just blew up in my face. this would provide a simple entry point for more people to support DSL and leverage the rich datatype system in rebol, without the need to be a guru level reboler. |
the point is not to replace REBOL's syntax, but allow REBOL to cope better with the rest of the world's data, IMHO. | |
Dockimbel 28-Mar-2009 [3349] | IMO, designing a good DSL is far more difficult than writing parse rules. I think that ppl here are underestimating the complexity of implementing a jump-over-foreign-data feature that would work in the general case. REBOL syntax is not based only on whitespaces, but on delimiters too : double-quotes, curly and square brackets, parenthesis,.... So it's perfectly valid to not use whitespaces at some places, like in : "either conditon [true][false]". So what should LOAD do in case of, e.g. : "either condition [f,o,r,e,i,g,n,0,1][false]" ? IMHO, besides reporting a syntax error at "f," , there's no much point returning [either condition "[f,o,r,e,i,g,n,0,1][false]"]. And if you think that LOAD could just return [either condition ["f,o,r,e,i,g,n,0,1"][false]], then you just jumped over the complexity by creating some syntax rules in your mind, but LOAD can't do that. Once LOAD has passed the syntax error point, it has no sure way to determine where the foreign data ends and where REBOL correct syntax starts again. That would require at least, an AI engine (like Gabriele stated above). I'm not even sure that all possible cases could be covered that way. Btw, does such feature exists in any other programming language? I've personally never seen or read about such feature elsewhere, maybe for a good reason. |
Steeve 28-Mar-2009 [3350] | load-foreign works well to me in R3. alpha: charset [#"a" - #"z" #"A" - #"Z"] chars: union alpha charset [#"0" - #"9" "-_"] word: [alpha any chars] probe load-foreign "either condition [f,o,r,e,i,g,n,0,1][false;]" [ ;**keep words with comma as trings [word some [#"," any chars]] [keep &] ;**remove ";" at the end of words [word #";"] [keep to-word head remove back tail &] ] >> [either condition ["f,o,r,e,i,g,n,0,1"] [false]] |
btiffin 28-Mar-2009 [3351x2] | I still vote for foreign! as a datatype. Sure there will still be reasons for throwing errors on evaluation on foreign! but I don't like the fact that the errors occur on load. Give linguists a tool that out-of-the-box can load a poem and let them count characters, words, and transitions. Let REBOL pros worry about the hassles of evaluation. Re: where the foreign data ends; Skip AI, just go with delimiters. Whitespace or quotes or any of the braces etc. And if a missing quote causes a script to fail ... well bad on the coder for not testing before release. If the English professor gets wonky counts, well let them figure it out, but give them the wonky counts not a LOAD failure. IMHO it really would open the door to so many more uses and users. And with Steeve's example ... build something like that into the product. Don't make poor Professor Keating try and figure out why most of the Dead Poet's prose can't be analysed with REBOL's nifty cool block data functions. And as long as REBOL had foreign! as a native datatype, writing a LINT would be dirt easy. |
And I could LOAD %cobol.cob and do all kinds of super cool preprocessing. Or at least wait for Sunanda to write a super cool preprocessor and live vicariously through rebol of the year candidates. ;) REBOL could be the JavaDoc, EpyDoc, Doxygen, ..., ReST besting documentation super tool of tomorrow. | |
Maxim 29-Mar-2009 [3353x2] | doc, the point is that I and others HAVE had ,many situations where this would have saved HOURS even given new reasons to use rebol at some jobs. the point is not to allow new rebol dialects, its just that in MANY cases it would work.. we all know that this isn't a replacement for parse. but allowing me to import external data through load is just faster than parsing. You still have to tailor the extension to the dataset anyways. |
We could load things like C code directly, and then parse it using block dialecting instead. way faster. | |
btiffin 29-Mar-2009 [3355] | Ditto Maxim. Adding ... I don't look at this as being a overly good thing for rebols (although I do think we'd all benefit, save time and write a whole new breed of utilities), I think of it as a good thing for non-rebols (and us rebols with smaller brains and bigger laze). |
Pekr 29-Mar-2009 [3356] | ah, so we are at it once again .... |
Gabriele 29-Mar-2009 [3357x3] | You guys write it, then we can talk about it. |
it's incredible you think that "parse is not easy" and then you don't trust people telling you that what you ask for is silly at best. | |
parse *IS* easy. try to use regexps instead! | |
Steeve 29-Mar-2009 [3360x3] | ok i give you load-foreign, don't kick me Gabriele :-) |
context [ stack: make block! 10 foreign-rules: make block! 10 out: end: value: pos: none push: func [type][ stack: change/only stack out out: make type 1 ] pop: to-paren [ stack: back stack out: append/only stack/1 out ] set-&: [end: (misc/&: to string! copy/part pos end)] misc: context [ &: none keep: func [&][append out &] ] blanks: charset " ^-^M" rules: [ some [blanks | #"^/" (new-line out true)] | pos: foreign-rules | [#"]" | #")"] (print "missing [ or (" return stack/1) | #"[" (push block!) any [#"]" pop break | rules] | #"(" (push paren!) any [#")" pop break | rules] | (set [value pos] transcode/next/error pos append out value) :pos ] set 'load-foreign func [ text [string!] foreign [block!] ][ out: make block! 10 stack: change/only clear head stack out clear foreign-rules foreach [rule code] foreign [ append foreign-rules compose [(rule) set-& (to-paren bind code misc) |] ] append foreign-rules [end skip] parse/all to-binary text [any rules] bind out 'system either 1 = length? out [first out][out] ] ] | |
] | |
Dockimbel 29-Mar-2009 [3363] | Steeve, you're just proving my and Gabriele's point. There's no way to implement a LOAD-FOREIGN that would work for any data. You have to provide parsing rules that are specific for the input data. Max and others are asking for a LOAD-FOREIGN that just works on any input data without providing any additionnal rules. |
Ammon 29-Mar-2009 [3364] | and if you have to provide the additional rules you might as well parse it from scratch. |
Steeve 29-Mar-2009 [3365x5] | i can generate strings by default each time there are errors by default, so that there is no need to provide rules. It's a tiny modification |
But strings are not good types for those it would be better to simply add errors as objects in the loaded stream. But after that you steel need to reparse the block to convert the errors in proper values. SO, in the end, y | |
*steal | |
Ok, in the following version (much simpler) i just add foreign data as error objects in the stream. Then you can reparse the result to manage errors as you want. context [ stack: make block! 10 out: value: pos: none push: func [type][ stack: change/only stack out out: make type 1 ] pop: to-paren [ stack: back stack out: append/only stack/1 out ] blanks: charset " ^-^M" rules: [ some [blanks | #"^/" (new-line out true)] | [#"]" | #")"] (print "missing [ or (" return stack/1) | #"[" (push block!) any [#"]" pop break | rules] | #"(" (push paren!) any [#")" pop break | rules] | pos: (set [value pos] transcode/next/error pos append out value) :pos ] set 'load-foreign func [ text [string!] ][ out: make block! 10 stack: change/only clear head stack out parse/all to-binary text [any rules] bind out 'system either 1 = length? out [first out][out] ] ] | |
probe load-foreign { either condition [ f,o,r,e,i,g,n,0,1 ][ false ] } >>[ either condition [ make error! [ code: 200 type: 'Syntax id: 'invalid arg1: "word" arg2: "f,o,r,e,i,g,n,0,1" arg3: none near: "(line 1) f,o,r,e,i,g,n,0,1" where: [transcode parse load-foreign ...] ] ] [ false ] ] | |
Dockimbel 29-Mar-2009 [3370] | >> load-foreign "either condition ]f,o,r,e,i,g,n,0,1[]false[" missing [ or ( == none Not very usefull output. Remember that we are talking here of the general case where input can be *any* data. |
Steeve 29-Mar-2009 [3371x2] | i gave the design, it's simple to ehance |
what is good to return in that case ? | |
Dockimbel 29-Mar-2009 [3373] | It depends on the rules chosen to interpret the string content. That's the point, there's no simple way to implement a general case load-foreign that would return a block! of mixed REBOL values and "foreign" values as string. It's not possible to define a general set of rules because "foreign" can be just anything. LOAD just returns an error! when the syntax is incorrect and that's the best thing it can do. |
Maxim 30-Mar-2009 [3374x3] | doc, never said it should accept anything... |
just that I have seen it would work so many times as to not make it a useless feature. | |
its also a question of speed. load is blighthingly fast. | |
Dockimbel 30-Mar-2009 [3377] | If you can define a set of rules for your specific needs, then you can just use parse or Steeve's load-foreign for that (or ask someone to write it for you if you don't want to implement it). Everyone can have its own specific needs, I can't see how to define a set of rules for "foreign" data that would be or could be useful to most users. That would probably end up defining a few additionnal datatypes (or alternative syntax for existing datatypes). |
Gabriele 31-Mar-2009 [3378x2] | Max, did you ever consider WHY load is so fast? |
What makes you think that it would be so fast if it was able to do what you ask? | |
btiffin 31-Mar-2009 [3380] | Because. ;) If REBOL had a foreign! datatype! could the lexer not just ... about to throw syntax error, make a foreign! and continue? I still don't see why this is deemed a bad extension to REBOL. Sure it "stinks" to guru's but it opens doors to fishermen, contractors and linguists, imho. And yes it could look like a load of gunk if a quote, paren, brace or bracket was misaligned. So? For code purity, I'm sure Steeve could spend a few minutes to write 4 lines to scan a loaded series! and recursively highlight the foreign! data, providing a semblance of a lint procedure for those writing apps. My push for foreign! has little to do with apps, and just about all to do with data, human real-world data. For people using data for sums, control, etc... just use the lint scan to reject data blocks that have ANY foreign! substances?? |
Izkata 31-Mar-2009 [3381x2] | Why not just load the bad data as a string! ? |
should be simple to parse out string!s when a numeric datatype is expected... | |
Anton 31-Mar-2009 [3383] | Are you guys listening? |
Steeve 31-Mar-2009 [3384] | yep |
Anton 31-Mar-2009 [3385] | I'm just a bit amazed at the lack of comprehension. I agree with DocKimbel and I advise to think on his words longer. |
older newer | first last |