博文

新建[Forth中国]网站(forth.3322.org)(2005-08-15 12:38:00)

摘要:本BLOG中的大部分原创资料都已经搬过去了。
网址:
    http://forth.3322.org/
欢迎大家共同参与网站的建设!
有空常来坐!

Forth QQ群:12781666(Forth程序员之家)
本人QQ:1289446(YOYO)......

阅读全文(4193) | 评论:0

 BLOG中的RetroForth中文手册上传(2005-08-06 17:00:00)

摘要:    已经翻译的和未及翻译的,都已经上传完毕.这个Blog的无法定量的字符限制导致的传输失败至少延误了我1个半小时的时间.真是让人痛恨不已!!
......

阅读全文(4734) | 评论:4

BLOG中的FORTH入门资料上传(2005-08-05 16:55:00)

摘要:上传了一些FORTH介绍和基础知识方面的资料,好累啊

这个BLOG速度不错,就是不知道怎样嵌入图片链接,以及怎样对文字进行修饰,给yaoz@163.com去了信进行询问,不知何时能得到答复。......

阅读全文(4376) | 评论:3

Forth-早期岁月(5)(2005-08-05 16:20:00)

摘要:现在每个Forth对于它的独特计算机有一个组译器,它使用后置式的执行码并且在数据堆栈上组合地址,用于Forth方式的分支结构字。大型计算机的助忆码定义成;CODE之类的字,可能要花上一个下午来写程序,举一个例子,就如上述的NEXT宏。
    非传统的算术运操作数证明它们的价值
 
     M*  */  /MOD  SQRT  SIN.COS  ATAN  EXP  LOG

    M*是常用的两个16位数字产生32位积的硬件乘法(当然,参数在数据堆栈),*/后面跟着除法来实作有理数算数,/MOD回传商及余,对于档案中的纪录的寻位很有用,SQRT由32位参数产生16位的结果,SIN.COS传回正弦与余弦,对于向量及复数算术(FFT)很有用,ATAN是它的反函数,对于象限不会摸棱两可,EXP和LOG是以2为基数的。
    这些使用固点算术---二进制小数点后14或30位用于三角,10位用于对数,由于较简单、较快且比浮点数还正确,所以这变成Forth的一特色。但是硬件与软件浮点比较容易实现。
    我喜欢称赞Hart在将函数以不同精确度作逼近的表格作业上的无价成就[Hart 1978],它们提供我们这些努力奋战的人从已有链接库限制中取得自由。
    字DOES>的出现(拼成;:)定义了某类的字(像是;CODE),藉此指定当这类字被参考到时要解译的定义,这个发明非常投机巧妙,但对于定义运作码非常有用。
    尽管如此,我不能说服薜伦斯维尔Forth非常合适,我不能继续被允许对巨大数组天线写程序,任何团队里,25%喜欢Forth,而25%讨厌它,争执常会变的强烈而妥协微乎其微,所以同好们齐心同力成立了Forth公司,而那是另一段故事。

......

阅读全文(4100) | 评论:3

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

摘要:但是最重要的,现在有了字典了,解译程序代码现在有个名字和可由链接列中寻找相符的字。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的第......

阅读全文(3684) | 评论:0

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

摘要:自由程序员
 
    我在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…AGA......

阅读全文(3661) | 评论:0

Forth-早期岁月(2)(2005-08-05 16:17:00)

摘要:麻省理工学院,史密森尼亚天文物理观测台,1958
 
    1957年十月是最令人激动的史普尼克事件,我是麻省理工学院的二年级生,并在哈佛大学的史密森尼亚天文物理观测台得到一个14节的兼差工作。
    史密森尼亚天文物理观测台的负责人造卫星的光学追踪网络:一是观月视觉观察网络及Baker-Nunn追踪摄影机网络,由于史普尼克的趁虚而入,他们请了大学生以佛莱登桌上型计算器来计算预测值,John Gaustad告诉我有关麻省理工学院的IBM EDPM 704计算机的事情,并且借我他的Fortran手册,在我的第一个程序,轨道4号,完成后结束了我的工作[Moore 1958]。
    我现在是个跟George Veis一起工作的程序员,应用他的最小平方凑配(Fitting)方法来决定轨道参数、观测站位置及到最后是地球外型[Veis 1960],当然,这个兼差工作最少是40个小时,所以我的学业便墬入了地狱。
    在麻省理工学院,John McCarthy告诉我一个难以置信的LISP语言课程,这是我第一次接触到递归及令人惊叹的多种计算机语言,Wil Baden曾注解说LISP是Lambda微积分而Forth是Lukasewcleicz后置。
    APL当时也是个话题语言,由于它怪异的由右而左剖析法,虽然我佩服并且模仿它的运作,但我不能认同它们是一组最佳的集合。
    在50年代的程序设计环境比现在都还严谨,我的原始码填满了两个纸夹的打洞卡,当它们要放入机器时必须要提着,这事常常是我做的,编译动作花了30分钟(就如同C一样),但每天平均一个人的执行的计算机时间是有限的,除非有第三班。
    所以我写了这个简单的解译器来读取输入卡并且控制程序,它也可直接做计算,5个轨道参数每个都有一个经验等式来计算大气拖延及非球形的地球,就这样我可以将用于许多人造卫星的不同等式做结合,而不用再重新编译。
  &n......

阅读全文(3867) | 评论:0

Forth-早期岁月(1)(2005-08-05 16:13:00)

摘要:Chuck Moore
chipchuck@colorforth.com
1991
 
摘要
   Forth是个简单、自然的程序语言,它之所以能达到如此卓越的接受度,多半要归功其有价值的整体效率。它于1960年代开始发展,历经了大学、业界到实验室的旅程。以下是个叙述从简单解译器如何慢慢扩展它的能耐而成为一个完整程序语言及操作系统的故事。
 
Forth1999
 
    这篇文章是为HOPL II(程序语言的历史)会议所写,不过它立刻被退回,很明显的是因为写作的风格吧。最后大部分的内容则收录在一般人可接受的文章中[Rather 1993]。
    这个HTML的版本是由原来的手稿重新编排,在文字上有做了些许的变动,校阅人Phil Koopman建议加入原始码的例子,在这之前还没有哩。
 
内容
 
Forth
麻省理工学院,史密森尼亚天文物理观测台,1958
史丹佛大学,史丹佛线性加速中心,1961
自由程序员,1965
摩哈斯科,1968
国家无线天文台, 1971
道德论
 
Forth
 
    Forth发展于60年代的这个十年,横越了整个美国、在大学、商业界及实验室之中、在已确立的语言之中。在这段期间,我是它唯一的程序员,一直到后来它才有个名字。这段记述是由我记忆中回忆,只能靠着稀少的文献及幸存的列表来做些提示。
    Forth几乎不是原创,但它真是个独特的组合,我由衷感谢那些允许我去开发它的人们及组织---虽然他们常不为人知,还有您,那么有兴趣想知道关于它的一切。
    Forth是个简单、自然的计算机语言,今日它已是个被接受的世界级程序语言,它不是靠着业界、大学或政府的支持而达到这个目标,实在要归功于它的效率、可靠度及多样化。当Forth的效率性比其它语言的流行度还重要时,它便是被选择的语言,在现......

阅读全文(3936) | 评论:0

FORTH的历史(2005-08-05 15:54:00)

摘要:Forth 的历史

Forth 是一种计算机语言,它是由charles moore先生在六十年代末期发明的,
在最初的十年Forth 几乎没有人知道,一直到了一九八十年代以后,由于它的语法精简,结构优雅,加上研究团体Forth Interesting Group ( FIG )的大力推广,才渐渐的为人所发掘,进而广为人知,我们也可以看到它在许多产品上有优越的表现。

当初charles moore先生在发明Forth 时,即是Fourth 的缩写,意指此为〞第四代计算机语言,〞在当时他的思考方式和方法都被排除在当时计算机科学的「主流」之外。但就现在来看,许多Forth 结构已被计算机科学拿来在现代的计算机
上使用。举例而言如:Sun Workstatiow 和Power Pc与PCI 的Open Boot 开机系统F-Code 就完全是Forth语言,它将在未来pc和网络系统上都将占有一席之地。

    Forth 的程序代码并不易懂,因为它的编译器也是Forth 本身所写成的。要真正了解Forth 就必先了解编译器,不然就只能发挥到和其它语言如C 一样的功能。而要了解编译器却又必先了解Forth。这种「易学难精」的特性,使许多人却。许多年来Forth 都只在某些特定的拥护者之间流传及使用在某些特定的产品上。从一九八十年代开始Forth 推广学会 ( Forth Interest Group)的成立,推出了一系列在各种微处理机上的Forth 系统,使得大家能有Forth 程序代码,进而使用它。更有许多书籍,如 Leo Brodie 的 Starting Forth 和 Thinking Forth,丁陈汉荪博士的 System Guide to Fig-Forth. 和 Inside F83。均是Forth 最佳的参考书籍。

  简而言之,其实Forth 本身并非真的「易学难精」,若我们从计算机科学来看,它并非 〞单纯〞的只是一个计算机语言而已。就特性上它拥有自己的CPU 架构
(Virtrue Computer Structure ) ,自己的缓存器( Registers ) 。就系统上,它有自己的编译器及I/O......

阅读全文(4180) | 评论:3

FORTH这个东西(2005-08-05 15:51:00)

摘要:Forth 简介

Forth 语言是一种发展性很高的计算机语言而且提供了交谈式 (Interactive)
程序发展环境,给使用者使用。原本 Forth 只被发展且用在小型计算器的系统上,你可以看到几乎所有的各型微处理机上均有各型各色的 Forth 系统被发展出来。Forth 也可以被用在更宽广的应用上如 Spread Sheet,Expert Systems 和多任务的 database 上等。


Forth 是拥有两堆栈的虚拟机器

在表面上 Forth 是拥两个堆栈可以直接执行的计算机程序语言。在实质上这个虚拟机器是由程序计数器 (Program Counter),Memory (内存), ALU
(数学计算单元) 和 FILO (first-in, Last out),数据堆栈 (Data Stack及 FILO 回返堆栈 (Return Stack) 所构成的,是一套完整的 CPU 结构 。


Data Stack (数据堆栈)

Forth 指令或程序均可自数据堆栈获得参数并将其结果放回数据堆栈中。此数据堆栈可视为以先进后出 (FILD) 方式的缓存器组,专门处理 Forth 指令所需的参数及结果。
举例而言,若要计算 3+ 4 * 5,所需指令为 "+" 及 "*"。
因Forth指令均为后运算符法 (Post fix notation),上述计算变成
从键盘输入 3 4+5*
从屏幕输出 35 Ok

。 3 先被放入数据堆栈中
。接着 4 被放入数据堆栈,而 3 被挤入数据堆栈下层中
。接着 + 指令自数据堆栈中取得两个数据产生的结果 7,放入数据堆栈中
。接着 5 亦放数据堆栈中,而 7 被挤入下一层数据堆栈中
。接着 * 指令自数据堆栈中取得两个数据产生的结果为 35,放入数据堆栈中。
。接着 .指令自数据堆栈变成空的。
。"ok" 是 Forth 的提示字符。


要了解 Forth 语言,看得懂所设计的程序,首要的事,即要很清楚数据堆栈的......

阅读全文(4677) | 评论:0