(Translated by https://www.hiragana.jp/)
CLU - Wikipedia コンテンツにスキップ

CLU

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
CLU
パラダイム マルチパラダイム: オブジェクト指向しこう手続てつづがた
登場とうじょう時期じき 1974ねん
設計せっけいしゃ バーバラ・リスコフMITでの彼女かのじょ学生がくせいたち
開発かいはつしゃ バーバラ・リスコフとMITでの彼女かのじょ学生がくせいたち
型付かたつ つよ型付かたつ
おも処理しょりけい Portable CLUNative CLU
影響えいきょうけた言語げんご Pascal
影響えいきょうあたえた言語げんご Ruby
テンプレートを表示ひょうじ

CLU(クルー)は、1974ねんから1975ねんにかけてMITバーバラ・リスコフ学生がくせいらととも開発かいはつしたプログラミング言語げんごである。抽象ちゅうしょうデータがたのコンストラクタ(操作そうさコードをふくむ)をそなえており、オブジェクト指向しこうプログラミングへの重要じゅうようなステップとなった。しかし、それ以外いがいのオブジェクト指向しこう機能きのうけているか不完全ふかんぜんであり、継承けいしょうもなく、文法ぶんぽうあつかいにくいことが欠点けってんであった。CLU は完全かんぜんなオブジェクト指向しこう言語げんごとなる可能かのうせいめていたが、実際じっさいにはそうならなかった。

クラスター

[編集へんしゅう]

CLU の文法ぶんぽうおおくの言語げんご同様どうよう ALGOLもとづいていた。重要じゅうよう追加ついかてんとして「クラスター; cluster」がある。クラスターとは、CLU のかた拡張かくちょうシステムであり、言語げんごめい由来ゆらいでもある(CLUster)。クラスターは現在げんざいのオブジェクト指向しこう言語げんごえば「オブジェクト」にほぼ相当そうとうする。以下いか複素数ふくそすう実装じっそうした CLU のクラスターのれいしめす:

     complex_number = cluster is add, subtract, multiply, ....
          rep = record [ real_part: real, imag_part: real ]
          add = proc ... end add;
          subtract = proc ... end subtract;
          multiply = proc ... end multiply;
          ...
     end complex_number;

クラスターは当時とうじとしては最新さいしん構造こうぞうプログラミングを実現じつげんしていたが、CLU はクラスター自体じたいにはまった構造こうぞう提供ていきょうしていない。クラスターめいはグローバルであり、クラスターをグループするための名前なまえ空間くうかん機構きこうく、クラスターないにクラスターをローカルにつくることもできない。このような問題もんだいは CLU にかぎったことではない。ALGOLでの変数へんすうのスコープを何故なぜクラスターやオブジェクトにも拡張かくちょうしなかったのかはさだかではない。

CLU は暗黙あんもくかた変換へんかんをしない。クラスターでは、明示めいじてきがた変換へんかん 'up' と 'down' で抽象ちゅうしょうデータがたとその実体じったいとの変換へんかんをする。汎用はんようがた 'any' が用意よういされていて、プロシージャ force[] でオブジェクトが所定しょていかたであるかチェックする。オブジェクトは可変かへん(mutable)と不変ふへん(immutable)があり、整数せいすうなどの基本きほんがた後者こうしゃふくまれる。

その特徴とくちょう

[編集へんしゅう]

もう1つの CLU のかたシステムでの重要じゅうよう機能きのうは「イテレータ; iterators」である。これは、集合しゅうごうからオブジェクトを順次じゅんじすものである。イテレータはブラックボックスであり、集合しゅうごうないのオブジェクトがなにであるかをにしないAPI提供ていきょうする。つまり、複素数ふくそすう集合しゅうごうのイテレータと整数せいすう集合しゅうごうのイテレータには区別くべつがない。イテレータは最近さいきん言語げんごでは一般いっぱんてき機能きのうとなっている。

CLU は言語げんごでの様々さまざまこころみにもとづいた例外れいがい処理しょりそなえている。例外れいがいsignal使つかって発生はっせいさせられ、except処理しょりされる。かた設計せっけい重視じゅうしされているにもかかわらず、CLU には列挙れっきょがたがなく、列挙れっきょがたつく方法ほうほうもなかった。

CLU の特殊とくしゅ機能きのうとして、多重たじゅう代入だいにゅうがある。代入だいにゅう記号きごう左辺さへん複数ふくすう変数へんすうくことができる。たとえば、x,y = y,x というコードで xyえることができる。同様どうよう関数かんすう複数ふくすうかえすことができ、x,y,z = f(t) などとしるされる。

CLU プログラムないのオブジェクトはすべてヒープにあり、メモリ管理かんり自動的じどうてきおこなわれる。

その

[編集へんしゅう]

のプログラミング言語げんごへの影響えいきょう

[編集へんしゅう]
  • PythonRuby は CLU の影響えいきょうけている(たとえば、yield ぶん多重たじゅう代入だいにゅう)。
  • CLU は Adaともに C++ のテンプレートに影響えいきょうあたえた。
  • CLU の例外れいがい処理しょり機構きこうは Java や C++ などのあたらしい言語げんご影響えいきょうあたえた。
  • Python の generator や C# の iterator の起源きげんは CLU の iterators である。

文献ぶんけん

[編集へんしゅう]
  • ビューティフルコード Brian Kernighanほか オライリージャパン ISBN 9784873113630

外部がいぶリンク

[編集へんしゅう]