2011-06-16 15 views
9

ANSI Smalltalk仕様(草案)にはthisContextについての記載がないことが判明しました。ANSI SmalltalkとSmalltalk-80の違いは何ですか?

標準化されたSmalltalk-80としてANSI Smalltalkが使用されていたので、なぜそれがないのかわかりません。彼らの違いは何ですか?

答えて

12

Smalltalk-80は、1980年にXerox Parcで使用されていたSmalltalkのバージョンを指します。直接的な意味で(SqueakとPharo)、または(Ambrai SmalltalkとGNU Smalltalk)という環境では、本書に記載されている言語と仮想マシンを実際に完全に遵守しているSmalltalksは存在しません。おそらく理想的には最も近いと思われるSqueakでも、いくつかの大きな違いがあります.Squeakにはクロージャーがあり、Smalltalk-80にはクロージャーがありません。 SqueakはUnicodeを持ち、Smalltalk-80はUnicodeを持ちません。 SqueakのVMは、名前付きプリミティブをサポートし、使用しますが、Smalltalk-80はそうではありません。 Squeakは、Smalltalk-80にはないバイトコードをサポートしています。等々。

ANSI Common Lispのように、ANSI Smalltalkは、Smalltalkの主要な実装全体に共通のSmalltalk機能のサブセットを組み込んだ標準を定義しようとしました。 ANSI標準は1998年に書かれているので、元の実装よりもはるかに多くを考慮する必要がありました。特に、スモールトークMTやVisualAge Smalltalkなどの一部の主要なスモールトークでは、継続性が完全になくなっていました(結果としてthisContext)。したがって、その機能はANSI標準にはありません。

実際には、これらの違いは幾分学術的です。 thisContextが心配ですが、GNU Smalltalkは根本的に異なる構文を持ち、VisualWorksは名前空間を持ち、SqueakはTraitsを持ち、PharoはMVCがありません。 Smalltalk-80とANSI Smalltalkの両方のドラフトは、Smalltalkの現在のこの時点で、他の何よりもガイドラインです。

+0

ありがとうございます! ANSIサブセットを持つ多くの実装で* compatible *プログラムを作ることは可能ですか? ANSIに準拠する実装の数はいくつですか? Squeakのような実装でSmalltalk-80互換の手段は何ですか? – Eonil

+2

はい、可能です。シーサイドは、ほとんどのスモールトークプラットフォームで動作します。詳細については、コーディング規約を参照してください:http://code.google.com/p/seaside/wiki/CodingConventions。 Smalltalkは今日、ANSIに準拠しています。なぜなら、Seasideはそれを必要とする(そしてテストする)からです。 ANSIとの互換性は、クラスとメソッドが実装され、ANSI標準で説明されているように動作することを意味します。 –