正文

Forth-早期岁月(3)2005-08-05 16:18:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/forth/3488.html

分享到:

自由程序员
 
    我在1965年离开史丹佛大学成为一个在纽约城地区的自由程序员,还好这很平常,而我找了使用Fortran、Algol、Jovial、PL/I及多种汇编语言来写程序的工作,我四处反复的带着我的一堆卡片,并且在必要时重新编写。
    迷你计算机那时出现了,并且也有了终端机,解译器用于电传输入很理想,不久又包含处理输出的程序代码,所以我们得到了下列这些字:
 
     KEY  EXPECT
     EMIT  CR  SPACE  SPACES  DIGIT  TYPE

    EXPECT是个呼叫KEY来读入敲键的循环,TYPE是个呼叫EMIT来显示字符的循环。
    随着TTY而来的是纸带和某些最不人性化的软件编辑、打洞、装载、组合、打印、装载、测试及反复等不能想象的时光,我记得一个在曼哈顿摩天楼上最惨的星期天,当时我找不到连结胶带(不能做其它事)而咒骂”一定有更好的方法”。

    我为实时系统公司(RSI)的Bob Davis做了相当多的工作,我变成5500大型计算机的指导员来支持他的分时服务(大型主机的远程输入),并且写了一个Fortran到Algol转译器和档案编辑工具,这转译器敎了我字之间空格的价值,而Fortran并不需要。
    解译器仍然接受字前面有意义的6个字符(5500有48位字组),下面的字:
 
     LIST  EDIT  BEGIN  AGAIN  EXIT

出现了,其中BEGIN…AGAIN要拼成START…REPEAT,而且用来包着编辑器命令。
 
     T  TYPE  I  INSERT  D  DELETE  F  FIND

    稍后用于国家无线天文台的编辑器,字FIELD使用摩哈斯科和Forth公司的数据库管理方法。
    Forth独特的特征之一从这里而来,这规则是当解译器完成时,Forth以随后加个OK来响应每个输入行,对于在输入是以换行结尾,必须响应空白和包含换行的OK时可能有困难。在实时系统公司,OK是在下一行,但它仍然在令人感到威胁的通讯在线友善地传递信心给使用者。
 
     56 INSERT ALGOL IS VERY ADAPTABLE
     OK

    这个后置记号提出了数据堆栈,但它必须只能有一层深。


摩哈斯科,1968
 
    1968年我转业成在纽约新阿姆斯特丹的摩哈斯科工业公司的商业程序员,他们是主要的家饰公司---地毯和家俱。我已与在RSI的Geoff Leach一起工作,而他也说服我跟随他去市区,我刚结婚,而新阿姆斯特丹有一可爱的小镇气氛对比于纽约城。
    我以COBOL重写我的程序代码,并且学得了商业软件的真意,Bob Rayco是公司数据处理的主事者,他指派了两个相关的项目给我:
    他租了有2250图形显示器的IBM 1130迷你计算机,目的是去观察计算机绘图可否帮助图样地毯的设计,答案是”没有彩色”,所以1130搬走了。

    在此同时,我有了最新的迷你计算机环境:16位CPU、8K RAM、磁盘驱动器(我的第一部)、键盘、列表机、读/打卡机、Fortran编译器,其中读/打卡用来提供磁盘的备份,我又再度移植了我的解译器(回到Fortran),并且加入了交叉汇编器来产生2250用的程序代码到。
    系统十分的成功,它能画出动画式的3-D图样,当时IBM只能画静态的2-D,由于这是我第一个实时的绘图,我编写了太空战争,那是第一个电视游戏,我也转换我的Algol西洋棋程序成Forth,并且深深的惊讶于为何它变得比较简单。
    内含这个解译器的档案标注为FORTH,表示是第四(下一)代软件,但操作系统限制文件名只能有五个字符。
    这个环境让2250的程序规划比Fortran环境远远快了许多,所以我延伸了2250的交叉汇编器成为1130的编译器,这举动引入了许多的字:
 
     DO  LOOP  UNTIL
     BLOCK  LOAD  UPDATE  FLUSH
     BASE  CONTEXT  STATE  INTERPRET  DUMP
     CREATE  CODE  ;CODE  CONSTANT  SMUDGE
     @  OVER  AND  OR  NOT  0=  0<
 
它们仍然有不同的拼法

      LOOP  是   CONTINUE
     UNTIL       END
     BLOCK       GET
      LOAD       READ
      TYPE       SEND
INTERPRET       QUERY
    CREATE       ENTER
      CODE       the cent symbol

    这是迄今我找到美分符号的使用。循环索引和限制放于数据堆栈中,DO和CONTINUE用来回应Fortran。
    BLOCK管理了许多缓冲区来减少磁盘的存取。LOAD由1024字节区块中读取原始码,1024的选用是因它是一个好的磁盘模数量,并且证实是个好选择。UPDATE允许区块被标记然后当它的缓冲区需要时(或用FLUSH)再写入磁盘中,它实现了虚拟记忆,并且隐藏于储存(!)字当中。
    BASE允许八进位、十六进制和十进制数。CONTEXT是字典使用的第一个暗示,用来隔离编辑器字。STATE由区分编译及解译。在编译当中,字的字数及前三个字符被编入以便用于稍后的解译,奇怪的是,字可以用一个特殊字符来结束,不过畸型用法很快的就被遗弃了。撷取操作子(@)已很多种面貌出现,因为由变量、数组和磁盘而来是要区分的。而为了检视内存,DUMP变的重要。

阅读(3669) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册