Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: [data structures] (was Re: [append][series]Appending to a series of

From: lmecir:mbox:vol:cz at: 21-Nov-2003 9:43

Hi Joel and all, Joel Neely napsal(a): ...snip...
>The design of every language with which I'm familiar reflects at least >two issues: the conceptual model used by the designer(s) (or lack >thereof!) and the decisions about what things to make easy for the >programmer using the language. > >Both Perl and REBOL make it easy to use a "variable" -- you just start >using it and the language keeps up with what you're doing; no advance >declaration is required. OTOH Java makes it easy to detect errors in >type mismatch as early as possible (at compile time), which REBOL and >Perl can't catch until the program is running. > >Perl goes further and makes it easy to use data structures; if you try >to modify/store data, the appropriate "place" is automagically created >(and initialized to an appropriate value, depending on the operation >you are performing). The Perl expression > > ++$array[$n] > >means "add one to the nth element of array". If the array doesn't have >n elements (or if the array doesn't even exist!), Perl will allocate >that position and and initialize it to zero before evaluating your >expression. > >REBOL seems to occupy a middle-ground position on this issue; it does >not require you to declare the existence of a data structure (as e.g. >Java does) but it *does* require that you allocate and initialize it >explicitly. >
I think, that you are describing *only* a top-down approach here. A bottom-up approach might lead to: get-value: function [ { get an element of a numeric array using zero-based index, default value is zero } array [block!] index [integer!] ] [value] [ value: pick array index + 1 either value [value] [0] ] set-value: func [ { set element of a numeric array using zero-based index, default value is zero } array [block!] index [integer!] value [number!] ] [ insert/dup tail array 0 index + 1 - length? array poke array index + 1 value ] inc: func [ { increment an element of a numeric array using zero-based index, default value is zero } array [block!] ] [ set-value array index 1 + get-value array index ]
> REBOL certainly has some nice built-in facilities for >processing series data, but once you leave those you are *really* on >your own. >
In Rebol you can "teach" the language to do what you want it to, because Rebol facilitates the process of the language extension.
>Language design decisions have far-reaching (and often subliminal) >effects on the subsequent design thinking of programmers using the >language(s) in question. One such issue that I find interesting is >the question of when I -- as the programmer -- must commit to a >decision regarding the data structures used within my programs. > >COBOL and Pascal require that I commit to the type and size of every >array before submitting my programs to the compiler, and initialize >the structures appropriately (at run time, but before any other use). >Java requires me to commit to the type of an array, but lets me defer >the size committment until run-time when I actually initialize it. >Newer versions of Java provide the Vector class, which can be thought >of as an array that can change size during use. Perl and REBOL (and >Python, et cetera) arrays/blocks not only let me dynamically resize >during use, I don't even have to commit to a single type of data to >put there! Finally, (back to the original discussion) Perl will even >automatically figure out when to allocate/initialize structures and >elements for me. >
What if you needed a different default value, wouldn't that leave you on your own in Perl?
>Advocates of each of these languages will offer passionate arguments >for why the binding-time choices of their preferred language are good. >As a polyglot, I'm less interested in picking sides in a political >debate than understanding deeply the effects on my own thinking when >I begin to "think like a native" in one or more of them. > >-jn- >
I think, that the "effect on thinking" in Rebol may be caused more by inertia than by language limitations. -L