Rebol/Core is not Mozart-Oz (notes)
Rebol has no keywords. JavaScript, by comparison, comes with a Date and a Math class and so appears to have keywords. JavaScript does have a set of reserved words which depend to some small extent on the version you are using.
Io, the language has no keywords. Smalltalk arrives with hierarchies of classes so appears to have a great many keyword selectors defined for each class. But stripped to bare essentials, a Smalltalk with self, super, UndefinedObject, Object, BlockClosure, Behavior, ClassDescription Metaclass and Class has very few keywords.
Any word in Rebol can be redefined.
Almost any keyword selector in Smalltalk can be redefined. The Object select >>doesNotUnderstand is often redefined to institute Proxy or Light-weight Object behavior.
You could argue that in JavaScript the essential keywords are prototype, constructor and new.
In Smalltalk they would be the selectors for declaring subclasses such as
variableSubclass:
variableByteSubclass:
subclass:
Metaprogramming in Smalltalk requires several keywords in the class Behavior.
One test is to see what is required to implement Prolog unification and backtracking in Smalltalk versus Prolog unification and backtracking in Rebol. Asking the same of Lisp is unfair, given that Rebol is almost Lisp and some Smalltalks such as Slate are being implemented in Lisp. The Lisp in VistaScript and in Smaltalk/X would be examples.
When I compare Io and Rebol to JavaScript and Oz it always strikes me how similar Rebol is to Oz. But then you might also be struck by how much JavaScript resemble a limited implemetation of Oz.
If Smalltalk did not ship with an IDE which has a Class Hierarchy Browser and if the Transcript and Workspace windows required that you only work explicitly with BlockClosures, then Smalltalk would look rather like Rebol, but postfix instead of prefix.
While Smalltalk is not imperative, it is not as naturally declarative as Oz.
Rebol has not statements; its default behavior is to evaluate an expression.
The Smalltalk class hierarchy could be viewed as the Rebol hierarchy of datatypes.
Implementing a user-defined datatype is not where Rebol programming usually takes place.
Implementing a subclass of Object, or even deeper in the hierarchy, is where Smalltalk tends to get started. This was not essential: the usual practice of Smalltalk is to hold classes in the image rather than interpret blocks from files at runtime. In practice Smalltalk runtimes tend to be a stripped-down bytecode packaging rather than an incrementally loaded bytecode.
Oz is usually not viewed as prototype-based. You could choose to work in Oz as if it were. Rebol and Oz do not oblige you to use the class datatype.
In Io and Rebol, vector is a fundamental datatype. With the adoption of Squeak style primitives in Smalltalk implementations such as Cincom VisualWorks Smalltalk, this is likely an implementation issue. I have not checked Dolphin, GNU or St/X or /MT mail lists on this point.
Rebol can be viewed as messaging-oriented. This can be a view of Oz, Io and Smalltalk.
Rebol has been using flatfile data. This has a parallel in PDC Prolog B+Tree indexing. An interface to DyBase is also available. Smalltalk has been associated in business with TopLink for Obejct-to-relation and with CORBA and its declarative IDL for distributed computing. The Smalltalk involvement in Gemstone, the framework which pre-dated J2EE, seems to be an unknown to most IT managers and architects.
Rebol/Command, the commercial Rebol, is more conventional in providing DBMS interfaces.
Oz would more naturally function with a DyBase-style dbms with, say, JSON.
Much of the flexibility in Rebol and OZ can be added to most Prolog implementations by using Logtalk, especially innovative reflection and messaging.
Rebol extended with Dataflow furhter approximates to a partial Oz.
When Rebol cannot evaluate an expression it throws an error.
When Smalltalk cannot identify a message selector, it evaluates the first implementation of the selector >>doesNotUnderstand which it find in the respective class hierarchy where the incident occurs at runtime. Overloading the message could be used to simulate dataflow in selected class hierarchies.
When Oz encounters a variable which is not bound, that thread pauses until the variable is bound before resuming. This is Oz dataflow concurrency.
What is natural in Rebol and Oz is somewhat un-natural, indeed exceptional, in Smalltalk.
To what extend Slate will approximate Rebol or Oz is an open question: if Slate is implemented using CLOS, it could closely approximate Rebol.
To what extent Io will resemble Slate appears now to be moer a question to what extent Slate will eventually resemble Io.
It is unclear whether Strongtalk and Self will continue to evolve.
Squeak/Croquet, Slate and Rebol are all moving towards rethinking what is OS and what is environment. This appears to arise in each major ‘VM’ undertaking which implements an Abstract Machine rather than a merely virtual machine.
Croquet and Rebol both appear in very good health as programming communities. Io appears to be off to a good start.
Croquet and Rebol are both led by visionaries from the early years of personal computing. Scala is lead by a visionary with an internet presence and a deep Java connection. Cecil/Diesel is lead by an academic visionary. SWI-Prolog is led by an academic visionary, as is Logtalk. Oz is led by an academic visionary.
Rebol is already associated with two major internet projects. Erlang is associated with one telecom project (Smalltalk has a continuing history in banking and a long history in telecom).
There is now a Pragmatic Programming text by the Erlang lead.
There is a major MIT tract on Oz.
Croquet is expressly, graphically, collaborative.
Rebol is yet to demnstrate this ability.
Explicit dataflow programming is new in REbol (Liquid Rebol)
Rebol has an IDE.
Smalltalk usually is the IDE (character-mode console Smalltalk is a neglected area).
Rebol3 will be a available as a dynamic library.
Smalltalk is used to build frameworks, not libraries. Slate is library focussed, with the exception of re-thinking Morphic as a framework.
Rebol can be seen as domain-language-oriented (PDC Prolog has gone is this direction)
Prologia IV is a constraint-programming system.
Oz is a constraint-programming system.
Constraint-handling rules are available in SWI-Prolog.
Constraint libraries are available for Java.
Backtalk constraint-resolution is available for Smalltalk.
Logtalk+Prolog is a messaging-oriented framework.
Oz is concurrency-oriented.
Rebol will be available for configuring as reliable NT Services
Smalltalk is a neglected language for reliable NT Services
Oz and Smalltalk benefit from mentoring.
It is often asssumed that JavaScript does not require mentoring. This is folly. JavaScript is a function language with closures.
Smalltalk functions well as a language for XP peer-programming.
Rebol appears to a language for what you might call ‘dialogal-programming’. This may prove to be the case with Squeak/Croquet.
The relationship of Oz to early Alice appears to have no analogy other than the relationship of Diesel to to Cecil.
Prolog purists rejected typing, and so rejected PDC (Turbo) Prolog aka Visual Prolog and Mercury.
Smalltalk purists rejected typing, often claiming that the untyped case is the more fundamental. This is not true. It is the limited case of the one-type language ( the ‘any’ or ‘object’ type.) Smalltalk appears to have ignored Category Theory. Rebol is based on denotational semantics in the way Lisp is based n lambda calculii.
Smalltalk has fundamental types hidden in the Symbol, the UndefinedObject, the block, the Metaclass and the indexed subclass. Misrepresenting the fundamental nature of the language does not serve the language community.
Smalltalk purists slathered ridicule on VisualBasic. This was folly. Composition almost always trumps inheritance. The burden of proof was on the Smalltalkers. The depth of inheritance in a GUI class hierarchy gives the exact wrong message. Telling neophytes to learn to tinker with the Browsers is the wrong way to mentor in Smalltalk. Smalltalkers blame Java marketing and buzzword managers for the demise of Smalltalk. A computer science historian examining actual documents would doubtless reveal that this is not historically accurate.
Smalltalk coders triumphed at code contests. These are pyrrhic victories often from leveraging libraries. Frameworks are more important than libraries.
The first framework, HotDraw, was implemented in Smalltalk and remains in VisualWorks.
Object-oriented programming is not class-oriented programming nor is it hierarchy-oriented programming. Transactions are more fundamental than objects. Reifying transactions can result in an unsuitable frameworks.
An interaction between two persons is not an object. Calling it ‘an instance of an interaction’ does not make it an object.
A field is not a particle.
Those who say everything is an object are no different than those who argued that zero is not a number.
In the nineteenth century up to WWI some European academics hounded some colleagues to the point of suicide. Those collegues were sonetimes right on fundamental matters. The incident concerning tectonic plates could easily have resulted in suicide.
In America, atheists are viewed as more unprincipaled than spies, traitors or terrorists. There is no reason to believe that academic COmputer Science departments are less plagued with power politics than the average American IT department or division.
In Corporate IT, assume that Beta will be trumped by VHS.
The audio-CD was not an advance over long-play stereo records in terms of sound quality. There is no reason to expect your CD’s to out-last your LP’s.
Management thinks that a language is just a language. If the chief only worked in one language, then you can be certain that any language is as good as any other for any problem domain.
People unaccustomed to creative thinking will likely feel threatened by creative thinking. They will feel that you tell a joke and they miss the punch line. Creative thinking often required logical leaps. Persons in control feel threatened by any result arising from a process they do not control.
A suitable language for a problem domain allows you to think about a problem in a way that would not likely occur to you if you were thinking in another language.
Managers think thay you are using jargon. They complain to their surgeon about not using jargon until they go under: then they rely on jargon being used by the surgical team. Managers see no need to understand the need for jargon. They think is is a convenience.
Thinking is not a convenience. It explains our survival as a single species, as an anomaly.
Speech was not created by the dominant species. Speech was created by an enslaved species. The slave takes note of nuance and communicates it to collaborating slaves. Nuance has survival value to slaves. Nuance is a mere luxiry to the dominant species.
Speech was not created to communicate among hunters or to recount the tale of the hunt.
Most hunts were unsuccessful. Hunters keep quiet. Hand signals and grunts do not evolve into grammar. Giving nuance – must do it now – must do it fast – is already done – these give rise to grammar. In the salon they sit and say little; in the kirchen, galley and storeromms there is a great deal of chatter.
A great deal of what we were taught is flat wrong. One entire room at the Nixon library was a bald-faced lie based on sheer calumny. Historians set this right. CS lacks sociologists and historians. The lies by misdirection of Bill Gates had more effect on computing than his railing against piracy.
Ricoh and IBM made assumptions about vendor/contractor behavior.
Ricoh contributed new technology. IBM contributed new technology.
Microsoft has contributed nothing new to computing if a language such as Oz cannot run unimpeded on .NET
If Oz can be implemented – unhindered- to run in .NET or some post-Mono CLR then the hoopla of the launch of .NET is borne out.
The Curl developer web site lists all known flaws in the existing Surge RTE and IDE release. This is both sobering and very reassuring.
It is quite possible that a general-purpose language which cannot resolve multiple inheritance should not be using inheritance. This is not true for domain-specific languages.
A declarative language for web content does not require a fully reflective class hierarchy.
RDF does not require an representation in hierarchical XML.
reStructured Text and Yaml are not a joke. Ridicule of both by XML mavens is self-serving or worse.
What Pythonistas do in a problem domain is a good indication of at least one viable approach.
If you chose to write another Perl script rather than use Tcl or another tool then you are surely a Perl programmer. If you are a *nix Perl script writer who does not use the screen utility then this may explain your not using Tcl or expect.
Perl and Larry Wall are a reminder that a language owner/leader is not always a good thing. This may yet prove to be the case with Python. It appears not to be the case with Ruby, but the day will come when Ruby performance will have to be addressed. Counter-examples abound.
Perl is bloat. Rebol is not. If the complexity of the Curl class library begins to impede Curl web applications, then Curl will also have suffered bloat.
Microsoft’s answer to bloat is to jsut change the API. Call this strategy bloat-n-morph.
Evolving a framework is very challenging. Witness Pollock in VisualWorks, Morphic in Squeak and Slate, the work on Rebol3.
The wholesale rejection of the IDE is rather like historians opting for evidence from the compilation of hearsay in favor of evidence from analysis of documents and physical traces.
Instead, the command line maven uses the filesystem resources of the OS and scripting on the OS. Tasks become tightly coupled to the OS and even to one shell of the OS. ‘I prefer the command line’ is little different from ‘I prefer MDI applications’. Add Bourne Shell and Windows and the stories are complete. Ok. Excel is MDI. I said ‘rather like’.
Leave a Reply