2013-06-15 37 views
8

Bất cứ khi nào tôi bắt đầu học một ngôn ngữ, điều đầu tiên tôi làm là tạo ra một tệp thực thi được viết bằng ngôn ngữ đó (có thể là một chương trình biên dịch hoặc một tập lệnh). , thế giới 'và một dòng mới để stdout:Biên dịch 'hello, world' GNU smalltalk

[email protected]:~/Code$ ./hello 
hello, world 

Sau khoảng một giờ nhét xung quanh với GNU Smalltalk, tôi không tìm ra cách thực hiện việc này.

(Tôi biết rằng chương trình thế giới hello thể được thể hiện từ bên trong một phiên như

'hello, world' printNl 

này không đáp ứng các yêu cầu stdout của tôi)

Tôi hiểu rằng không có đường chính trong Smalltalk. Vì vậy, tôi khá hấp dẫn bởi những gì sắp xếp của boilerplate có thể có thể là cần thiết để làm cho nó xảy ra. Một lần nữa, tệp không nhất thiết phải được biên dịch, nhưng kết quả cuối cùng của bài tập phải là mã smalltalk dẫn đến trích xuất phiên trên.

PS. yesyesyes Tôi biết rằng tôi đang làm sai bằng cách không chấp nhận triết lý "lập trình dựa trên hình ảnh". Tôi không quan tâm. Tôi không chống lại việc học cách làm việc với hình ảnh và IDE và tất cả điều đó, nhưng tôi thực sự có sự quan tâm tối thiểu ngay bây giờ. Điều tôi quan tâm chính là ngôn ngữ Smalltalk. Về mặt cú pháp, về mặt triết học và kiểu chữ, nó khá đẹp. Tôi cảm thấy thoải mái khi học ngôn ngữ lập trình từ trình thông dịch dòng lệnh và trình soạn thảo văn bản. :)

Trả lời

12

Trong GNU Smalltalk, có khá nhiều không có bản mẫu. Bạn chỉ có thể đặt dòng duy nhất của bạn trong một tập tin .st, và chạy nó với gst hello.st

Nếu bạn muốn khám phá cách sử dụng một lớp thay vì trực tiếp thực hiện báo cáo, thì đó là quá dễ dàng, sau đây trong một tập tin truyền cho gst sẽ làm các trick:

Object subclass: Hello [ 
    greet [ 
      'Hello, World' displayNl 
    ] 
]. 
greeting := Hello new. 
greeting greet. 

tập tin thông qua với gst trên dòng lệnh được phân tích cú pháp và thực hiện theo thứ tự, vì vậy bạn có thể chia việc niêm yết trên vào hai tập tin riêng biệt - một tuyên bố/biên dịch lớp, và lần thứ hai để thực sự chạy nó. Khi bạn đã phát triển chương trình của mình, bạn có thể sử dụng cờ -S để gst để chụp nhanh hình ảnh sau khi tải lớp học của bạn, do đó bạn không có chi phí biên dịch mỗi lần, và chỉ có thể chạy câu lệnh khởi động của bạn thay vào đó .

gst cũng có hỗ trợ shebang, vì vậy bạn có thể đặt #! /usr/bin/gst -f ở đầu tệp nếu bạn không muốn chuyển nó sang gst theo cách thủ công. (Xem tài liệu trên invocation để biết thêm, bao gồm cách thực hiện mà không cần mã hóa cứng vị trí của gst)