| パラダイム | オブジェクト指向、関数型 |
|---|---|
| デザイン: | スティーブ・オモハンドロ |
| 開発者 | カリフォルニア大学バークレー校、ワイカト大学、GNU プロジェクト |
| 初登場 | 1990 |
| 安定版リリース | 1.2.3 [1]
/ 2007年7月7日 |
| タイピングの規律 | 静的、強い |
| Webサイト | www.gnu.org/software/sather/ |
| 主な実装 | |
| ICSI サザー、GNU サザー | |
| 影響を受けた | |
| エッフェル、CLU、コモンリスプ、スキーム | |
| 影響を受けた | |
| いいね | |
Sather はオブジェクト指向 プログラミング言語です。1990 年頃にカリフォルニア大学バークレー校の国際コンピュータサイエンス研究所 (ICSI) でSteve Omohundro率いる国際チームによって開発されました。ガベージ コレクションとサブタイプによるジェネリックをサポートしています。
もともとはEiffelをベースにしていましたが、分岐し、現在ではいくつかの関数型プログラミング機能が含まれています。
名前はエッフェル塔に由来しています。サザータワーはバークレーの有名なランドマークで、大学の設立に多額の寄付をした ペダー・サザーの未亡人、ジェーン・クロム・サザーにちなんで名付けられました。
Sather は、イテレータ、契約による設計、抽象クラス、多重継承、匿名関数、演算子のオーバーロード、反変型システムなど、 他のプログラミング言語やパラダイムからもインスピレーションを得ています。
オリジナルのバークレー実装(最後の安定バージョン1.1は1995年にリリースされ、現在はメンテナンスされていない[2] )はフリーソフトウェア財団に採用され、GNU Satherとなった。最後の安定したGNUバージョン(1.2.3)は2007年7月にリリースされ[3]、現在ソフトウェアはメンテナンスされていない。他にもいくつかの派生版があった:カールスルーエ大学のSather-K 、[4] [5]ワイカト大学のSather-W [6](Satherバージョン1.3の実装)、Peter NaullsによるICSI Sather 1.1のRISC OSへの移植、[7]そしてpSather、[8] [9]はICSI Satherの並列バージョンで、非均一メモリアクセスのマルチプロセッサアーキテクチャに対応しているが、プログラマには共有メモリモデルを提示している。
以前の ICSI Sather コンパイラ (現在は GNU Sather) はCへのコンパイラとして実装されています。つまり、コンパイラはオブジェクト コードやマシンコードを出力せず、Satherソース コードを受け取り、中間言語として C ソース コードを生成します。最適化は C コンパイラに任されています。
Sather 自体で記述された GNU Sather コンパイラは、GNU GPLとLGPLの二重ライセンスです。
こんにちは世界
クラスHELLO_WORLDは
メインは
# OUT + "Hello World\n" ;
終わり;
終わり;
いくつかのコメント:
- クラス名はすべて大文字です。これは慣例であるだけでなく、コンパイラによって強制されます。
- 呼び出されるメソッドは
main実行のエントリ ポイントです。任意のクラスに属していてもかまいませんが、これが と異なる場合はMAIN、コンパイラ オプションとして指定する必要があります。 #はコンストラクタ シンボルです。これは、create演算子の後に続く名前のクラスのメソッドを呼び出します。この例では、標準出力OUTのクラスをインスタンス化するために使用されます。- 演算子
+は、引数として渡された文字列をストリームに追加するためにクラスによってオーバーロードされています。 - などの演算子は、慣例的に命名されたメソッド呼び出しの構文糖
+です。は を表します。複雑な数式内のメソッドの呼び出し順序を解決するために、通常の算術優先順位規則が使用されます。a + ba.plus(b)
イテレータの例
このプログラムは 1 から 10 までの数字を出力します。
クラスMAINは
メインは
ループ
i := 1.最大! ( 10 );
# OUT + i + "\n" ;
終わり;
終わり;
終わり;
loop...構造endはループを定義するための推奨される手段ですが、whileおよびrepeat-untilも使用できます。構造内では、1 つ以上の反復子を使用できます。反復子の名前は常に感嘆符で終わります。(この規則はコンパイラによって強制されます。) は、 1 つの引数を受け入れるクラスupto!のメソッドです。つまり、反復子が結果を返してもその値は変化しません。は、次のようなコードを使用してクラス
に実装できます。INTonceupto!INT
upto ! ( once m : INT ):同じですi : INT := self ; -- i を self の値に初期化します。-- つまり、このメソッドが呼び出される整数ですloop if i > m then quit ; -- i が m を超えたらループを終了しますend ; yield i ; -- それ以外の場合は、i を戻り値として使用し、ループに留まりますi := i + 1 ; -- 増分しますend ; end ;
変数の型情報は、接尾辞構文 で示されますvariable:CLASS。型は推測できることが多いため、 のように型情報はオプションですanInteger::=1。SAMEは、現在のクラスを参照する疑似クラスです。
参考文献
- ^ https://directory.fsf.org/wiki/sather.
{{cite web}}:欠落または空|title=(ヘルプ) - ^ 「ICSI Satherの今後の計画」。2012年2月5日時点のオリジナルよりアーカイブ。2012年3月2日閲覧。
- ^ 「GNU Sather ダウンロード」。2012 年 4 月 5 日時点のオリジナルよりアーカイブ。2012年 3 月 2 日閲覧。
- ^ Sather-K プロジェクト ページ (2001 年からのアーカイブ)
- ^ 「Sather-K 0.9 ダウンロード、1994 年バージョン」。2024 年 4 月 29 日時点のオリジナルよりアーカイブ。2012年 3 月 2 日閲覧。
- ^ Sather-W 1.3 プロジェクト ページ (2002 年からのアーカイブ リンク)
- ^ Peter Naulls の移植版は Web 上では利用できなくなりました。
- ^ 「pSatherの説明」。2012年2月5日時点のオリジナルよりアーカイブ。2012年3月2日閲覧。
- ^ “pSather ダウンロード”. 2017年7月6日時点のオリジナルよりアーカイブ。2021年10月11日閲覧。
{{cite web}}: CS1 maint: bot: 元の URL ステータス不明 (リンク)
外部リンク
- サザーホームページ
