Импортировать проект GNU Smalltalk в Pharo?
У меня есть около 1800 строк кода GNU Smalltalk, которые я хотел бы использовать в Pharo. Я начал делать это класс за классом, селектор за селектором, но это очень много времени и утомительно.
Есть ли способ массового импорта проекта? Я мог легко настроить формат исходных файлов GST с vi
быть более похожим на Фаро заранее.
Еще одна вещь, которую я рассмотрел, это копирование "стартера" .mcz
файл, чтобы почувствовать формат source.st
файл, а затем создание нового source.st
с файлом cat
с и vi
, Но тогда есть snapshot.bin
файл, который также содержит источник, что делает этот путь трудным. Кажется, должен быть более легкий путь. Я использую Google с разными фразами, но ничего не нашел.
2 ответа
Перевести его в формат Monticello (.mcz) излишне для миграции. Просто переведите его в формат fileout ( http://wiki.squeak.org/squeak/1105) и, как только вы загрузите его в Pharo с помощью filein, вы можете создать пакет Monticello с помощью графического интерфейса, если хотите.
Быстрый способ узнать, что включает в себя формат файла (в основном просто поставив "!" В нужных местах):
- Загрузите Pharo
- Откройте браузер
- Щелкните правой кнопкой мыши по классу и выберите "Файл" из меню
- Вы должны увидеть файл с именем [Classname].st в каталоге, из которого вы запустили Pharo.
Скажем, у вас есть два класса, LuckyClass1
подкласс Object
а также LuckyClass2
подкласс LuckyClass1
, И скажем, ваше имя LuckyName
, И скажем, вы хотите поместить свой код в пакет Lucky-Package1
,
Object subclass: #LuckyClass1
LuckyClass1 subclass: #LuckyClass2
Учебный класс LuckyClass1
с методом экземпляра стороны luckyInstanceSideMethod1
метод класса luckyClassSideMethod1
и переменная стороны экземпляра luckyInstanceSideVariable1
и переменная на стороне класса LuckyClassSideVariable1
,
Точно так же класс LuckyClass2
с методом экземпляра стороны luckyInstanceSideMethod1
метод класса luckyClassSideMethod1
и дополнительная переменная стороны экземпляра luckyInstanceSideVariable2
и переменная на стороне класса 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'
! !
На самом деле, вы можете вырезать и вставить предыдущий блок.
Затем преобразуйте перевод строки в возврат каретки, иначе Pharo будет жаловаться. Это важно. Если вы используете Linux/Mac OS X, вы можете использовать следующее
cat Lucky-Package1-unix.st | tr \\n \\r > Lucky-Package1-pharo.st
В Windows я все еще использовал бы bash, vi, cat, tr из git-scm https://git-scm.com/download/win
Затем подайте в Lucky-Package1-pharo.st
, Должно появиться в Lucky-Package1
пакет в системном браузере.