发信人: 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,不值得吗?

评论