正文

Forth-早期岁月(4)2005-08-05 16:19:00

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

分享到:

但是最重要的,现在有了字典了,解译程序代码现在有个名字和可由链接列中寻找相符的字。CREATE建构了典型的字典项目:
 
     link to previous entry
     count and 3 characters
     code to be executed
     parameters
 
    码栏是最重要的创新,因为一旦字被找到后,间接跳跃是唯一的负担。计数值用于区分不同的字,这是我于史丹佛大学的编译器编写者那学到的。
    有一类重要的字以CODE来显现,机器指令跟随在参数栏后,所以任何有内在计算机能力的字,现在都能被定义。;CODE指定某一新类的字要执行的程序代码,并且引入了现在称为对象的东西。
    SMUDGE防止定义于解译过程中的递归,由于字典由最新向最老定义来搜寻,递归正常来说将会发生。
    最后,返回堆栈出现了,从此之后,定义不必被巢状了,或使用数据堆栈记录它们的返回地址,总而言之,这是Forth跳跃式发展的大创新时期。
    第一个Forth的论文,一个摩哈斯科内部文件,由Geoff和我所写[Moore 1970],现在看来,它还不落伍。
    1970年Bod订购了Univac 1108计算机,有个野心勃勃的计划来支助订购登记系统租赁线的网络,我已经用Forth写了报告产生器,并且有信心我能编写订购登记,我移植Forth到5500(独自的!)来加入可信度,但是公司的软件是COBOL,不可思议的折衷是安装Forth系统在1108上来与COBOL模块接口,以便做交易处理。
    我鲜明地回忆那个冬天通勤到斯卡奈塔第去租用1107的第三班时间,我的TR4-A由于没有车顶和车窗,所以这变成每天夜里的生存训练,但是系统却非常的成功,即使Univac令人印象深刻的是它效率(Les Sharp是计划联络人)。虽然最终的评估是反应时间,但我还可决定保持它的可维护性(小巧且简单)。可惜,财务的不振让管理阶层取消了1108,我仍然觉它是个误判,所以我第一个辞职。
    1108 Forth必须以汇编语言来写程序,它缓冲了输入及输出讯息并且分享CPU的时间给处理每一线的任务,就像你的典型操作系统。不过它也解译输入并且执行合适的COBOL模块,它维持鼓状缓冲区并且包装/卸包纪录,这些字
 
     BUFFER  PREV  OLDEST
     TASK  ACTIVATE  GET  RELEASE
 
    从这里开始有纪录。BUFFER当想要的区块被知道是空的时会防止磁盘的读取。PREV(前一个)和OLDEST是系统的变量用来实做近新使用缓冲区的管理。TASK定义启动时期的一个任务并且于需要时主动的(ACTIVATE)启动。GET和RELEASE管理分享的资源(鼓、打印机)。PAUSE是关于如何使任务让出CPU的控制权,它包含在所有的I/O运作之中并且对交易程序代码而言是隐藏的,它允许一简单的雏菊环时程算法不致于死锁。
    在被了通知之后,我写了一生气的诗及一本从未发表过的书,它说明如何发展Forth软件及鼓励简单及创新,它也说明间接线锁码,但第一次实作却是在国家无线电天文台。
    我曾挣扎过元语言的概念,元语言是说明语言的语言,Forth现在可以解译汇编语言,汇编语言又可以组成编译器,编译器又可以编译解译器。最后我决定这个术语并无任何用处,但仍然使用重新编译Forth的术语Meta-compile。

国家无线天文台, 1971

    George Conant供给我一个在国家无线电天文台的职位(15节),我是在史密森尼亚天文物理观测台时结识他的,而且他也喜爱轨道四号,所以我们移至维吉尼亚州的薜伦斯维尔,并且花了几个夏天在亚利桑那州的土桑当基特峰望远镜进行维修时。
    这计划将对Honeywell 316迷你计算机写个控制程序来用于36毫米望远镜的新型过滤器,它有9轨的磁带和Tektronix的储存管终端器。George给我自由发挥来发展这个系统,虽然他不满意结果。国家无线天文台是个使用Fortran的研究单位,而现在我已称呼Forth为另一个语言,他对于那组织必须标准在单一语言是正确的,因为现在其它的程序员想要用他们自己的语言。
    无论如何,我已经在IBM 360/50大型计算机以汇编语言编写Forth,然后我交叉编译它到316上,接着我于316上重新编译它(虽然我已有个终端器于360上,但受不了它的反应时间)。一旦系统可用后,应用是非常容易的。有两个监看的模式,连续与光谱线,光谱线最好玩,当资料被收集后并且以最小平方凑配合成线形后,我可以显示出光谱[Moore 1973]。
    系统在吐桑被完全接收,在那里是Ned Conklin主其事,它在在线资料简化上的最新技术上的确有进步,天文学家使用它来发现并校对当时变成热门研究题目的星际分子。
    Bess Rather被雇用来提供现场的支持,她第一次学习Forth系统,并说明它也写下文件,这对我少许的帮助。来年我重新对DDP-116写程序来最佳化望远镜的定点,接下来,Bess与我以DEC PDP-11替换了116与316。
    间接线锁码让发展这些事情成为可能,它是我在摩哈斯科的工作的自然发展,虽然在稍后我听到DEC使用直接线锁码在他们的编译器上,不过与其重新解译定义的文字,不如编入每个字典项目的地址,这样可以增强效率,因为对于每个参考只需要两个字节,而且地址解译器可以及快速地顺序通过一个定义,事实上,这个地址解译器在11上只是个2个字组的宏。
 
     : NEXT   IP )+ W MOV  W )+ ) JMP ;
 
    现在Forth已经完整了,而且我熟知它,我可以更快地写程序代码,而且更有效率和可靠,更甚者,它可以移植,我着手重新对用于300呎的Green Bank望眼镜定点的116计算机及开始用于超长基线干涉数组天文的HP迷你计算机写程序。George给我ModComp迷你计算机,而我做了用于干涉及脉冲搜寻(64K数据)的傅立叶转换,我甚至在360计算机上以Forth示范比汇编语言快20%的复数乘法。
    国家无线电天文台很重视我所精制的东西,他们同意一个顾问公司去确认可以衍生子公司的技术,将Forth专利的议题详细的讨论,但是由于软件专利过去常引起争议,而且可能牵涉最高法院,国家无线电天文台拒绝被这些事情纠缠,于是,所有权转回我手上,而我不认为创意应该被专利化,后见之明不得不承认Forth只有放置于公共领域才有机会,那里它才能茂盛的成长。
    线锁码改变了结构字(如DO LOOP IF THEN),它们得到了于编译期间将地址放到数据堆栈上的优雅实施方式。

阅读(3687) | 评论(0)


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

评论

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