将 GNU Smalltalk 项目导入 Pharo?

Importing a GNU Smalltalk project into Pharo?

我有大约 1800 行 GNU Smalltalk 代码要放入 Pharo。我已经开始 class by class,选择器一个选择器,但它非常耗时且乏味。

有没有办法批量导入项目?我可以轻松地使用 vi 预先调整 GST 源文件的格式,使其更像 Pharo。

我考虑过的另一件事是复制 "starter" .mcz 文件,了解 source.st 文件的格式,然后创建一个新的 source.st文件 cats 和 vi。但是还有 snapshot.bin 文件,其中似乎也有源代码,这使它成为一条艰难的道路。似乎应该有更简单的方法。我已经 Google 用不同的短语来寻找它,但没有找到任何东西。

将其放入 Monticello (.mcz) 格式对于迁移来说太过分了。只需将其转换为 fileout 格式 (http://wiki.squeak.org/squeak/1105),一旦您通过 filein 将其加载到 Pharo 中,您就可以根据需要使用 GUI 创建一个 Monticello 包。

查看文件输出格式涉及的快速方法(主要是将“!”放在正确的位置):

  1. 加载 Pharo
  2. 打开浏览器
  3. 右键单击菜单中的 class 和 select 'File Out'
  4. 您应该会在启动 Pharo 的目录中看到一个名为 [Classname].st 的文件

假设您有两个 classes,LuckyClass1 Object 的子class 和 [=14 的 LuckyClass2 子class =].假设您的名字是 LuckyName。假设您想将代码放入包 Lucky-Package1.

Object subclass: #LuckyClass1
LuckyClass1 subclass: #LuckyClass2

Class LuckyClass1 带有一个实例端方法 luckyInstanceSideMethod1,一个 class 端方法 luckyClassSideMethod1 和实例端变量 luckyInstanceSideVariable1 和 class边变量LuckyClassSideVariable1.

类似地 class LuckyClass2 有一个实例端方法 luckyInstanceSideMethod1,一个 class 端方法 luckyClassSideMethod1 和一个额外的实例端变量 luckyInstanceSideVariable2 和 class 端变量 LuckyClassSideVariable2.

方法参考如下所示

LuckyClass1>>#luckyInstanceSideMethod1
LuckyClass1 class>>#luckyClassSideMethod1
LuckyClass2>>#luckyInstanceSideMethod1
LuckyClass2 class>>#luckyClassSideMethod1

在 Linux/Mac OS X 上,执行

vi Lucky-Package1-unix.st

放入名为Lucky-Package1-unix.st的文件 像

Object subclass: #LuckyClass1
    instanceVariableNames: 'luckyInstanceSideVariable1'
    classVariableNames: 'LuckyClassSideVariable1'
    poolDictionaries: ''
    category: 'Lucky-Package1'!

!LuckyClass1 methodsFor: 'lucky instance side protocol 1' stamp: 'LuckyName 6/8/2016 17:05'!
luckyInstanceSideMethod1
    ^ luckyInstanceSideVariable1 := 'lucky instance side'
! !

!LuckyClass1 class methodsFor: 'lucky class side protocol 1' stamp: 'LuckyName 6/8/2016 17:06'!
luckyClassSideMethod1
    ^ LuckyClassSideVariable1 := 'lucky class side'
! !

LuckyClass1 subclass: #LuckyClass2
    instanceVariableNames: 'luckyInstanceSideVariable2'
    classVariableNames: 'LuckyClassSideVariable2'
    poolDictionaries: ''
    category: 'Lucky-Package1'!

!LuckyClass2 methodsFor: 'lucky instance side protocol 1' stamp: 'LuckyName 6/8/2016 17:15'!
luckyInstanceSideMethod1
    ^ super luckyInstanceSideMethod1, ' subclass'
! !

!LuckyClass2 class methodsFor: 'lucky class side protocol 1' stamp: 'LuckyName 6/8/2016 17:17'!
luckyClassSideMethod1
    ^ super luckyClassSideMethod1, ' subclass'
! !

事实上,您可以剪切并粘贴前面的块。

然后将换行符转换为回车 returns 否则 Pharo 会报错。这个很重要。如果你在 Linux/Mac OS X 你可以使用下面的

cat Lucky-Package1-unix.st | tr \n \r > Lucky-Package1-pharo.st

在 Windows 我仍然会使用 bash, vi, cat, tr from git-scm https://git-scm.com/download/win

然后归档 Lucky-Package1-pharo.st。它应该出现在系统浏览器的 Lucky-Package1 包中。