<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[Forth语言编程话题]]></title>
<link>http://blog.pfan.cn/forth</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[新建[Forth中国]网站(forth.3322.org)]]></title>
		<link>http://blog.pfan.cn/forth/3818.html</link>
		<description><![CDATA[本BLOG中的大部分原创资料都已经搬过去了。网址：&nbsp;&nbsp;&nbsp;&nbsp;http://forth.3322.org/欢迎大家共同参与网站的建设！有空常来坐！Forth QQ群：12781666（Forth程序员之家）本人QQ：1289446（YOYO）]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-15 12:38:00</pubDate>
		</item>
				<item>
		<title><![CDATA[&nbsp;BLOG中的RetroForth中文手册上传]]></title>
		<link>http://blog.pfan.cn/forth/3558.html</link>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;已经翻译的和未及翻译的,都已经上传完毕.这个Blog的无法定量的字符限制导致的传输失败至少延误了我1个半小时的时间.真是让人痛恨不已!!]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-06 17:00:00</pubDate>
		</item>
				<item>
		<title><![CDATA[BLOG中的FORTH入门资料上传]]></title>
		<link>http://blog.pfan.cn/forth/3493.html</link>
		<description><![CDATA[上传了一些FORTH介绍和基础知识方面的资料，好累啊

这个BLOG速度不错，就是不知道怎样嵌入图片链接，以及怎样对文字进行修饰，给yaoz@163.com去了信进行询问，不知何时能得到答复。]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 16:55:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth-早期岁月(5)]]></title>
		<link>http://blog.pfan.cn/forth/3491.html</link>
		<description><![CDATA[现在每个Forth对于它的独特计算机有一个组译器，它使用后置式的执行码并且在数据堆栈上组合地址，用于Forth方式的分支结构字。大型计算机的助忆码定义成;CODE之类的字，可能要花上一个下午来写程序，举一个例子，就如上述的NEXT宏。
&nbsp;&nbsp;&nbsp;&nbsp;非传统的算术运操作数证明它们的价值
　
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M*&nbsp;&nbsp;*/&nbsp;&nbsp;/MOD&nbsp;&nbsp;SQRT&nbsp;&nbsp;SIN.COS&nbsp;&nbsp;ATAN&nbsp;&nbsp;EXP&nbsp;&nbsp;LOG 
 
&nbsp;&nbsp;&nbsp;&nbsp;M*是常用的两个16位数字产生32位积的硬件乘法(当然，参数在数据堆栈)，*/后面跟着除法来实作有理数算数，/MOD回传商及余，对于档案中的纪录的寻位很有用，SQRT由32位参数产生16位的结果，SIN.COS传回正弦与余弦，对于向量及复数算术(FFT)很有用，ATAN是它的反函数，对于象限不会摸棱两可，EXP和LOG是以2为基数的。
&nbsp;&nbsp;&nbsp;&nbsp;这些使用固点算术---二进制小数点后14或30位用于三角，10位用于对数，由于较简单、较快且比浮点数还正确，所以这变成Forth的一特色。但是硬件与软件浮点比较容易实现。
&nbsp;&nbsp;&nbsp;&nbsp;我喜欢称赞Hart在将函数以不同精确度作逼近的表格作业上的无价成就[Hart 1978]，它们提供我们这些努力奋战的人从已有链接库限制中取得自由。 
&nbsp;&nbsp;&nbsp;&nbsp;字DOES&gt;的出现(拼成;:)定义了某类的字(像是;CODE)，藉此指定当这类字被参考到时要解译的定义，这个发明非常投机巧妙，但对于定义运作码非常有用。
&nbsp;&nbsp;&nbsp;&nbsp;尽管如此，我不能说服薜伦斯维尔Forth非常合适，我不能继续被允许对巨大数组天线写程序，任何团队里，25%喜欢Forth，而25%讨厌它，争执常会变的强烈而妥协微乎其微，所以同好们齐心同力成立了Forth公司，而那是另一段故事。
 
道德论
　
&nbsp;&nbsp;&nbsp;&nbsp;Forth的故事常是道德剧制]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 16:20:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth-早期岁月(4)]]></title>
		<link>http://blog.pfan.cn/forth/3490.html</link>
		<description><![CDATA[但是最重要的，现在有了字典了，解译程序代码现在有个名字和可由链接列中寻找相符的字。CREATE建构了典型的字典项目：
　
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link to previous entry
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count and 3 characters
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code to be executed
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters
　
&nbsp;&nbsp;&nbsp;&nbsp;码栏是最重要的创新，因为一旦字被找到后，间接跳跃是唯一的负担。计数值用于区分不同的字，这是我于史丹佛大学的编译器编写者那学到的。
&nbsp;&nbsp;&nbsp;&nbsp;有一类重要的字以CODE来显现，机器指令跟随在参数栏后，所以任何有内在计算机能力的字，现在都能被定义。;CODE指定某一新类的字要执行的程序代码，并且引入了现在称为对象的东西。
&nbsp;&nbsp;&nbsp;&nbsp;SMUDGE防止定义于解译过程中的递归，由于字典由最新向最老定义来搜寻，递归正常来说将会发生。
&nbsp;&nbsp;&nbsp;&nbsp;最后，返回堆栈出现了，从此之后，定义不必被巢状了，或使用数据堆栈记录它们的返回地址，总而言之，这是Forth跳跃式发展的大创新时期。
&nbsp;&nbsp;&nbsp;&nbsp;第一个Forth的论文，一个摩哈斯科内部文件，由Geoff和我所写[Moore 1970]，现在看来，它还不落伍。
&nbsp;&nbsp;&nbsp;&nbsp;1970年Bod订购了Univac 1108计算机，有个野心勃勃的计划来支助订购登记系统租赁线的网络，我已经用Forth写了报告产生器，并且有信心我能编写订购登记，我移植Forth到5500(独自的!)来加入可信度，但是公司的软件是COBOL，不可思议的折衷是安装Forth系统在1108上来与COBOL模块接口，以便做交易处理。
&nbsp;&nbsp;&nbsp;&nbsp;我鲜明地回忆那个冬天通勤到斯卡奈塔第去租用1107的第三班时间，我的TR4-A由于没有车顶和车窗，所以这变成每天夜里的生存训练，但是系统却非常的成功，即使Un]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 16:19:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth-早期岁月(3)]]></title>
		<link>http://blog.pfan.cn/forth/3488.html</link>
		<description><![CDATA[自由程序员
　
&nbsp;&nbsp;&nbsp;&nbsp;我在1965年离开史丹佛大学成为一个在纽约城地区的自由程序员，还好这很平常，而我找了使用Fortran、Algol、Jovial、PL/I及多种汇编语言来写程序的工作，我四处反复的带着我的一堆卡片，并且在必要时重新编写。
&nbsp;&nbsp;&nbsp;&nbsp;迷你计算机那时出现了，并且也有了终端机，解译器用于电传输入很理想，不久又包含处理输出的程序代码，所以我们得到了下列这些字：
　
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KEY&nbsp;&nbsp;EXPECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EMIT&nbsp;&nbsp;CR&nbsp;&nbsp;SPACE&nbsp;&nbsp;SPACES&nbsp;&nbsp;DIGIT&nbsp;&nbsp;TYPE
 
&nbsp;&nbsp;&nbsp;&nbsp;EXPECT是个呼叫KEY来读入敲键的循环，TYPE是个呼叫EMIT来显示字符的循环。
&nbsp;&nbsp;&nbsp;&nbsp;随着TTY而来的是纸带和某些最不人性化的软件编辑、打洞、装载、组合、打印、装载、测试及反复等不能想象的时光，我记得一个在曼哈顿摩天楼上最惨的星期天，当时我找不到连结胶带(不能做其它事)而咒骂”一定有更好的方法”。

&nbsp;&nbsp;&nbsp;&nbsp;我为实时系统公司(RSI)的Bob Davis做了相当多的工作，我变成5500大型计算机的指导员来支持他的分时服务(大型主机的远程输入)，并且写了一个Fortran到Algol转译器和档案编辑工具，这转译器敎了我字之间空格的价值，而Fortran并不需要。
&nbsp;&nbsp;&nbsp;&nbsp;解译器仍然接受字前面有意义的6个字符(5500有48位字组)，下面的字：
　
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LIST&nbsp;&nbsp;EDIT&nbsp;&nbsp;BEGIN&nbsp;&nbsp;AGAIN&nbsp;&nbsp;EXIT
 
出现了，其中BEGIN…AGAIN要拼成START…REPEAT，而且用来包着编辑器命令。
　
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 16:18:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth-早期岁月(2)]]></title>
		<link>http://blog.pfan.cn/forth/3487.html</link>
		<description><![CDATA[麻省理工学院，史密森尼亚天文物理观测台，1958
　
&nbsp;&nbsp;&nbsp;&nbsp;1957年十月是最令人激动的史普尼克事件，我是麻省理工学院的二年级生，并在哈佛大学的史密森尼亚天文物理观测台得到一个14节的兼差工作。
&nbsp;&nbsp;&nbsp;&nbsp;史密森尼亚天文物理观测台的负责人造卫星的光学追踪网络：一是观月视觉观察网络及Baker-Nunn追踪摄影机网络，由于史普尼克的趁虚而入，他们请了大学生以佛莱登桌上型计算器来计算预测值，John Gaustad告诉我有关麻省理工学院的IBM EDPM 704计算机的事情，并且借我他的Fortran手册，在我的第一个程序，轨道4号，完成后结束了我的工作[Moore 1958]。
&nbsp;&nbsp;&nbsp;&nbsp;我现在是个跟George Veis一起工作的程序员，应用他的最小平方凑配(Fitting)方法来决定轨道参数、观测站位置及到最后是地球外型[Veis 1960]，当然，这个兼差工作最少是40个小时，所以我的学业便墬入了地狱。
&nbsp;&nbsp;&nbsp;&nbsp;在麻省理工学院，John McCarthy告诉我一个难以置信的LISP语言课程，这是我第一次接触到递归及令人惊叹的多种计算机语言，Wil Baden曾注解说LISP是Lambda微积分而Forth是Lukasewcleicz后置。
&nbsp;&nbsp;&nbsp;&nbsp;APL当时也是个话题语言，由于它怪异的由右而左剖析法，虽然我佩服并且模仿它的运作，但我不能认同它们是一组最佳的集合。
&nbsp;&nbsp;&nbsp;&nbsp;在50年代的程序设计环境比现在都还严谨，我的原始码填满了两个纸夹的打洞卡，当它们要放入机器时必须要提着，这事常常是我做的，编译动作花了30分钟(就如同C一样)，但每天平均一个人的执行的计算机时间是有限的，除非有第三班。
&nbsp;&nbsp;&nbsp;&nbsp;所以我写了这个简单的解译器来读取输入卡并且控制程序，它也可直接做计算，5个轨道参数每个都有一个经验等式来计算大气拖延及非球形的地球，就这样我可以将用于许多人造卫星的不同等式做结合，而不用再重新编译。
&nbsp;&nbsp;&nbsp;&nbsp;因为这些等式将像是P2(二阶多项式)和S(正弦)的项]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 16:17:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth-早期岁月(1)]]></title>
		<link>http://blog.pfan.cn/forth/3486.html</link>
		<description><![CDATA[Chuck Moore 
chipchuck@colorforth.com 
1991 
　
摘要
　&nbsp;&nbsp;Forth是个简单、自然的程序语言，它之所以能达到如此卓越的接受度，多半要归功其有价值的整体效率。它于1960年代开始发展，历经了大学、业界到实验室的旅程。以下是个叙述从简单解译器如何慢慢扩展它的能耐而成为一个完整程序语言及操作系统的故事。
　
Forth1999
　
&nbsp;&nbsp;&nbsp;&nbsp;这篇文章是为HOPL II(程序语言的历史)会议所写，不过它立刻被退回，很明显的是因为写作的风格吧。最后大部分的内容则收录在一般人可接受的文章中[Rather 1993]。
&nbsp;&nbsp;&nbsp;&nbsp;这个HTML的版本是由原来的手稿重新编排，在文字上有做了些许的变动，校阅人Phil Koopman建议加入原始码的例子，在这之前还没有哩。 
　
内容
　
Forth 
麻省理工学院，史密森尼亚天文物理观测台，1958 
史丹佛大学，史丹佛线性加速中心，1961 
自由程序员，1965 
摩哈斯科，1968 
国家无线天文台, 1971 
道德论 
　
Forth
　
&nbsp;&nbsp;&nbsp;&nbsp;Forth发展于60年代的这个十年，横越了整个美国、在大学、商业界及实验室之中、在已确立的语言之中。在这段期间，我是它唯一的程序员，一直到后来它才有个名字。这段记述是由我记忆中回忆，只能靠着稀少的文献及幸存的列表来做些提示。
&nbsp;&nbsp;&nbsp;&nbsp;Forth几乎不是原创，但它真是个独特的组合，我由衷感谢那些允许我去开发它的人们及组织---虽然他们常不为人知，还有您，那么有兴趣想知道关于它的一切。
&nbsp;&nbsp;&nbsp;&nbsp;Forth是个简单、自然的计算机语言，今日它已是个被接受的世界级程序语言，它不是靠着业界、大学或政府的支持而达到这个目标，实在要归功于它的效率、可靠度及多样化。当Forth的效率性比其它语言的流行度还重要时，它便是被选择的语言，在现实世界中像是控制或通讯的应用，更常有这种情形。
&nbsp;&nbsp;&nbsp;&nbsp;许多Forth的组织和很多的小型公司有提供系统、应用及文件，在北美、欧洲及亚洲都有举行年度的研讨会，ANSI标准]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 16:13:00</pubDate>
		</item>
				<item>
		<title><![CDATA[FORTH的历史]]></title>
		<link>http://blog.pfan.cn/forth/3484.html</link>
		<description><![CDATA[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和网络系统上都将占有一席之地。

&nbsp;&nbsp;&nbsp;&nbsp;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 最佳的参考书籍。

&nbsp;&nbsp;简而言之，其实Forth 本身并非真的「易学难精」，若我们从计算机科学来看，它并非 〞单纯〞的只是一个计算机语言而已。就特性上它拥有自己的CPU 架构
(Virtrue Computer Structure ) ，自己的缓存器( Registers ) 。就系统上，它有自己的编译器及I/O 方式。就语言上有自己的语法和指令。这些在计算机科学上要学个二、三年的观念和技巧，我们是]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:54:00</pubDate>
		</item>
				<item>
		<title><![CDATA[FORTH这个东西]]></title>
		<link>http://blog.pfan.cn/forth/3483.html</link>
		<description><![CDATA[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，所需指令为 &quot;＋&quot; 及 &quot;＊&quot;。
因Forth指令均为后运算符法 (Post fix notation)，上述计算变成
从键盘输入 3 4＋5＊ 
从屏幕输出 35 Ok

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


要了解 Forth 语言，看得懂所设计的程序，首要的事，即要很清楚数据堆栈的运做，并时时清楚它的状态及内容。另外 Forth 有维护数据堆栈的指令如 :

DUP (Duplicate) － 复制数据堆栈最上层的一个数据。
SWAP －－ 数据堆栈最上面二层的数据互相交换位置。


回返堆栈及 Forth]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:51:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth 这个东西(14)]]></title>
		<link>http://blog.pfan.cn/forth/3481.html</link>
		<description><![CDATA[发信人: TwoO.bbs@csie (O-O), 信区: programming
标&nbsp;&nbsp;题: Re: Forth v.s. 软件工程
发信站: 交大资工天龙新闻社 (Tue Apr 26 16:38:54 1994)
转信站: cis_nctu!bbsroute!crosspost

Paladin (PaladinMu.bbs@bbs.cis.nctu.edu.tw) wrote:
&gt; FORTH 语言本身对于软件工程中所谈到的问题, 如模块化,
&gt; 耦合, 结构化等, 使用什么方式来达成呢?
&gt; FORTH 有 OOP的 extension, 但是我想问 FORTH是否使得
&gt; OOP 的实作更容易.

模块化 --- 你可能找不到比 Forth 更模块化的 language。一个 word 就相当于一个 function；一个词汇就相当于一个 library。

结构化 --- 和一般高级语言差不多，只是写法有点不同。
其它的我自认了解不多，请知道的人回答一下。

--------------------------------------------------------------------------------O-O&nbsp;&nbsp;&nbsp;(二轮族)&nbsp;&nbsp;&nbsp;---&gt;&nbsp;&nbsp;我想买一台装 PPC，执行 OS/2 的摩托车
==============================================================================

发信人: Alpha@miluku (&lt;&lt; 魔&nbsp;&nbsp;符 &gt;&gt;), 信区: programming
标&nbsp;&nbsp;题: Re: 大发现!! FORTH 无所不在!!!&nbsp;&nbsp;:))
发信站: 交大电子_BBS (Wed Apr 27 12:15:14 1994)
转信站: cis_nctu!bbsroute!miluku

==&gt;[作者]: porco@Maxwell (赖唐诺) 在 'Programming' 讨论区中提及,
&gt; 只用了 4000 余 gates 就能有数十 MIPS 的速]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:42:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth 这个东西(13)]]></title>
		<link>http://blog.pfan.cn/forth/3480.html</link>
		<description><![CDATA[发信人: william (C++/ASM/Win Master), 信区: 'programming'
标&nbsp;&nbsp;题: Re: 大发现!! FORTH 无所不在!!!&nbsp;&nbsp;:))
发信站: 交大资科_BBS (Apr 26 08:50:07 1994)

==&gt;[Author]: TwoO.bbs@csie (O-O) on board 'programming'
&gt; 问题是 ...... 在 Forth CPU 上，高级语言(Froth)&nbsp;&nbsp;等于&nbsp;&nbsp;汇编语言(Forth)；
&gt; 但是在〞其它芯片〞上，通常&nbsp;&nbsp;高级语言&nbsp;&nbsp;不等于&nbsp;&nbsp;汇编语言。
&gt; 你希不希望写程序时有高级语言的方便迅速；执行时则有如纯汇编语言写成般地
&gt; 快速、有效率？

最近看了看 ANS Forth 规格, 想请问一下：

1. PC 上有无合乎 ANS Forth 的 implementation? F-PC 似乎还没有, polyFORTH还没仔细摸。
2. ANS Forth 中看到一些 catch, throw 之类的东东, 好像和 C++的 exception handling 差不多。有没有人试过?
3. 在 asm中发展新程序, 有个头痛的地方：常会当机, 所以在 run 或 debug 之前,往往都会先 save 程序, 以免一当机心血就泡汤。不知在一般的 Forth环境中,有无对于“当机防护”做较好的处理? 因为我知道 Forth有低阶的一面, 在 Forth中夹杂 asm也是常事, 若是在 run之前都要把 words 先存起来 (Forth 会自动将words 存到dictionary FILE 吗? ) 的话, 似乎不太亲切。

------------ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ≡ 何陋居 ≡ 圣人, 吾不得而见之矣...&nbsp;&nbsp;&nbsp;论语&amp;#8231;述而
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:40:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth 这个东西(12)]]></title>
		<link>http://blog.pfan.cn/forth/3479.html</link>
		<description><![CDATA[发信人: syc@cc.ntu (Shiau Yong-Ching), 信区: programming
标&nbsp;&nbsp;题: Re: 大发现!! FORTH 无所不在!!!&nbsp;&nbsp;:))
发信站: National Taiwan University (Mon Apr 25 11:54:32 1994)
转信站: cis_nctu!bbsroute!crosspost

Daemon of Andromeda (lmy.bbs@bbs.cis.nctu.edu.tw) wrote:
&gt; 我没学过 Ada, 不了解其架构与堆栈框建置. 但 C 至今为何没听说 (可能是我孤陋
&gt; 寡闻) 类似的商品化 CPU, 我想可能有根本上的困难.

有啊，好久以前 (一两年前) 杂志上曾经报导过 AT&amp;T 有发展 C chip 的计划 (忘记它的名字了，不过他的锋头大概被最近的芯片大战抢光了)

===================================================================

发信人: Drifter@Maxwell (我和周慧敏生日同一天), 信区: programming
标&nbsp;&nbsp;题: Re: 大发现!! FORTH 无所不在!!!&nbsp;&nbsp;:))
发信站: 台大电机 Maxwell 站 (Mon Apr 25 13:09:10 1994)
转信站: cis_nctu!bbsroute!Maxwell

&gt; epilog, prolog等, 都是 overhead. 用 forth chip 时, 这些问题都被消除, 你可以
&gt; 这样想, 该chip 的machine language 就是forth, 这些 overhead 在芯片设计时就
&gt; 被消除. 此外, 该芯片最多可以并行三个 machine instruction (尤其是返回指令
&gt; EXIT) 一般高级语言用function call 虽可以增加模块化, 却增加了进出的 overhead,
&gt; C++ 的 inline 虽有部分效果, 却无可必免的增加 size overhead. 对 programmer 是
&gt; 一种看不见的惩罚. for]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:39:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth 这个东西(11)]]></title>
		<link>http://blog.pfan.cn/forth/3478.html</link>
		<description><![CDATA[发信人: lmy@cis_nctu (Daemon of Andromeda), 信区: programming
标&nbsp;&nbsp;题: Re: 大发现!! FORTH 无所不在!!!&nbsp;&nbsp;:))
发信站: 交大资科_BBS (Apr 25 09:30:44 1994)
转信站: cis_nctu

==&gt;[Author]: william@cis_nctu (C++/ASM/Win Master) on board 'programming'
&gt; 对时序要求如此严格的场合, 应该都是用 asm 吧? 毕竟高级语言也不是万能的。
&gt; 即使是 Ada, 在做 embedded system 时还是要动到 asm。

&nbsp;&nbsp;&nbsp;&nbsp;不见得, 我以前的论文是有关语音辨认的辨认速率问题. 再怎么要求 real-time也没有人会想用 asm. 除非是 critical function, 像我学弟就 K了 DSP32 的 asm,拼了命写了一个. 在没有良好的发展系统上, 这样做非常痛苦. 但若是有良好的发展系统, 相信我, 语音辨认的 algorithm 用 asm 去 implement 一样不是一件很聪明的作法. 即使我们最新的方法以将浮点运算数目从 1百多万/每字 降至 数万余/每字,用 DSP32 仍只能勉强 real-time, 但仍然不会去尝试用asm 来 implement 全套系统.目前仍然是用 该芯片的 C cross-compiler. 但其compiler最佳化不是很好. 如果能有高级语言能达成速度不输 asm, 那不是大家的希望吗?

&gt; 这是自然的, 用各 CPU 的母语来写程序, 自然最好。没听过在 Lisp machine 中的
&gt; C 程序能拼过 Lisp 的。
&gt; 问题是：若是在非 Forth chip 里, Forth 该如何避免这种 overhead? 我很感兴趣。

&nbsp;&nbsp;&nbsp;&nbsp;我的意思不是这样比, 我的意思是用同样的频率 (这代表了目前的芯片及高频电路技术), 以及同样的 BUS 架构 (使I/O &amp; memory 传输速率站在同样的基础), 以各种高级语言, 分别用最适合该语言的 CPU 来]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:37:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth 这个东西(10)]]></title>
		<link>http://blog.pfan.cn/forth/3477.html</link>
		<description><![CDATA[发信人: lmy@cis_nctu (Daemon of Andromeda), 信区: programming
标&nbsp;&nbsp;题: Re: 大发现!! FORTH 无所不在!!!&nbsp;&nbsp;:))
发信站: 交大资科_BBS (Apr 24 10:53:46 1994)
转信站: cis_nctu

==&gt;[Author]: mr814305@g814305.hung.ab.nthu (Hong-Yung Lee) on board
&gt; 我不知你们的 real-time 定义如何, 但我隔壁化工所室友的整套蒸馏塔监控程序,
&gt; 就是用 QBASIC 写的. 这提供你们一个参考.

&nbsp;&nbsp;&nbsp;&nbsp;我相信 BASIC 来应付蒸馏塔监控程序没有问题. 因为该系统的瞬时及稳态响应的变化速率应该在 BASIC 能够应付的能力之内. 但如果更快的系统, 可能连 C都无法应付, 而须用汇编语言.&nbsp;&nbsp;数字控制有一个基本要求, 你的取样及处理频率, 必须大于 2倍的系统自然频率以及外加驱动频率, (也就是受限于 Nyquist rate 的取样定理) 否则系统将无法 stable, 或是 steady state error 会太大.

&nbsp;&nbsp;&nbsp;&nbsp;用高级语言在最佳化的瓶颈就是许多缓存器被用掉去 keep 一些 virtual machine的状态, 如堆栈框, loop count等, 导致最佳化时自由缓存器不足. 还有堆栈框的epilog, prolog等, 都是 overhead. 用 forth chip 时, 这些问题都被消除, 你可以这样想, 该chip 的machine language 就是forth, 这些 overhead 在芯片设计时就被消除. 此外, 该芯片最多可以并行三个 machine instruction (尤其是返回指令EXIT) 一般高级语言用function call 虽可以增加模块化, 却增加了进出的 overhead,C++ 的 inline 虽有部分效果, 却无可避免的增加 size overhead, 对 programmer 是一种看不见的惩罚. forth 芯片的 word (可看成function)]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:35:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth 这个东西(9)]]></title>
		<link>http://blog.pfan.cn/forth/3476.html</link>
		<description><![CDATA[发信人: OhiYooo@cis_nctu (pie), 信区: programming
发信站: 交大资科_BBS (Apr 23 02:32:47 1994)

==&gt;[Author]: johnchen@csie (Chien-Hung Chen) on board 'programming'
&gt; pie (OhiYooo.bbs@bbs.cis.nctu.edu.tw) wrote:
&gt;&gt; 也许只有像 NOVIX FORTH chip 这么快速的 CPU 才有足够的能力, 和速度
&gt;&gt; 对这么快速扫瞄 (1 KHz) 的 ion beam 做最佳的 &quot;实时&quot; 控制吧!!&nbsp;&nbsp;:)
&gt;&gt; 下次进去 NDL FAB 做实验时, 不要忘记多看 E220 几眼哟!!!&nbsp;&nbsp;&nbsp;;-)
&gt; 我不是 NCTU E.E. 的同学, 但我想看一看那一台 ion implanter (VARIAN E220)
&gt; 不知道可否有机会亲眼目赌 NOVIX FORTH chip 它的风采!?
&gt; 因为我手头上就有 NOVIX FORTH chip的板子, 总是不晓得该把它用在何处!?

在 Varian E220/E500 ion implanter 中, 我想会使用 FORTH chip 的主要原因, 除了他速度快之外, 另外一个原因是 因为整个主计算机的控制程序是用 FORTH 写的!! 所以为了方便, 当然是用 FORTH chip 来做最重要部分的控制啰!!
:)

对了!! 整个 ion implanter 是个庞大且复杂的系统, 好好玩哟!!!&nbsp;&nbsp;&nbsp;:))

我想我们可以利用 FORTH chip 在物理化学的研究仪器上!!
我以前是作物里实验的研究生, 当时我们 set-up 实验室就曾遭遇到困难...
我们主要是要去测量一些核子反应所产生的事件, 记录并计算之!!
但是核反应事件发生的时间约为 1e-6 秒, 使得事件发生的频率太快!!
界面的速度追不上, 加上使用慢慢的 C 来发展程序!! 结果...

当然很惨...&nbsp;&nbsp;&nbsp;;)

要是那时采用 FORTH chip, 相信现在]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:34:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth 这个东西(8)]]></title>
		<link>http://blog.pfan.cn/forth/3475.html</link>
		<description><![CDATA[发信人: TwoO@nctu_csie_bbs (O-O), 信区: programming
发信站: 交大资工天龙新闻社 (Sat Apr&nbsp;&nbsp;9 11:28:53 1994)

Open Firmware (IEEE P1275 启动韧体标准) 的设备接口〞不仅提供让适配卡独立于 CPU 之外的机制，同时依赖一种语言来达成这个目的 ---Forth。〞&nbsp;&nbsp;因此可以预期的是，有些为适配卡或主机板写 ROM program的工程师必须开始学习 Forth。

〞目前，Apple、IBM、Motorola、及 Sun 已带头跳上 Open Firmware的列车〞。&nbsp;&nbsp;IBM 为 PowerPC-based 兼容系统定义了 PReP 规格，而〞PReP 策略目标之一就是要支持开放韧体 (Open Firmware)；IBM 将其 PReP 兼容系统的启动码放入快闪式内存 (Flash ROM) 的理由之一，就是为了将来可以容易地升级到 Open Firmware 标准。〞&nbsp;&nbsp;另外
，〞PCI 的适配卡只读存储器规格将 Open Firmware 的 FCode 定为一项可行方案，也是唯一能真的独立于 CPU 之外的可行方案。〞

当 Open Firmware 成为业界标准时，其本身也会成为 Forth 发展史上重要的里程碑。

==================================================================

发信人: Alpha@phoenix (- 蓝&nbsp;&nbsp;苹&nbsp;&nbsp;果 -), 信区: programming
发信站: 交大资工凤凰城信息站 (Sun Apr 10 11:08:52 1994)

&gt; 有那位高手, 能不能介绍一下 OOP FORTH ? :) key point 在那呢??

让我们来炒热这个话题吧!

OOP FORTH 见过的大致有三种方式, 只有一种是在 PC 上看到的, 可能是因为8088 的分段实在太龟了, 又缓存器太少了!
1.&nbsp;&nbsp;PC 上的最不好用, 有兴趣的可以去 asterix.inescn.pt 上抓个 FPC 和它的OOP 程序, 觉得丑]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:32:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth 这个东西(7)]]></title>
		<link>http://blog.pfan.cn/forth/3474.html</link>
		<description><![CDATA[发信人: johnchen@csie.nctu.edu.tw (Chien-Hung Chen), 信区: programming
发信站: 交大资工 News Server (Wed Apr&nbsp;&nbsp;6 13:24:38 1994)

Hi, all Forthy :
我觉得 Forth很流行呀! 我自己本人就有各种不同版本的 Forth Systems.Super8, Z80 eforth, 8051 Forth, 68K forth, and NC4000.&nbsp;&nbsp;不过, 我接触 Forth 这么久以来, 我发现使用它的人愈来愈高竿, 用得越多, 越是
绝口不提 !

像我应用 Forth 来发展 8051 的系统. 我绝对跟别人说是用 Assembly 写的, 免得他人问东问西的 !!

======================================================================

发信人: lmy@cis_nctu (Daemon of Andromeda), 信区: programming
发信站: 交大资科_BBS (Apr&nbsp;&nbsp;7 10:20:53 1994)

&nbsp;&nbsp;&nbsp;&nbsp;8051 Forth 我没用过, 倒是用过 Super8 Forth, 似乎是 F83 的 kernel 改过来的. 12MHz 的 S8 Forth, 跑得比我那 16MHz PC 286-AT 上的 F83 还快, 这是意料中的情形.

&nbsp;&nbsp;&nbsp;&nbsp;我觉得在迷你系统中要快速地 porting 一个交谈式的系统, 具有强大的硬件控制以及软件开发扩充能力, Forth 是最佳地选择. 也就是说, 在单芯片的世界中,我个人觉得 Forth 将是 porting effort最小的. (甚至在还没有很好的 assembler之前, 就可以有 meta-compiling 所产生的 Forth 系统了, Super8就是很好的例子,从头到尾, 我不必用它附的 assembler, 因为 Forth 自己就有 assembler. 而用 C语言来发展程序, development 的非交谈式环境, 以及所产生的large-]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:29:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth 这个东西(6)]]></title>
		<link>http://blog.pfan.cn/forth/3473.html</link>
		<description><![CDATA[发信人: TwoO@nctu_csie_bbs (O-O), 信区: programming
标&nbsp;&nbsp;题: Re: Forth为何不流行?
发信站: 交大资工天龙新闻社 (Sun Apr&nbsp;&nbsp;3 01:29:49 1994)
转信站: cis_nctu!bbsroute!news.csie!nctubbsgate!nctu_csie_bbs!TwoO

C++/ASM/Win Master (william@cis_nctu) wrote:
&gt;&gt; 各模块间要有一致的传递界面，最理想的是什么？&nbsp;&nbsp;答案是 Stack。
&gt; 在 PC 上, 有些 compiler (如 Watcom C, BC+ 3.1 以后) 就提供“缓存器传参数”
&gt; 以提高效率。而许多 RISC 更是如此。

这种 &quot;缓存器传参数&quot; 的方式虽然对高级语言的移植性没有影响，但程序设计师在混用其它语言时却要付出额外的心力去掌握及确定 compiler 的行为特性。以最简单的混用汇编语言来说，你必须知道 compiler 固定或甚至动态的用哪一个缓存器来传哪个或哪类的参数，有些甚至是文件中也没有说明的。&nbsp;&nbsp;而且当你换一种 compiler 时，这些规则可能又变了（尤其是那些文件中没有说明的）。
例如，BC++ 中将 object 的地址放在 SI 里传送，这永远不会更改吗？ Watcom C/C++ 又用什么来传这类的值呢？

这种作法虽然加快执行速度，却有可能加重 compiler 的负担（同时也使愈短愈好的发展循环又更长了），并且也失去了〞一致性〞。&nbsp;&nbsp;另外还可能额外地增加程序设计师的负担（这负担不仅沉重，也不是每个程序设计师都能负担得起的）。&nbsp;&nbsp;程序的速度并不代表一切。

&gt; 所以我质疑的是: &amp;#63153;Forth 在“原始程序”层次就极度仰赖 stack operations,
&gt; 不知这样是否自然? 这是以 programmer 的角度来看的; &amp;#63154;Forth 在 implementation
&gt; 上, 是否也真的高度仰赖 stack? 会不会降低效率? 还是说 Forth私底下会自动]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:25:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Forth 这个东西(5)]]></title>
		<link>http://blog.pfan.cn/forth/3472.html</link>
		<description><![CDATA[发信人: ajax@phoenix (ajax), 信区: programming
发信站: 交大资工凤凰城信息站 (Sat Apr&nbsp;&nbsp;2 08:59:46 1994)

==&gt; 在 TwoO@nctu_csie_bbs (O-O) 的文章中提到:
&gt;&gt; 太依赖 stack operation, 缺乏自然;
&gt; 其实 Forth 的 word 相当于 C 里的 function，可见 Forth 的高度模块化。
&gt; 各模块间要有一致的传递界面，最理想的是什么？&nbsp;&nbsp;答案是 Stack。&nbsp;&nbsp;在一般
&gt; 的模块化语言中，大多也都是用 stack 来传递参数，传回值有些虽不用 stack
&gt; ，但却因而有传回值个数的问题。
&gt; 在做运算时直接以 item in stack 做为 operand 有什么好处呢？&nbsp;&nbsp;在硬件上
&gt; 可以少掉 operand 的 encode/decode，在软件上由于不用在 compile(/link)
&gt; 时去计算 operand 的地址，速度变得很快，也因而使 design-&gt;coding-&gt;test
&gt; 这个发展循环变得非常快，并使得 interactive develop 容易达成。
&gt; PS. 在 C 中要测试刚写好的 function 正不正确有多麻烦，大家应该都印象
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;深刻。&nbsp;&nbsp;如果等到程序全写完时才测试，结果就不用我说了。

&nbsp;&nbsp;&nbsp;&nbsp;其实用 stack传参数最大的好处是很容易做到 reentrance, 因此 Forth很容易加上 round robin 的 multi-tasking 功能, 但是 stack的处理可能得留心些, 一不小心就留下一堆垃圾或 underflow.
&nbsp;&nbsp;&nbsp;&nbsp;interactive develop 的环境实在太棒了, 尤其是在搞 embedded system 时,不用为了测每一个 I/O写一个 assembler程序, 但我告诉别人, 总是会嫌再学一种语言麻烦, 奈何!

&]]></description>
		<author><![CDATA[yoyofreeman]]></author>
		<pubDate>2005-08-05 15:25:00</pubDate>
		</item>
		</channel>
</rss>