正文

Forth 这个东西(4)2005-08-05 15:23:00

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

分享到:

发信人: william@cis_nctu (C++/ASM/Win Master), 信区: programming
发信站: 交大资科_BBS (Apr  1 12:10:28 1994)

==>[Author]: ajax@phoenix (ajax) on board 'programming'
> Forth 为何不能像 C一样的流行? 这是许多学 Forth者的疑问.
> Forth 看似不流行, 也不尽然如此, 只是给 C比下去了, 因为在
> 世界各地都有 Forth协会的组织, 包括大陆每年都要举行研讨会.

这一点我相信。

>    可能有人觉得 Forth的 postfix语法令人难接受, 但是也因为采
> 用此语法, 所它的 compiler简单到几个 Words就可定义, 而玩 Forth
> 最喜欢的就是它的一切都在控制之下, 包括硬件, OS..., Forth 的
> 系统也都是将 Source code附上, 不喜欢那里, 就修那里, 连自己吃
> 饭的东西都要给客户, 难怪 Forth Inc. 的一套系统如此贵.

Forth 的好处之一, 似乎就在于整体语法简单, 都围绕在 stack 及 word,
所以做起来、玩起来很容易。

>   有人号称 Forth是 Programer Amplifier, 即可增加程序的产量,
> 但其含义也包括烂者益烂, 变成 write-only语言.

其它有子程序观念的高级语言应该也能达到「提高产量」的要求。

> 他的 interactive发展环境实在很棒, BASIC 虽然也是, 但只能站在一边凉
> 爽, Forth 从来就不屑与 BASIC较量,

这是无庸置疑的, 它的 interactive 环境还能自己添加东东进去。而且, 会 Forth的人似乎都很狂热... 因为 Forth 让他们能随意碰到 low-level的东东。

有个疑问: 常看到 Forth程序中夹杂 assembly, 请问这种「夹杂」是否也是 Forth公认的语法之一?

还有, 底下是我以前的旧信, 还希望有人能纠正一下里面的一些偏见...很想知道习惯 Forth的人对这些意见有何看法。

  发信人: william@cis_nctu (C++/ASM/Win Master), 信区: programming
  标  题: Re: Forth 有人熟吗?
  发信站: 交大资科系_BBS (Sep 18 01:01:32 1993)
  转信站: cis_nctu

  ==>[Author]: "Alpha" on board 'programming'
  > 我已经接触她两年了, 害得我越来越讨厌死(C)了!

  我曾碰过, 但放弃了。

  太依赖 stack operation, 缺乏自然;
  太依赖 RPN, 违反自小受教育以来的习惯;
  Conditional syntax 违反吾人习用的口语。
  缺乏标准。
  未和最新的 PLs 趋势连接。
  语言和系统几乎为一体 (定义语言即定义系统) , 是一 overhead。

---------------------------------------------------------------------------------- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
≡ 何陋居 ≡ 圣人, 吾不得而见之矣...   论语‧述而
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
==============================================================================

发信人: TwoO@nctu_csie_bbs (O-O), 信区: programming
发信站: 交大资工天龙新闻社 (Fri Apr  1 14:32:35 1994)

我对 Forth 不算很熟,但是我很喜欢他 .........

C++/ASM/Win Master (william@cis_nctu) wrote:
> 太依赖 stack operation, 缺乏自然;

其实 Forth 的 word 相当于 C 里的 function,可见 Forth 的高度模块化。各模块间要有一致的传递界面,最理想的是什么?  答案是 Stack。  在一般的模块化语言中,大多也都是用 stack 来传递参数,传回值有些虽不用 stack,但却因而有传回值个数的问题。

在做运算时直接以 item in stack 做为 operand 有什么好处呢?  在硬件上可以少掉 operand 的 encode/decode,在软件上由于不用在 compile(/link)时去计算 operand 的地址,速度变得很快,也因而使design->coding->test
这个发展循环变得非常快,并使得 interactive develop 容易达成。

PS. 在 C 中要测试刚写好的 function 正不正确有多麻烦,大家应该都印象深刻。  如果等到程序全写完时才测试,结果就不用我说了。

> 太依赖 RPN, 违反自小受教育以来的习惯;
> Conditional syntax 违反吾人习用的口语。

习惯靠左开车的人对靠右开感到不适应。  这还只是习惯的问题,两着间并无好坏之分。  但若因为习惯而错过了更好的东西,那就不值得了。

> 缺乏标准。

缺乏标准是由于 Forth 太有延伸性,你甚至可以将其改写成前置式或中置式。这种强烈的自由度当然造成没有标准,使得各 Forth 系统的共通性大减。  有鉴于此,Forth 还是有一些刻意定出来的标准(如 F83)。  但是〞标准就像两面的刃〞,其中的拿捏非常难,不也有人将〞标准〞称为〞必要的罪恶〞吗?

> 未和最新的 PLs 趋势连接。

最新的趋势? 看起来怎么好像是〞最新流行春装〞?  依我自己的看法,现在最新的语言不如 Forth 的地方还多着呢。

> 语言和系统几乎为一体 (定义语言即定义系统) , 是一 overhead。

Forth 系统本身就是用 Forth 定义出来的,而你的应用程序也是用 Forth 定义出来的,通通都是 Forth。  就因为如此,Forth 才能和软硬件系统配合得那么好,那么有延伸性。  由于 Forth 的 code generation 很快(前面说过了),这个 overhead 变得很小。  如果你善用〞词典〞,那就几乎看不到 overhead。  用 Borland C++ 时有不喜欢的地方,你有试过改它的 IDE 吗?  在 LIB中加个 function 方不方便呢?

另外,要把在 68K 上的 Forth 移到 x86 上怎么做?  把 Meta-File 里的东西(都是些 Forth 里最基本的东西)用机器码重新定义一次,然后再 Meta-Compile一下,就好了(对,就好了)。

有这么大的自由,却只多了那么一点小到〞可能〞看不到的 overhead,不值得吗?

阅读(2603) | 评论(0)


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

评论

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