3

我有以下代码形式的海豚 Smalltalk:

digitalClockProcess := [[

       Processor sleep: 1000.

       (View desktop canvas)

               font: (Font name: 'Arial' pointSize: 36) beBold;

               text: Time now printString at: 10@10;

               free

] repeat] fork.

它在桌面上显示了一个数字时钟。这段代码可以在 GNU Smalltalk 上运行吗?我在 VirtualBox VM 上尝试了 Fedora,但它不起作用,并且gst在Ubuntu 上不存在,并且在 Fedora 和 Ubuntu 上都给出了gst-bloxgst-bloxgst-browser

对象:CFunctionDescriptor 新:1“<0x7ffb3a010dc0>”错误:无效的 C 调出 g_date_get_type

启动应用程序时。它是如何在 GNU Smalltalk 中完成的?

4

2 回答 2

4

我不熟悉 GNU Smalltalk(我使用 Pharo),所以也许有更好的方法来编写代码,但无论如何。

安装

gst从包管理器安装不需要任何 GUI(它是一个 CLI),即使它提供了它们,它也不会提取必要的系统库来运行它们,所以你必须手动安装它们:

  • 对于gst-browser(新用户界面):(libgtk2.0 libcairo2在 ubuntu 上测试)
  • 对于gst-blox(旧用户界面):(tcl tk未测试)

代码

我看到代码有两个问题:GST 不支持Process>>sleep:,并且它使用 GUI。

至于 GUI,Smalltalks 有非常不同的 UI 库,Dolphin 面向 MS Windows,GNU Smalltalk 使用 GNU 的东西(GTK 用于新闻 gst-browser,TK/TCL 用于较旧的 gst-blox),Pharo 使用雅典等.即使他们共享一些概念(例如MVC模式),他们也没有真正共享API。

事实上,GNUSmalltalk 似乎有“新”的 UI --- VisualGST(gst-browser)并且 gst-blox 已被弃用。

无论如何,经过一番挖掘,我最终得到了以下代码。它创建一个 GTK 窗口(gst-browser 使用的 UI),然后不断更新文本。

window := GTK.GtkWindow new: GTK.Gtk gtkWindowToplevel.
window setTitle: 'Time'.
window resize: 400 height: 300.
label := GTK.GtkLabel new.
label setText: Time now printString.
label show.
window add: label.
window show.

digitalClockProcess := [[
    (Delay forSeconds: 1) wait.
    label setText: Time now printString.
] repeat] fork.

的代码gst-blox必须改用 tcl/tk,我不熟悉。

运行代码

要在 中运行代码gst-browser,从顶部菜单中选择“工具 > 底部窗格”,然后将代码粘贴到底部窗格中的“工作区”(您可以通过“文件 > 新工作区”添加更多工作区。

于 2015-12-19T18:04:01.643 回答
0

可以在此处找到如何下载和构建 GNU smalltalk 的说明。这应该可以解决您在 ubuntu 上使用 gst-blox(带有 GUI 的 GNU smalltalk)的问题。

于 2015-12-19T16:18:32.880 回答