编译'hello,world'GNU smalltalk

时间:2013-06-15 02:56:56

标签: compilation stdout smalltalk gnu-smalltalk

每当我开始学习一门语言时,我做的第一件事就是生成一个用该语言编写的可执行文件(可能是一个已编译的程序或一个脚本),当运行时打印'hello,world'和一行到stdout :

theironknuckle@beastbook:~/Code$ ./hello
hello, world

使用GNU Smalltalk大约一个小时后,我还没有发现如何做到这一点。

(我知道hello world程序可以在会话中表示为

'hello, world' printNl

这不符合我的标准要求)

据我所知,Smalltalk没有主线。所以我非常感兴趣的是可能需要什么类型的样板来实现它。同样,该文件不一定必须编译,但练习的最终结果必须是smalltalk代码,导致上述会话提取。

PS。 yesyesyes 我知道我没有接受“基于图像的编程”哲学,这是错误的。我不在乎。我并不反对学习如何使用图像和IDE以及所有这些,但我现在对它的兴趣微乎其微。我关心的是Smalltalk语言本身。在语法上,哲学上和印刷上它是相当美丽的。从命令行解释器和文本编辑器学习编程语言我感到很自在。 :)

1 个答案:

答案 0 :(得分:12)

在GNU Smalltalk中,几乎没有样板。 您可以将单行放在.st文件中,然后使用gst hello.st

运行它

如果你想使用类而不是直接执行的语句进行探索,那么这很容易,传递给gst的文件中的以下内容就可以解决问题:

Object subclass: Hello [
    greet [
            'Hello, World' displayNl
    ]
].
greeting := Hello new.
greeting greet.

在命令行上传递给gst的文件将按顺序进行解析和执行,因此您可以将上面的列表拆分为两个单独的文件 - 一个用于声明/编译该类,另一个用于实际运行它。

一旦开发了程序,就可以使用-S标志来在加载类之后对图像进行快照,这样您每次都不会有编译开销,并且可以运行相反,启动声明。

gst也有shebang支持,因此如果您不想手动将其传递给gst,可以将#! /usr/bin/gst -f放在文件的顶部。 (有关更多信息,请参阅invocation上的文档,包括如何在不对gst的位置进行硬编码的情况下执行此操作)