2016-06-07 26 views
5

Tôi có khoảng 1800 dòng mã Smalltalk GNU tôi muốn kéo vào Pharo. Tôi đã bắt đầu thực hiện nó theo từng class, selector bằng selector, nhưng nó rất tốn thời gian và tẻ nhạt.Nhập dự án GNU Smalltalk vào Pharo?

Có cách nào để nhập số lượng lớn dự án không? Tôi có thể dễ dàng điều chỉnh định dạng của các tập tin mã nguồn GST với vi để có thể giống Pharo hơn trước.

Một điều tôi đã coi được sao chép một "khởi động" .mcz tập tin, nhận được một cảm giác về định dạng của tập tin source.st, sau đó tạo ra một mới source.st với tập tin cat s và vi. Nhưng sau đó có các tập tin snapshot.bin mà dường như cũng có nguồn trong đó, làm cho một con đường khó khăn. Có vẻ như có một cách dễ dàng hơn. Tôi đã Google cho nó với các cụm từ khác nhau nhưng đã không đánh bất cứ điều gì.

+0

Câu hỏi hay. Tôi đăng thông tin này lên danh sách để hiển thị quảng cáo nhiều hơn. –

Trả lời

7

Đặt định dạng Monticello (.mcz) quá mức cần thiết để di chuyển. Chỉ cần làm cho nó thành định dạng fileout (http://wiki.squeak.org/squeak/1105) và một khi bạn đã tải nó vào Pharo thông qua filein, sau đó bạn có thể tạo một gói Monticello bằng cách sử dụng GUI nếu bạn muốn.

Một cách nhanh chóng để xem những gì fileout định dạng bao gồm (chủ yếu chỉ đặt ở các vị trí đúng '!'):

  1. tải lên Pharo
  2. mở một trình duyệt
  3. Nhấp chuột phải vào một lớp học và chọn mục 'Out' từ menu
  4. bạn sẽ thấy một tập tin gọi là [classname] .st trong thư mục mà bạn đưa ra Pharo từ
+0

Điều này có vẻ đầy hứa hẹn. Tôi lấy một trong các mô-đun của mình và nhanh chóng chuyển đổi nó sang định dạng filein. Tôi đã sử dụng Pharo 5.0 Tools> File Browser để tìm tập tin filein và chọn nó. nó xuất hiện trong cửa sổ xem trước. Tôi đã nhấp vào "Filein" và ... không có gì xảy ra. Tôi cũng đã thử nhấp chuột phải vào tên tệp, chọn "Filein toàn bộ tệp" hoặc "Cài đặt vào bộ thay đổi mới" và không có gì xảy ra. – lurker

+1

định dạng fileIn (hoặc chunk) hơi phức tạp một chút! dấu hiệu đánh dấu. Đôi khi bạn cần hai trong số chúng với khoảng trống giữa các vị trí không mong muốn ... Bạn nên kiểm tra that.carefully Và giải pháp cuối cùng shoudl là gỡ lỗi những gì xảy ra khi bạn làm "File in", bạn sẽ nhanh chóng tìm thấy giả định wring nếu bạn kiên nhẫn đủ để đi vào, và Into. –

+0

@ CarlosE.Ferro OK, gợi ý tốt. Tôi có thể đã quá đơn giản hóa quá trình chuyển đổi của tôi hoặc bỏ qua một số sự tinh tế trong đó. Tôi có thể kiểm tra nó. – lurker

2

Giả sử bạn có hai lớp, LuckyClass1 một lớp con của ObjectLuckyClass2 lớp con của LuckyClass1. Và giả sử tên của bạn là LuckyName. Và giả sử bạn muốn đặt mã của mình vào gói Lucky-Package1.

Object subclass: #LuckyClass1 
LuckyClass1 subclass: #LuckyClass2 

Lớp LuckyClass1 với một phương pháp dụ bên luckyInstanceSideMethod1, một phương pháp bên lớp luckyClassSideMethod1 và phía dụ biến luckyInstanceSideVariable1 và phía lớp biến LuckyClassSideVariable1.

Tương tự lớp LuckyClass2 với một phương pháp dụ bên luckyInstanceSideMethod1, một phương pháp bên lớp luckyClassSideMethod1 và một thể hiện bên thêm biến luckyInstanceSideVariable2 và lớp bên biến LuckyClassSideVariable2.

Phương pháp tham khảo sẽ trông như thế này

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

Trên Linux/Mac OS X, làm

vi Lucky-Package1-unix.st

để đưa vào một file có tên Lucky-Package1-unix.st cái gì đó như

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

Trong thực tế, bạn ca n cắt & dán khối trước đó.

Sau đó chuyển đổi dòng số để trả về vận chuyển hoặc nếu không Pharo sẽ khiếu nại. Cái này quan trọng. Nếu bạn đang ở trên Linux/Mac OS X, bạn có thể sử dụng sau đây

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

Trên Windows tôi vẫn sẽ sử dụng bash, vi, mèo, tr từ git-scm https://git-scm.com/download/win

Sau đó nộp trong Lucky-Package1-pharo.st. Nó sẽ xuất hiện trong gói Lucky-Package1 trong Trình duyệt Hệ thống.

+0

Xem nhận xét của tôi cho câu trả lời khác. Tôi tạo ra một tập tin định dạng filein, nhưng Pharo lặng lẽ không làm gì khi tôi thử nhập nó. – lurker

+0

Xin lỗi. Không thể giúp bạn nếu bạn không sẵn sàng thử giải pháp của tôi. Chúc may mắn. –

+0

Không cần phải lén lút. Tôi đã không nói rằng tôi đã không sẵn sàng để thử đề xuất của bạn ở tất cả, phải không? Tôi có kế hoạch để kiểm tra những gì tôi đã thử đầu tiên, và nếu điều đó không thành công, hãy thử ví dụ đơn giản của bạn như là một đường cơ sở. Tôi có thể đảo ngược thứ tự của những người đó. Chưa biết. – lurker

Các vấn đề liên quan