動的言語で大規模開発

■ このスレッドは過去ログ倉庫に格納されています
1uy
垢版 |
2012/07/24(火) 09:10:42.04
たててみた
2014/12/09(火) 23:30:56.22ID:4fop6YGQ
外部イテレータとは while, for 等の伝統的構文が外から見えるという意味
例えばイベント駆動をやりたいときにプログラマが明示的にwhile文を書くようなもの
イテレータが様々なイベントをreturnすれば副作用もあるし戻り値の型も宣言できない

ほぼ全てのパラダイムを否定するので荒れやすいです
2014/12/10(水) 07:35:20.61ID:8efWXp1v
結局Pythonのyieldの後方互換性問題って何だったの?
ルビ厨お得意のFUDですか?
2014/12/10(水) 10:47:06.06ID:UPnzY5Pb
>>818
> これは -76 の影響???

1974年当時の Smalltalk-72 向けのブートストラップ用ソースを元にしたこのファイル
http://ftp.squeak.org/goodies/Smalltalk-72/ALLDEFS
の for の定義のコメントには「An Algol-like “for”.」とあります。-76 もこの流れで、CLU も
ALGOLライクな for を意識して拡張した構文を考えたら似たものになった、というだけだと思います。

ちなみに 1974年当時のこの -72 のソース内には先に -76 で示した
for x from stream …のようなイディオムはまだ登場していなかったようですが、
ただ stream 自体はすでにあり、外部イテレーターとして積極的に用いられていたようです。

> この for は Smalltalk-76 の予約語に見えますが、(特殊な)メッセージだったのでしょうか?

この for …は、-76 では省略されたレシーバー(コンパイラ)に対する for% x from: stream do% ...
というメッセージの送信として解釈されます(-72 のはまた別の機構。為念)。ただ内部的には for%from:do%
というメソッドがそのままコールされるわけではなく、いったん特殊形式として認識され、字句解析の後に
対応する forfromdo:args: というメソッドがコールされるしくみのようなので、通常の言語における
「予約語」の性格は強いかもしれません。

> また Smalltalk-80 だと do メッセージへ変更されていますけど、何か理由があったのでしょうか?

やはりブロック(当初はコンテキスト、後にクロージャー)の導入が契機だったと思います。
-76 ではコードブロックを [ ] で括りブロックのように見えますが、これは Ruby のブロック同様、
第一級オブジェクトではありませんでした。

> そして -76 の stream も next メッセージが実装された(外部イテレータとして)の
> オブジェクトだったのでしょうか?

そうです。繰り返しになりますが、外部イテレータとしての stream は -72 からあったので。
for%form:do% のようなイデオム(通常の言語では新しい構文のようなものでしょうか)が登場し、
内部イテレータとしても使うようになったのは、-72 の拡張版の -74 か、-76 からだと思います。
2014/12/10(水) 21:59:38.00ID:veDvxwge
>>821
レスありはとうございました
たいへん面白い知見と考察でした

> CLU も ALGOLライクな for を意識して拡張した構文を考えたら似たものになった

わかりました、そう考えるのが自然ですね


> 通常の言語における「予約語」の性格は強いかもしれません。

内部ではメッセージングで実行している一方で、ALGOL 風の使いやすい for 構文に見せる....
いわゆる構文糖だと思いますが、この言語設計は Ruby と似ていますね(>>809)


> やはりブロック(当初はコンテキスト、後にクロージャー)の導入が契機だったと思います。

ブロックの導入によって、メッセージングによる計算モデル単純化の究極が Smalltalk-80 になった訳ですね
これは(Smalltalk-80 に影響を受けながらも)あえて ALGOL 風の複雑な構文の導入に向かった Ruby とは異なる道筋です


> そうです。繰り返しになりますが、外部イテレータとしての stream は -72 からあったので。

了解です
そういえば、ストリームをI/O処理だけでなくモジュールを組立てる基本要素とした手続き型言語がありました
・ストリームを扱う言語Stellaによる在庫管理システムの記述
 http://ci.nii.ac.jp/naid/110002761803
2014/12/11(木) 11:19:57.50ID:QX1K4VF2
>>822
Stella の SECONDL の例を Squeak/Pharo Smalltalk のストリームを使って書いてみました。
参考まで。

| SECONDL IN OUT |

SECONDL := [:INPUT :OUTPUT |
 | FIRSTL S1 S2 S3 |

 FIRSTL := [:INS :MAX :OTHERS |
  | I LASTMAX |
  (LASTMAX := INS next) ifNil: [self error: 'empty stream'].
  [INS atEnd] whileFalse: [
   (I := INS next) > LASTMAX ifTrue: [I := LASTMAX flag: (LASTMAX := I)].
   OTHERS nextPut: I].
  MAX nextPut: LASTMAX].

 S1 := INPUT.
 S2 := ReadWriteStream on: IntegerArray new.
 S3 := OUTPUT.

 FIRSTL value: S1 value: NullStream new value: S2.
 FIRSTL value: S2 reset value: S3 value: NullStream new
].

IN := #(54 16 1 58 93 57 84 72 32 25) asIntegerArray readStream.
OUT := ReadWriteStream on: IntegerArray new.
SECONDL value: IN value: OUT.
OUT reset next "=> 84 "
2014/12/11(木) 13:25:53.28ID:QX1K4VF2
>>823
まあ、Squeak/Pharo Smalltalkで普通に書けば、たったこれだけの処理ですけれどもね。^^;

| strm topTwo |
strm := #(54 16 1 58 93 57 84 72 32 25) readStream.
topTwo := (strm next: 2) asSortedCollection.
strm do: [:x | topTwo add: x; removeFirst].
topTwo first "=> 84 "
2014/12/14(日) 08:35:34.66ID:Im2X3v/S
>>822
> Smalltalk-80 に影響を受けながら

matzが影響を受けたのはTimothy Budd独自仕様
お手製サブセットのLittle Smalltalkで、
ちゃんとしたSmalltalk(たとえば「Smalltalk-80」)ではないよ。
だからstreamみたいな基本クラスもrubyには入ってない。
826デフォルトの名無しさん
垢版 |
2016/05/01(日) 15:12:30.55ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
827デフォルトの名無しさん
垢版 |
2018/05/23(水) 23:07:44.26ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

QZU97
828デフォルトの名無しさん
垢版 |
2018/07/04(水) 23:01:31.67ID:gFgZc5FG
DHB
2018/07/06(金) 12:36:26.96ID:uTPDH9XV
QZU97
2018/08/23(木) 06:16:30.33ID:NPcuqlt3
>>2
動的言語で信頼できるコードが作られる前に
静的言語では全コードが完成している
831デフォルトの名無しさん
垢版 |
2019/06/19(水) 05:02:52.19ID:tVNS+22r
【出資】松本卓朗 人工知能詐欺【注意】
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況