「コンパイラ・スクリプトエンジン」相談室16 (649レス)
「コンパイラ・スクリプトエンジン」相談室16 http://mevius.5ch.net/test/read.cgi/tech/1405822579/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
530: デフォルトの名無しさん [] 2016/04/29(金) 05:30:33.58 ID:o23yQzXI バイトコードのテキストを読み込んだら バイトコードの1行と対の関係になる命令ノードを 行数だけ配列にして上から順に実行するイメージであってる? なんか構文木のまま実行するのと大して変わらない気がするけど メモリの節約とかどうなんだろう http://mevius.5ch.net/test/read.cgi/tech/1405822579/530
531: デフォルトの名無しさん [sage] 2016/04/29(金) 10:04:10.82 ID:GdtJdaFL バイトコードのテキストってのが若干意味不明だが バイトコードならアセンブル(バイナリ化)しておかないか普通 a = b + c * d を二分木のASTで (st (ldptr local[0]) (add (ld local[1]) (mul (ld local[2]) (ld local[3])))) みたいに格納して、ポインタ1つあたり64 bits、ノード構造体のサイズが24 bytesと仮定して glibc mallocを使うことを仮定して全部で32 bytes * 7 = 224 bytesのヒープを消費する。 一方でレジスタ型VMを仮定して、簡単の為に1命令32 bits固定長とすると、例えば ldptr r0, local[0] / ld r1, local[1] / ld r2, local[2] / ld r3, local[3] / mul r4, r2, r3 / add r5, r1, r4 / st r0, r5 の7命令で与式が表現できるから、 配列の中身の長さが2^nに拡大されて予約される事を仮定すると4 bytes * 8 = 32 bytes これに配列の管理領域が2ワード16 bytes、 glibc mallocを使うことを仮定すると2箇所の領域の管理で2ワード16 bytes必要で 合計で64 bytesのヒープを消費する。 ただ、配列には配列の問題点と言うかでっかい領域を再確保するのが難しい事があるから 文単位ではリストや木を、式単位では配列を使うってのがインタプリタとしては良いんじゃないかなとは思う。 http://mevius.5ch.net/test/read.cgi/tech/1405822579/531
532: デフォルトの名無しさん [] 2016/04/29(金) 13:14:44.61 ID:mG1yRheY コンパイラ作りって、インタプリタよりも、10倍の労力がかかるよな。 http://mevius.5ch.net/test/read.cgi/tech/1405822579/532
533: デフォルトの名無しさん [sage] 2016/04/29(金) 15:48:32.50 ID:qwAEwLKu この辺はlispやschemeで思索しながらやると楽なんだよ http://mevius.5ch.net/test/read.cgi/tech/1405822579/533
534: デフォルトの名無しさん [sage] 2016/04/29(金) 17:57:56.98 ID:ZvoRtCQG コード生成の方は関数型の基礎だけでもやってないとかえって遠回りに http://mevius.5ch.net/test/read.cgi/tech/1405822579/534
535: デフォルトの名無しさん [sage] 2016/04/29(金) 20:10:00.50 ID:YATvpu7C >>533 最終的になんで苦労してまで構文木をSchemeで生成するんだろう?っておもって結局そのままLispのMacroに化けるのである(割とマジで) Lisperが他の言語取得者のタメにDSLを組むことはあってもLisperはLispのママ扱う方がよかったりするのよね。 http://mevius.5ch.net/test/read.cgi/tech/1405822579/535
536: デフォルトの名無しさん [] 2016/04/29(金) 21:15:38.47 ID:o23yQzXI >>531 ありがたい。メモリが4倍くらい節約できるのね もしかしたら構文木のまま動かした方が動的ロードで 面白いことが簡単に実現できるんじゃないかと迷ってたけど(evalとか) パフォーマンスではバイトコードがかなり強力なのね http://mevius.5ch.net/test/read.cgi/tech/1405822579/536
537: デフォルトの名無しさん [] 2016/04/29(金) 23:41:20.66 ID:o23yQzXI >>531 >バイトコードならアセンブル(バイナリ化)しておかないか普通 たしかに普通は読み込み速度的にバイナリデータが望ましいのだけど、 手さぐりで試作するからメモ帳で読み書きできるテキスト形式でやってみるんだ http://mevius.5ch.net/test/read.cgi/tech/1405822579/537
538: デフォルトの名無しさん [sage] 2016/04/30(土) 01:17:44.44 ID:oV2mml7H lispインタプリタって一番簡単な実装(pure lisp?)だと何行くらいで実装できる? http://mevius.5ch.net/test/read.cgi/tech/1405822579/538
539: デフォルトの名無しさん [sage] 2016/04/30(土) 07:15:19.54 ID:wSqWni75 >>538 基本関数だけならものすごい小さいよ Lispが生まれた時代のマシンのメモリ量なんてアドレスのビット数が16以下だし。 http://mevius.5ch.net/test/read.cgi/tech/1405822579/539
540: デフォルトの名無しさん [sage] 2016/04/30(土) 10:02:54.88 ID:oKKjAnDv >>538 何で実装するかにも依る swiftやrubyだと100行オーダーで書けるらしい http://xavier.hateblo.jp/entry/2014/08/19/003609 C実装だと2000行くらいみたい https://github.com/kototama/kml http://mevius.5ch.net/test/read.cgi/tech/1405822579/540
541: デフォルトの名無しさん [sage] 2016/04/30(土) 16:03:06.15 ID:ASEjigO2 行というかWin32で20KByteコアのそこそこ速いScheme処理系はCで作ったな 何行だったかは忘れたが数千行にはなる ライブラリやフレームワークにどこまで対応するかだと毎回思う http://mevius.5ch.net/test/read.cgi/tech/1405822579/541
542: デフォルトの名無しさん [] 2016/04/30(土) 17:51:48.40 ID:iJVuG7iJ 自作コンパイラでソフト作ろうとすると、やたらコアを吐くことに...。 http://mevius.5ch.net/test/read.cgi/tech/1405822579/542
543: デフォルトの名無しさん [sage] 2016/04/30(土) 19:28:20.97 ID:wSqWni75 >>542 selfビルド可能になれば普通じゃ無いの?>>core吐かせてバイナリ生成 http://mevius.5ch.net/test/read.cgi/tech/1405822579/543
544: デフォルトの名無しさん [] 2016/05/01(日) 13:17:14.33 ID: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的に分散され、特定のサーバーに依存しません 8 http://mevius.5ch.net/test/read.cgi/tech/1405822579/544
545: デフォルトの名無しさん [sage] 2016/05/01(日) 17:25:31.50 ID:EieRhQfe スレ違いだから他所でやって http://mevius.5ch.net/test/read.cgi/tech/1405822579/545
546: デフォルトの名無しさん [sage] 2016/05/01(日) 21:43:24.13 ID:EieRhQfe バイトコードのはずだったのに気づいたら 関数オブジェクトのツリーを作ってた なにやってんだ俺・・・ http://mevius.5ch.net/test/read.cgi/tech/1405822579/546
547: デフォルトの名無しさん [] 2016/05/03(火) 02:36:10.72 ID:sSslXsw5 自作ソフトの暴走はたまにあるが、自作コンパイラの暴走はヤバイよな。 それで別のソフトを作成した日には、最悪の結果が待つことに...。 http://mevius.5ch.net/test/read.cgi/tech/1405822579/547
548: デフォルトの名無しさん [sage] 2016/05/04(水) 02:55:51.64 ID:ug5Kipfy function(機能)はrole(役割)にしよう flowとかprocと悩んだがroleが一番良いと思う http://mevius.5ch.net/test/read.cgi/tech/1405822579/548
549: デフォルトの名無しさん [] 2016/05/04(水) 03:53:55.73 ID:INW31x/s 昔のC言語みたいに、floatとdoubleに分けるメリットは、 今の時代にはないよな? http://mevius.5ch.net/test/read.cgi/tech/1405822579/549
550: デフォルトの名無しさん [sage] 2016/05/04(水) 03:59:22.27 ID:NIqCX6OH むしろ half の出番さえ出てきてる時代。 http://mevius.5ch.net/test/read.cgi/tech/1405822579/550
551: デフォルトの名無しさん [sage] 2016/05/04(水) 10:09:50.25 ID:wjUC1pj0 役割っていうのは受動的な考え方であり縦割り行政的でありfunctionの適切な代替表現ではない roleは与えられた仕事をただこなすだけというイメージ このとき、与えられる対象、つまりデータやオブジェクトがあり 担当個所をroleするという感じ role ≒ class であり、role ≠ function 何にも縛られず自由なfunctionとroleでは思想が違う functionは立場や部署間を飛び越えて連携して機能するイメージ 胸熱であり、自分の仕事をこなすだけのroleなどと一緒にされては困る function( a, b, c, d ); a.role( b, c, d ); http://mevius.5ch.net/test/read.cgi/tech/1405822579/551
552: デフォルトの名無しさん [sage] 2016/05/04(水) 10:16:54.82 ID:wjUC1pj0 例えば、日本は縦割り行政的であり、役人的であると言われ(role) 一方で、アメリカは横のつながりが強く、機能的だと言われる(function) このように、機能と役割は対立する概念として扱われている言葉であり、思想が違う 日本の映画やドラマなんかでよく 「それは自分の仕事じゃないのでやりません」とか 逆に「自分たちの管轄だから余所者は入ってくるな」とか 役割的発想は悪いことのように扱われるのが常 逆に主人公たちは部署間を飛び越えて機能的に行動すると決まっている http://mevius.5ch.net/test/read.cgi/tech/1405822579/552
553: デフォルトの名無しさん [sage] 2016/05/04(水) 12:07:39.94 ID:p+LvbHBp もうちょっとプログラマ的喩えにしようぜ。 procedure=大域環境に対して参照と破壊をするもの function=環境を参照せず、戻り値は引数にのみ依存するもの closure=固有の環境を持ち、その環境に対して参照と破壊をするもの どれも意味が違う。 functionとroleはクラスとインスタンスくらい意味が違うと思う。 http://mevius.5ch.net/test/read.cgi/tech/1405822579/553
554: デフォルトの名無しさん [sage] 2016/05/04(水) 23:28:44.89 ID:wjUC1pj0 歯車でいえば 複数の歯車が上手く連携して動いている様を機能していると言うし 個々の歯車に着目してそれぞれが自分の仕事をしている様を役割をこなしているという 手続き的に時系列に沿って考えると 個々が役割を果たした結果、全体として機能がもたらされて、また別の大きな役割を担う・・・という風に 卵が先か鶏が先か、みたいなところがあって、双方の視点はどちらも重要で 同時に扱ていかなければならないわけだけど 区別して扱われる別の視点であり、function = roleとしてしまうのは単純にセンスないというか早合点 functionとroleの考え方の微妙な違いは非常に重要で 最初の出発点が違うことで資本主義と社会主義など、時としては戦争が起こる場合もある (つまりは、資本主義と社会主義は鶏が先か卵が先か、functionが先かroleがという思想の違い functionはまさに空気のようなもので、人と人をつないで機能させるお金を重視している roleはまさに人そのもの、その役割に主体を置いている) functionをroleと言ってしまうのは教養がないと言われても仕方がない 自分の思考が今何に着目していて何を考えているか把握しておかないと大変なことになる 頭がよくなりたければ囲碁が良い 囲碁は碁石そのものにも着目しなければならないし、碁石と碁石の境界にも着目しなければならない それぞれで見え方が全く変わってくるし、同時に考えなければならない 頭の体操に良い 「物」と「事」は別のものだけど、「物事」という言葉があるように同時に考えなければならないこともしばしば http://mevius.5ch.net/test/read.cgi/tech/1405822579/554
555: デフォルトの名無しさん [sage] 2016/05/04(水) 23:40:58.82 ID:ug5Kipfy 関数ってそんなに抽象的な意味を持ってたのか インプット&アウトプット、リクエスト&レスポンスの手続きくらいに見てたよ http://mevius.5ch.net/test/read.cgi/tech/1405822579/555
556: デフォルトの名無しさん [sage] 2016/05/05(木) 00:33:21.20 ID:dh4q1EnN 関数は二者以上の関係を表しており、二者以上の関係性が何か機能をもたらす というより、逆算して、機能をもたらせるように、二者以上の関係性を作るのがエンジニアの仕事 だから関数もfunctionだし、機能もfunctionという 電子部品だって、回路を組んで組み合わせなければ機能しない 「関」という字が示すように、関係性は何事においても常に重要で 数学や物理はすべて関係性を数式で表すことで成り立っている 「1」という数字が何か意味を持っているというよりは、「1」と他の数字との関係性が「1」自身の立場や性質を決めている 関係性は非常に高等で、目に見えないものであるが故、尊いものとされている というのも物事の関係性を紐解いたり、逆に利用できたり、機能的に考えることができる人は 当然、役割的思考も出来るものとされているから 役割的発想は馬鹿にでもできる アメリカが赤のことを悪とするのもこのためで、そいうった悪の思想から自分たちを守るために 右翼の人たちは「保守」と呼ばれる 赤の思想のほうが理解しやすく馬鹿でも少年でもわかり 簡単で広まりやすいので、自分たちの尊い考え方や社会を 守らなければ、占領されてしまうという恐怖感からある種過剰な防衛をしている 年を取れば自然と物事の関係性の重要さに気付くものだから基本保守になる そういったことを一通り分かったうえであえて福祉にも力を入れるというのが今の先進国のあり方 順番を誤ってはいけない 会社でいえば自分の役割しかしない人は指示待ち人間といわれ歓迎されない 一方で機能的に考える人は他者とのコミュニケーションを図り、関係を大事にし、目的を達成する努力をする 両方の考え方ができる人は機能的発想に加えて他者への配慮もするし、リーダー的 何事も一つの思想だけでどうにかしようとしないほうが良い 例えば「1」をオブジェクトとしてとらえるという、某言語のような考え方は全くする必要ない 数学の「1」にそのような意味はないし、全てをオブジェクトとして再認識して再構築する必要はなく マルチパラダイム言語で良い 1+2は単に1と2を足すという解釈でよく、1に+2というメッセージをどうのこうのという意味不明な再解釈はいらない 考え方を統一しようとする必要はなく、そういった偏った思想をしても良いことはない http://mevius.5ch.net/test/read.cgi/tech/1405822579/556
557: デフォルトの名無しさん [sage] 2016/05/05(木) 01:08:08.43 ID:dh4q1EnN アメリカは自由自由いつも言ってるが、いったい何に対しての自由なのか、 どこを目指しているのかというと 自分が生まれながら背負ったroleから自由である、ということ この辺、人種差別の問題とか貧困の問題とかが出てくる 一方で、社会に対する自分の機能性のようなものは常に非常に重視される 要らなくなったらすぐに首を切られるし、厳しい とにかく機能機能機能機能、個人に対して厳しい、機能性のない人はいりません しかし、生まれ持ったroleからの自由はサポートしましょう その意味で、移民は受け入れる、ただし機能性のある人だけ http://mevius.5ch.net/test/read.cgi/tech/1405822579/557
558: デフォルトの名無しさん [sage] 2016/05/05(木) 01:19:48.20 ID:AqKMDGmp この長文君きもちわるい… http://mevius.5ch.net/test/read.cgi/tech/1405822579/558
559: デフォルトの名無しさん [sage] 2016/05/05(木) 01:42:26.59 ID:3/paarxc >>553 ぼくの作ってるものは偽C言語でグローバル変数もあるから 定義的にはプロシージャが適切なんだろうな それでロールについてはもう少し考えてみるつもりだけど、 malloc()そのものがfunctionとして、malloc()を何につかうのかがroleなのかな けれど関数の多くはライブラリとかAPIではなく単なるサブルーチンのような気がして サブルーチンはロールだとも思うのよね http://mevius.5ch.net/test/read.cgi/tech/1405822579/559
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 90 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.028s