Импортировать проект 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 с помощью графического интерфейса, если хотите.

Быстрый способ узнать, что включает в себя формат файла (в основном просто поставив "!" В нужных местах):

  1. Загрузите Pharo
  2. Откройте браузер
  3. Щелкните правой кнопкой мыши по классу и выберите "Файл" из меню
  4. Вы должны увидеть файл с именем [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 пакет в системном браузере.

Другие вопросы по тегам