将GNU Smalltalk项目导入Pharo?

时间:2016-06-07 23:21:29

标签: smalltalk pharo gnu-smalltalk

我有大约1800行GNU Smalltalk代码我想进入Pharo。我已经开始按类选择,按选择器选择,但这非常耗时且乏味。

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

我考虑过的另一件事是复制一个"起动器" .mcz文件,了解source.st文件的格式,然后使用文件source.stcat创建新的vi。但是那里的snapshot.bin文件似乎也有源代码,这使得它成为一条艰难的道路。似乎应该有一个更简单的方法。我已经谷歌用不同的短语来表达它,但却无法击中任何东西。

2 个答案:

答案 0 :(得分:7)

将其置于蒙蒂塞洛(.mcz)格式对于迁移来说是过度的。只需将其转换为fileout格式(http://wiki.squeak.org/squeak/1105),一旦您通过filein将其加载到Pharo中,您就可以根据需要使用GUI创建Monticello软件包。

快速查看哪种文件格式涉及(主要是在正确的位置放置'!')

  1. 加载Pharo
  2. 打开浏览器
  3. 右键点击课程,然后选择' File Out'从菜单
  4. 您应该在
  5. 启动Pharo的目录中看到名为[Classname] .st的文件

答案 1 :(得分:2)

假设您有两个类,LuckyClass1Object的子类和LuckyClass2的{​​{1}}子类。让我们说你的名字是LuckyClass1。我们假设您要将代码放入包LuckyName

Lucky-Package1

使用实例方法Object subclass: #LuckyClass1 LuckyClass1 subclass: #LuckyClass2 的类LuckyClass1,类方法luckyInstanceSideMethod1和实例侧变量luckyClassSideMethod1以及类侧变量luckyInstanceSideVariable1

类似于具有实例方法LuckyClassSideVariable1的类LuckyClass2,类方法luckyInstanceSideMethod1和附加实例侧变量luckyClassSideMethod1以及类侧变量luckyInstanceSideVariable2

方法引用看起来像这样

LuckyClassSideVariable2

在Linux / Mac OS X上,执行

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

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

之类的东西
Lucky-Package1-unix.st

事实上,你可以削减&粘贴上一个块。

然后将换行符转换为回车符,否则Pharo会抱怨。这个很重要。如果您使用的是Linux / Mac OS X,则可以使用以下

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'
! !

在Windows上,我仍然会使用来自git-scm {b-3}的bash,vi,cat,tr

然后在cat Lucky-Package1-unix.st | tr \\n \\r > Lucky-Package1-pharo.st 中归档。它应该出现在系统浏览器的Lucky-Package1-pharo.st包中。