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

[REBOL] Unofficial examination of undocumented REBOL features (draft)

From: rebol::svendx::dk at: 23-Oct-2000 23:39

Hello list, Inspired by the recent "objects without overhead" thread, I decided to draft a document, describing some of the undocumented features of REBOL. I have attached my first atempt, which is also available at: http://www.obscure.dk/rebol/REBOL_behaviour.txt My hope is that many people will contribute with corrections, whole sections and very important; REBOL code to prove/disprove the assumptions made in the document. What do you think? Is it a generally good/bad idea? Is it structured right? focusing on the right aspects? Best regards Thomas Jensen BTW. English is not my native language, so please don't be shy to comment on the words/language/spelling used in the document :-) -- Attached file included as plaintext by Listar -- -- File: REBOL_behaviour.txt Title: Unofficial examination of undocumented REBOL features Version: 0.1 Status: draft original Author: Thomas Jensen ([thomas--obscure--dk]) Maintainer: Thomas Jensen ([thomas--obscure--dk]) Created: 23-Oct-2000 Last modified: 23-Oct-2000 History: 0.1: initial version *** disclamer *** The contents of this document is based on observered behaviour of the REBOL(tm) intepreter. The information given in this document is in no way endorsed by REBOL Technologies (REBOL tech.) *** goal *** To provide an description of some of the undocumented aspects of the REBOL(tm) language. These include: parsing, evaluation, contexts, values, words, objects and functions. Because REBOL is closed-source, some of these aspects can only be examined by analyzing the behaviour of the current REBOL intepreter. The reference version of the intepretor is always the most resent version of REBOL/Core, as other flavours (REBOL/View, REBOL/Command, etc) are presumed to be based on REBOL/Core code. *** concepts *** * context: a list of word/value pairs, a value being any valid REBOL value, including unset! In this text, I'll presume that a REBOL context! datatype exist * global context or top level context: the context represented by the 'words object! contained in the 'system object! * function: a REBOL function! value * object: a REBOL object! value * word!: a REBOL word! value *** operational behaviour *** a) LOAD (string!) behaviour 1) parse the source string into valid REBOL tokens. 2) for each token, determine the datatype and create the corresponding REBOL value. (If more than one value is present, create a block! value to contain them). NOTE: not all REBOL datetypes can be created in this step. Those that can is: * string! "a string" {a string} * email! [my--email--com] * integer! 1 * decimal! 1.5 * block! [] * word! my-word * set-word! my-set-word: * get-word! :my-get-word * lit-word! 'my-lit-word * refinement! /my-refinement * file! %my-file.r * issue! #my-issue * money! $1.50 * paren! () * path! my/path/value Those that can't is: * list! * hash! * function! * object! * unset! * datatype! * native! 3) traverse the block, and act according to the datatype: 3.1) word!, set-word! and get-word!: 3.1.1) look in system/words to see if the word is present there. 3.1.2) If it is not, create it with a value of type unset! 3.1.3) BIND the word to system/words 3.2) block!, paren!: 3.2.1) Process step 3 for this block (or paren) 3.3) path! 3.3.1) unfinished 4) return the block! or value b) BIND (block!, word!) behaviour 1) the target context is found using the 'known-word 2) the block is traversed, and each value is checked for one of the following types 2.1) word!, set-word!, get-word! refinement!, and path! 2.1.1) an internal reference in the value is set to refer to the target context! b1) BIND/COPY behaviour Like b) with these additions: 1a) the block! is copied (including sub-blocks, parens, etc), and all actions are performed on the copy instead of the original 2.2) block! paren! list! hash! 2.2.1) BIND/COPY is called recursivly on the value c) DO behaviour d) MAKE FUNCTION! (aka func) behaviour e) MAKE OBJECT! behaviour f) USE behaviour