2011-06-16 24 views
9

Tôi phát hiện ra không có đề cập đến khoảng thisContext trong đặc tả ANSI Smalltalk (dự thảo).Sự khác nhau giữa ANSI Smalltalk và Smalltalk-80 là gì?

Tôi giả định ANSI Smalltalk là Smalltalk-80 được chuẩn hóa, vì vậy tôi không thể hiểu tại sao nó không có ở đó. Sự khác biệt của chúng là gì?

Trả lời

12

Smalltalk-80 đề cập đến một điều rất cụ thể: phiên bản Smalltalk đã được sử dụng tại Xerox Parc vào năm 1980. Trong khi có nhiều Smalltalk dựa trên ý nghĩa trực tiếp (Squeak và Pharo) hoặc một ý thức hệ tư tưởng (Ambrai Smalltalk và GNU Smalltalk), trên môi trường đó, không có Smalltalks xung quanh ngày hôm nay mà thực sự hoàn toàn tuân theo ngôn ngữ và máy ảo được mô tả trong cuốn sách đó. Ngay cả Squeak, mà có lẽ là ý thức hệ gần nhất, có một số sai lệch lớn: Squeak đã đóng cửa, Smalltalk-80 thì không; Squeak có Unicode, Smalltalk-80 thì không; Máy ảo của Squeak hỗ trợ và sử dụng các tên nguyên thủy có tên, Smalltalk-80 thì không; Squeak hỗ trợ một số bytecode mà Smalltalk-80 không; và vân vân.

ANSI Smalltalk, như ANSI Common Lisp, đã cố gắng xác định một tiêu chuẩn kết hợp một tập con chung của chức năng Smalltalk trong các triển khai Smalltalk chính. Kể từ khi tiêu chuẩn ANSI được viết vào năm 1998, nó đã phải đưa vào tài khoản nhiều hơn chỉ là thực hiện ban đầu. Đặc biệt, một số Smalltalks lớn tại thời điểm, chẳng hạn như Smalltalk MT và VisualAge Smalltalk, thiếu sự tiếp tục hoàn toàn (và kết quả là biến số thisContext). Do đó, tính năng đó không có trong tiêu chuẩn ANSI.

Trong thực tế, những khác biệt này có phần mang tính học thuật. Bạn đang lo lắng về thisContext, nhưng GNU Smalltalk có một cú pháp hoàn toàn khác nhau, VisualWorks có không gian tên, Squeak có Traits, Pharo thiếu MVC ... có sự khác biệt đơn giản hơn cách nhấn. Smalltalk-80 và dự thảo ANSI Smalltalk đều có nhiều hướng dẫn hơn bất kỳ điều gì khác tại thời điểm này trong cuộc sống của Smalltalk.

+0

Cảm ơn bạn đã biết chi tiết! Có thể làm cho * tương thích * chương trình trên nhiều triển khai với ANSI tập hợp con? Có bao nhiêu triển khai phù hợp với ANSI? Và những gì tương thích Smalltalk-80 có nghĩa là trong một số việc thực hiện như Squeak? – Eonil

+2

Có, điều đó là có thể. Seaside ví dụ chạy trên hầu hết các nền tảng Smalltalk. Xem quy ước mã hóa của chúng tôi để biết chi tiết: http://code.google.com/p/seaside/wiki/CodingConventions. Hầu hết Smalltalk đều phù hợp với ANSI ngày hôm nay, bởi vì Seaside yêu cầu (và kiểm tra) nó. Khả năng tương thích ANSI có nghĩa là các lớp và các phương thức được thực hiện và hoạt động như được mô tả trong tiêu chuẩn ANSI. –

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