我想开始学习Forth(就像在相关的 Stack Overflow 问题中学习和使用 Forth 是否实用?)。我看到有很多实现。我想用一个
- ANS 1994兼容版本(如果合理,但坚持标准可能会很好)
- 小而紧凑的实现,我不想要一个完整的操作系统。
- 视窗
- 易于使用,我是 Forth 的新手 ;-)
可以推荐哪些特定的实施方式?
如上所述, Win32Forth真的很棒。它有一个很好的集成开发环境,是一个非常现代的实现,似乎与标准非常匹配,并且包括一些更具实验性但被广泛接受的特性。
我使用Gforth,但我也使用Vim来编辑源文件。:) 就其支持的功能而言,Gforth 是优秀且“经典”的。它为您提供了一种非常“老派”的 Forth 体验,而且使用起来不会过于古怪。(一些免费的 Forth 用他们的命令行做一些奇怪的事情——我使用 Brodie 的“Starting Forth”作为 Forth 解释器应该如何表现的模型。)
我查看了SwiftForth,这是一个非常好的“高科技”Forth 系统,它在语言特性方面远远超出了经典 Forths 提供的功能,并且真正将 Forth 带入了现代编程世界。如果你想真正专业地编写 Forth 程序,SwiftForth 看起来几乎可以处理任何你想做的事情。
前段时间我评估了 4tH,一个Forth的实现。我认为它满足您的所有要求。例如编译器只有 61 KB。还完全支持浮点数,如果您想尝试将其用于技术/科学目的,这一点很重要。
4tH 可在大多数操作系统上运行,包括 MS-DOS、MS-Windows(16 位和 32 位)、Linux、Coherent、AIX、SunOS、BOS、BSD、Mac OS X、BeOS、RISC OS等。下载(Windows安装程序,1.5 MB,包括手册)。手册(PDF,1.1 MB)。
有一个以 Google Group 4tH-compiler为中心的活跃社区。例如,今天我收到了两条消息。
请注意,在 4tH 中,您无法定义自己的定义词(在编译时执行的词)。这不是一个严重的限制,除非您想涵盖高级 Forth 功能。
为了让你开始(因为这在手册或交互式编译中不是很清楚),安装后将编译器复制4th.exe
到一个空文件夹,在这个目录中创建两个文件,HelloWorld.bat
然后HelloWorld.4th
运行 HelloWorld.bat:
HelloWorld.bat:
4th.exe cx HelloWorld.4th
pause
HelloWorld.4th:
: hello ." Hello from XYZ!" cr cr ;
hello
迅捷。它不是自觉的小而紧凑;它恰好是。它易于使用(LOCATE WH EDIT,比通常的 WORDS 更好),附带两本书,并有一个包含十多年档案的优秀邮件列表。评估版不允许您编译交钥匙应用程序或 DLL;它仍然为学生提供了一个出色的控制台,并且可以以通常的方式支持脚本。快速 Windows 示例:
: sleep-monitor ( -- )
HWND_BROADCAST WM_SYSCOMMAND SC_MONITORPOWER 2 SendMessage drop ;
library dnsapi.dll
( ... DLL imports, constants ... )
variable results
: DnsQuery ( z -- res )
DNS_TYPE_A 0 NULL results NULL DnsQuery_UTF8 ;
: resolves? ( z -- f )
DnsQuery if false exit then
results @ DnsRecordListFree true ;
\ an example use of the dialog compiler
\ this compiled DSL is an example of something that 4th
\ precludes with its "not ... serious limitation"
DIALOG (HELLO-ABOUT)
[MODELESS " About Hello" 10 10 120 70
(FONT 8, MS Sans Serif) ]
\ [class text id x y sx xy ]
[CTEXT " HELLO" -1 10 10 100 10 ]
[CTEXT " (C) 1997 Forth, Inc." -1 10 25 100 10 ]
[CTEXT " http://www.forth.com" -1 10 35 100 10 ]
[DEFPUSHBUTTON " OK" IDOK 35 50 50 14 ]
END-DIALOG
如果你能找到 FORTH Inc 的旧 polyFORTH 的副本,以及可以运行它的旧 x86,这就是 Leo Brodie 的原始“Starting FORTH”中使用的语言。它是一个干净且非常健壮的 FORTH。
下载适用于 PC 和 Android 的Gforth。
用它作为计算器来修补它,解决简单的问题,斐波那契,解决二次 abc 等。
我推荐ciforth,因为您是 Windows 用户,为 Windows 构建的版本被称为wina: an MS-WIndows NAtive Forth。
ciforth 是一个用 NASM 汇编器编写的小型系统,并带有用于各种系统的类似接口。它体积小、速度快、经典(blocks ftw)、易于使用,因为它是老派,附带大量文档和一个不像 Gforth 那样压倒性的词表(Lina 的词表在这里,lina 和 wina 之间的唯一区别是访问底层操作系统的单词:linux/MS-Windows)。
Gforth 有很多臃肿的定义,例如,一些Starting Forth不能在其中工作。
ciforth 的官方版本唯一缺少的是浮点堆栈,但 Forth 可以非常出色地处理定点(如果您阅读 Start Forth,就会了解如何使用它)。 wina版本可以很好地调用 32 位和 64 位的dll 函数,但也可以制作调用 dll 函数的交钥匙应用程序。Beta 版本具有浮点作为可加载扩展。
Win32Forth对我来说效果很好。
durexForth是一个符合 ANS 的C64 Forth 并且非常小。