Mercurial > repo
diff interps/clc-intercal/README @ 996:859f9b4339e6
<Gregor> tar xf egobot.tar.xz
author | HackBot |
---|---|
date | Sun, 09 Dec 2012 19:30:08 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/interps/clc-intercal/README Sun Dec 09 19:30:08 2012 +0000 @@ -0,0 +1,313 @@ +CLC-INTERCAL 1.-94.-2 + + "human beings are given free will in order to choose between + insanity on the one hand and lunacy on the other" + Aldous Huxley + +-- - -------- +-2 - Contents +-- - -------- + + -2 - Contents + -1 - Foreword + 0 - Introduction to CLC-INTERCAL pre-pre-escape 1.-94.-2 + 1 - What has changed since CLC-INTERCAL 0.05 + 2 - How to install this escape + 3 - How to modify the compiler(s) + 4 - Important notes about the new INTERNET library + 5 - Licence + + +-- - -------- +-1 - Foreword +-- - -------- + +A few years ago, I had, for several reasons, decided to completely GIVE UP +working on INTERCAL or, if you prefer, ABSTAIN FROM developing CLC-INTERCAL +any farther. + +Of course, the flesh is weak and here I am at it again. It just so happens +that I am using the "compiler compiler compiler compiler" for a serious +project, so I am going to develop it further. + + +- - ------------ -- ------------ -------------- -------- +0 - Introduction to CLC-INTERCAL pre-pre-escape 1.-94.-2 +- - ------------ -- ------------ -------------- -------- + +It has been decided during the development of CLC-INTERCAL 0.06 that there +would be no further releases of CLC-INTERCAL. However, the compiler has +been left unattended on an FTP server, and appears to have escaped. For this +reason, we refer to this as an "escape" rather than a "release". + +Additionally, development of CLC-INTERCAL version 0 has effectively stopped +before the escape of 0.06; a new versioning scheme has been introduced for +CLC-INTERCAL version 1. The main points to note are: + + * The term "version" has been replaced by "perversion" for correctness + * The perversion number consists of a floating-point number with + independent signs for the integer and fractional part. Negative + fractions indicate pre-escapes (so 1.-94 means "94 pre-escapes to + go before 1.00". Or you can just add the numbers together and get + 0.06, which is entirely a coincidence since 0.06 is not being + developed) + * The fractional part of a perversion number can be integer or floating + point, with a similar meaning for the parts. The current pre-escape is + 1.-94.-2 which means "2 pre-pre-escapes to go before pre-escape 1.-94". + +The fact that the compiler has escaped does not allow you to use without +reference to its licence: see the end of this document or the file COPYING. + +Since this is a pre-pre-escape, there are parts which are unimplemented +or partially implemented. The file "MISSING" describes what is missing. +There might also parts which are implemented but are intended to be left +implemented: these will be removed from the final escapes. + + +- - ---- --- ------- ----- ------------ ---- +1 - What has changed since CLC-INTERCAL 0.05 +- - ---- --- ------- ----- ------------ ---- + +Just about everything. See the file "Changes" for a complete list, or see +the following executive summary. + +The code is a complete rewrite. The "CREATE" statement which was documented +but not implemented has now been implemented (in a different form) and not +documented. This means that the compiler only needs to know about one +statement, "CREATE", and everything else can be created on-the-fly. This is +why the compiler itself and the various compatibility modules now include +INTERCAL source code consisting almost exclusively of "CREATE" statements. + +This made it a lot easier to extend the language by specifying new features +in INTERCAL instead of Perl. Most statements have been modified to allow +creation of quantum bits. For example, it is possible to create 16 quantum +bits in one operation by assigning to a register while not assigning to it. +It goes without saying that the practice is not recommended if you don't +actually possess a quantum computer. + +A new statement, "NEXT FROM", combines all the advantages of "COME FROM" and +"NEXT". It has been implemented essentially to provide a system call +interface, where the operating system is supposed to have a "NEXT FROM" +lurking in its darkest corner. See the last entry in the file "Changes" +for a complete description of the system call interface. Since this is +INTERCAL, the syscall interface is entirely system independent. System +dependent system calls are not supported. + +All old programs should work unchanged (modulo the unimplemented parts, but +this is due to change as the perversion number progresses towards 1.00). +Programs intended for different compilers can also be compiled by selecting +a different compiler object (for example, "ick.iacc" provides compatibility +with the C-INTERCAL compiler "ick", and "1972.iacc" with the original +Princeton compiler). All these compiler object must be first compiled using +"iacc.iacc", the INTERCAL Astonishing Compiler Compiler, which is also used to +compile itself before compiling other compilers. A pre-compiled version is +provided in this escape otherwise you'll never get started. + +The command-line compiler "oo, ick" and the inline module "Language::INTERCAL" +are not currently provided. They have been replaced by the compiler "sick" +and the module "Language::INTERCAL::Sick" respectively, which have a rather +different usage. A compatibility "oo, ick" and "Language::INTERCAL" is +intended to appear in a future pre-escape, and certainly before the escape. + +The former "on-line reference", has been included in the distribution in +directory doc/html; it has been adapted for CLC-INTERCAL 1.-94; however +some new features might be still undocumented or underdocumented. Some of +the HTML documents are included as templates: the actual documentation +will be produced in blib/htmldoc + + +- - --- -- ------- ---- ------ +2 - How to install this escape +- - --- -- ------- ---- ------ + +To unpack the distribution you need the following: + + * A command interpreter compatible with the Bourne shell + * the "dd" program + * optionally, gzip and/or bzip2 + +If necessary, uncompress the distribution: + + gzip -d CLC-INTERCAL-1.-94.-2.ddsh.gz + +or: + + bzip2 -d CLC-INTERCAL-1.-94.-2.ddsh.bz2 + +Unpack the distribution: + + sh CLC-INTERCAL-1.-94.-2.ddsh + +Create the Makefile: + + cd CLC-INTERCAL-1.-94.-2 + perl Makefile.PL + +Build the compilers: + + make + +See if everything works: + + make test + +And install: + + make install + +It is possible that, by the time you read this, we have provided two +alternative versions of some modules: pure Perl and Perl-with-C. The latter +is likely to be better in some way (speed, size), otherwise we would not +provide it. If Makefile.PL finds that alternative versions are available, +it will ask which one you want to install. In general, the pure Perl versions +will work as long as your Perl installation works; the Perl-with-C should +work but might break because your C compiler is not the same as mine, or +simply because it's C and it's more self-obfuscating than INTERCAL. If it +does not work, install the pure Perl version. If that does not work either, +you have found an unimplemented feature. Congratulations. + +The "make" and "make test" will take some time: "make" will run IACC (the +INTERCAL Astonishing Compiler Compiler) to build itself and all the other +compilers, and this is not quite a quick job. The "make test" will test +all parts of the compiler, including the Virual Machine, the Quantum +Emulator and the Just-Too-Late compiler. Have a coffee break, or read the +source code and try to figure out how it works. If you can figure out how +it works, please tell me, because I cannot. + + +- - --- -- ------ --- ----------- +3 - How to modify the compiler(s) +- - --- -- ------ --- ----------- + +The compiler and the compiler compiler are currently underdocumented +(which means that there is no documentation whatsoever). If you feel +the urge to modify the compiler itself, ignore the Perl runtime library +and edit the file "sick.iacc", which would have been installed somewhere +system dependent. If you have write permission to this system dependent +location and your command interpreter is compatible with the Bourne Shell, +you can locate the file and edit it by simply typing (all in one line, we +show it in separate lines for readability): + + sh -c '${EDITOR-vi} `sick -vo/dev/null sick.iacc 2>&1 | + head -1 | sed -e "s/\.\.\. \[.*$//"`' + +If you would rather not type the above, or you have no write permission to +the appropriate place (or if you have an inferior command interpreter), try: + + sick -vo/dev/null sick.iacc + +The complete path will appear in the first line of the output, so you can copy +or edit it. You do want to copy it in case you break it: + + sh -c 'cp `sick -vo/dev/null sick.iacc 2>&1 |\ + head -1 | sed -e "s/\.\.\. \[.*$//"` iacc.io.SAFE' + +When you have edited the file, rebuild the compiler object with: + + sick sick.iacc + +If you have edited a copy, type that from the directory where you left the +edited copy, or "sick" won't find it (but see the "-I" command line option) + +A similar consideration applies to rebuilding IACC (the INTERCAL Astonishing +Compiler Compiler). However, in this case you need to make a copy of "iacc.io" +as well as "iacc.iacc": + + sh -c 'cp `sick -vo/dev/null iacc.iacc 2>&1 |\ + head -1 | sed -e "s/\.\.\. \[.*$//"` iacc.io.SAFE' + sh -c 'cp `sick -vo/dev/null iacc.io 2>&1 |\ + head -1 | sed -e "s/\.\.\. \[.*$//"` iacc.io.SAFE' + sh -c '${EDITOR-vi} `sick -vo/dev/null iacc.iacc 2>&1 |\ + head -1 | sed -e "s/\.\.\. \[.*$//"`' + sick iacc.iacc + +If you break "iacc.io" you won't be able to recompile "iacc" unless you +re-install CLC-INTERCAL or use the copy you just made. + + +- - --------- ----- ----- --- --- -------- ------- +4 - Important notes about the new INTERNET library +- - --------- ----- ----- --- --- -------- ------- + +A new INTERNET library is now available as an extension to the "sick" +compiler (it may work with other compilers, but this is not very likely +for now). See directory doc/INTERNET for details. + +When this extension is loaded, the program will automatically start a +theft server if one isn't found already running on the local computer. +As there isn't yet an official port assignment for this, the port is +stored in the file system.sickrc, and should be changed when an official +assignment is available. Look for the line: + + I CAN UNDERSTAND "..INTERNET.PORT" AS "64928" + +and change the number as appropriate. You may also want to run your +INTERNET applications using a nonstandard port, but doing so will make +locally running programs incompatible with programs running elsewhere, +so stealing from remote systems will not succeed - unless of course one +has agreed on a port number with the remote system's admin. + +Some of the forms of the CASE statement, and the STEAL/SMUGGLE without an +IP address, require knowledge of the IP address and netmask of local LANs. +In some cases, it may be possible to obtain these automatically, however this +is not possible in some systems. If the information is not available, no +broadcasts are possible. To work around this problem it is possible to specify +the list of interface in sickrc (user or system) with options like: + + I CAN UNDERSTAND "..INTERNET.DEVICE.eth0" AS "192.168.1.2" WITH 24 + I CAN UNDERSTAND "..INTERNET.DEVICE.eth1" AS "10.3.6.9" WITH 8 + +Note that the option specifies the IP address and netmask of each interface; +in this case, 192.168.1.2/24 and 10.3.6.9/8; the device name is ignored at +present, but it may be a good idea to leave it the same as the name known to +the kernel. Also note that you must install Net::Netmask to be able to use +the list of devices from sickrc. + +An unusual feature of the INTERNET is that one can steal filehandles and they +will continue working. For example, if an INTERCAL program with the INTERNET +extension runs on computer A and has standard write redirected from a file, +then another program on computer B can steal that standard write filehandle +and will be able to write in from that file, even if the file is not on a +networked filesystem (because it's been stolen, however, the program which +opened the file can no longer use it - smuggling, on the other hand will allow +to share a file between computers). This feature has been used to create a +network-wide clipboard in which a server (a simple INTERCAL program) just +opens a file and then does nothing; clients then SMUGGLE the filehandle +and store the clipboard contents on it - automagically sharing it over the +network. Moreover, the server can be found using broadcasts, so there is +never any need for the user to know where it is running. + + +- - ------- +5 - Licence +- - ------- + +Copyright (c) 2006-2008 Claudio Calvelli <intercal@sdf.lonestar.org> +(Please include the word INTERLEAVING in the subject when emailing that +address, or the email may be ignored) + +In addition to the above, permission is hereby granted to use, misuse, +modify, distribute, break, fix again, etcetera CLC-INTERCAL-1.-94.-2 +provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the Author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. +