- 動的言語で大規模開発
782 :755[sage]:2014/12/07(日) 00:07:58.15 ID:hGORpEWm - >>755
どちらかといえば前者だな ただし、たとえば Sather(>>755) や分散トランザクション言語の Argus があるから 初継承ではないね まあいずれにしてもソースを出せないのだから、 「Python では元からyield文があった」と主張した >>760 はウソツキってことだ(>>764) ナゼPython使いってのは、息を吐くようにウソをつき、 朝日新聞のようにいつまでたっても間違いを認めようとしないんだろね? 人は神様じゃないから誰でも間違えるもので、 それに気付いたなら(>>736 下段のように)とっとと間違いを認めればいいのになぁ....
|
- 動的言語で大規模開発
786 :デフォルトの名無しさん[sage]:2014/12/07(日) 01:50:41.36 ID:hGORpEWm - >>784
Smalltalk のアレも内部イテレータだね 反復(iteration)をコルーチンとして抽象化する最初の発想は、CLU と Smalltalk の共通の祖である Simula 67 で生まれ、 それはジェネレータと呼ばれていた そして、その発想はどちらの言語にも継承されたけど、静的型付けな手続き型言語である CLU と 動的型付けなオブジェクト指向言語である Smalltalk とでは、実現方法が異なった CLU は iter 宣言と yield 文という抽象化向けの構文を導入し、反復処理の表現(プログラミング)を洗練させた また反復の概念を整理/形式化し、それにイテレータという名称を与えたのは CLU の功績 だからイテレータの始祖は CLU であると、一般には認知されている それに対してブロック(=クロージャ)を持つ Smalltalk は、(CLU のように苦労することなく)反復処理を抽象化できた 実際、Smalltalk-80 のジェネレータは first と next というメソッドが定義された任意のオブジェクトでしかない 結果として Smalltalk のコミュニティの中でジェネレータは反復処理のプログラミング技法、 いわゆるイディオムとしては認知されていたけど、それが学術的に議論されることは無かった (実際、当時の Smalltalk の文献ではイテレータという用語は使われず、Simula と同じジェネレータが使われた) こうした、ある新しく登場した概念が実は Smalltalk の世界だとありふれたイディオムでしかなかったという現象は、 (たとえばデザインパターンのように)しばしば見かけられる
|
- 動的言語で大規模開発
787 :デフォルトの名無しさん[sage]:2014/12/07(日) 02:03:23.69 ID:hGORpEWm - >>785
結局、逃げたってことなのね それならそれで、いいんじゃないかな では、これでスレ違いなイテレータの話題は終わりにしよう 反復処理を抽象化するイテレータは大規模開発にとって重要だと思うけど、 CLU と Smalltalk の例(>>786)のように 静的型付け/動的型付けのどちらにも共通する概念だから、 スレの主旨からは外れていると思う
|
- 動的言語で大規模開発
797 :デフォルトの名無しさん[sage]:2014/12/07(日) 18:16:20.48 ID:hGORpEWm - >>793
>next は分かるのですが、first を定義する必要があるというのは初耳です。 >そのようなプロトコルが規定されているのは何というSmalltalk処理系ですか? >あるいはそのように記述された文献をお示しいただければさいわいです。 1986年に書かれた "The Generator Paradigm in Smalltalk" という文書です 題名でググるとPDFで見つけられます >あと、Smalltalkの外部イテレーター(内部イテレーターとしても使用できる)としては >Streamが有名ですが、これとおっしゃっておられる「Smalltalkのジェネレーター」との >関係を教えてください。 単に ReadStream クラスが Smalltalk の作法(慣習)に沿って設計されたのだと思いますが、 それを裏付けるソース(文献)は知りませんし、それ以上の関係も知りません >> 実際、当時の Smalltalk の文献ではイテレータという用語は使われず、Simula と同じジェネレータが使われた > >寡聞にして知りませんでした。 >たとえば具体的にどんな文書でそのような用語が使われていたか教えていただけると助かります。 上記の文献では、ジェネレータという用語が使われています イテレータという用語は1974年に発表されたCLUの論文によって世に知られるようになりました 自分の知る範囲で、Smalltalk とイテレータとの関連が議論されたのは1995年出版のデザパタ本(GoF)が最初だと思います 少なくともブルーブックの名で知られている Smalltalk のバイブル "Smalltalk-80: The Language and Its Implementation" では、イテレータという用語は使われていません もしも CLU 以前の時代に Smalltalk とイテレータを扱った文献が存在していたなら、ぜひ教えてほしいですね
|
- 動的言語で大規模開発
799 :デフォルトの名無しさん[sage]:2014/12/07(日) 20:20:51.08 ID:hGORpEWm - >>798
結論としては、今のところ挙っているソース(文献)を前提とすれば: ・オリジナルの Smalltalk コミュニティでは概念としてのイテレータは存在していなかった ・ただしコレクションやストリームの実装で用いられた Smalltalk の作法(慣習)は、 デザパタ本(GoF)によって内部イテレータとして分類された ということですかね
|
- 推薦図書/必読書のためのスレッド 74
991 :デフォルトの名無しさん[sage]:2014/12/07(日) 20:47:07.32 ID:hGORpEWm - >>788
ああ、2 から 3 へのアップデートが激しくてついていけず 古いバージョン 2.7 のまま運営しなければならない某言語のことですね とてもわかりやすいです
|
- 動的言語で大規模開発
801 :デフォルトの名無しさん[sage]:2014/12/07(日) 23:41:25.71 ID:hGORpEWm - >>800
自分もその文献を参照して CLU がイテレータで生まれたと判断しました だから、時期としてはそれ以前ということですね またイテレータという名称にこだわる必要はありませんが、 first と next という作法で実現できる外部イテレータは C++/Java だけでなくC言語でも実装できる一般的なプログラミング技法ですから、 CLU の内部イテレータからは外れるでしょう またループ処理の抽象化はイテレータだけでなく LISP を始祖とする関数型言語の map 関数がありますが、これをイテレータと呼ぶのは無理があるでしょう CLU の内部イテレータは、当時のクロージャを持たない手続き型言語へ コルーチンの仕掛けを洗練された形で組み込んだことに意義があると思います もし CLU 以外にも、当時の手続き型言語の中でループ処理の抽象化に 取り組んだ研究があったなら、興味深いですね
|