プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。
Wikiのまとめページ
http://www6.atwiki.jp/compilerandscriptengine/
「コンパイラ・スクリプトエンジン」相談室16
2014/07/20(日) 11:16:19.37ID:p6eMVAxc
461デフォルトの名無しさん
2016/04/14(木) 01:10:11.46ID:FsF2j7W4462デフォルトの名無しさん
2016/04/14(木) 01:29:14.13ID:Nyx2HJFW >>461
rustのfunc, iface, modとかもそうだけど省略形はいまいちだなと思う
rubyにfor() do {}構文があるんだけど、それで関数やラムダ式の記号に
do良さげかなと思うんだけどどうかな?
rustのfunc, iface, modとかもそうだけど省略形はいまいちだなと思う
rubyにfor() do {}構文があるんだけど、それで関数やラムダ式の記号に
do良さげかなと思うんだけどどうかな?
2016/04/14(木) 02:42:08.95ID:co1HctEv
コンパイラの醍醐味は式の展開だから、ここを自分で書ければあとはそれほど難しくないw
464デフォルトの名無しさん
2016/04/14(木) 08:30:10.02ID:BY7gxQ6D define ならわかるが do はないだろう
465デフォルトの名無しさん
2016/04/14(木) 09:12:23.12ID:d9D6y2bX dogazer
466デフォルトの名無しさん
2016/04/14(木) 09:35:38.15ID:HeHUqy+f 関数も変数もletで
467デフォルトの名無しさん
2016/04/14(木) 12:27:04.84ID:kJxBjGsl 予約語テーブルに何を入れるかが難しい。
何でも詰め込みすぎると、肥大化しすぎたC++になってしまうし。
何でも詰め込みすぎると、肥大化しすぎたC++になってしまうし。
468デフォルトの名無しさん
2016/04/14(木) 18:04:51.72ID:FsF2j7W4 >>462
そうかなぁ?
一般名詞や動詞とかぶりそうも無い省略形ってコンピュータ言語には向いているとおもうのだ。
defunとかdefnとか
無名関数作るのにはUnicode圏が一般化した今ならλ一文字とか
そうかなぁ?
一般名詞や動詞とかぶりそうも無い省略形ってコンピュータ言語には向いているとおもうのだ。
defunとかdefnとか
無名関数作るのにはUnicode圏が一般化した今ならλ一文字とか
469デフォルトの名無しさん
2016/04/14(木) 20:06:31.03ID:VC8/A0Ig 略語もセンスがいるよな
ところで、defunって何の略?
どうでも良いけどλなんか変換しなきゃ出てこないし入力速度最悪だな
ところで、defunって何の略?
どうでも良いけどλなんか変換しなきゃ出てこないし入力速度最悪だな
470デフォルトの名無しさん
2016/04/14(木) 20:21:19.82ID:gC/abIq/471デフォルトの名無しさん
2016/04/14(木) 20:43:14.68ID:FsF2j7W4472デフォルトの名無しさん
2016/04/17(日) 00:39:50.58ID:SCILLDG5 letはconstの代わりに使う言語があるね
関数宣言にdoがないとなると色々と候補に悩んでしまうぜ
job, fun, flow, verb, work, act(action)
関数宣言にdoがないとなると色々と候補に悩んでしまうぜ
job, fun, flow, verb, work, act(action)
473デフォルトの名無しさん
2016/04/17(日) 01:15:23.96ID:iuB497/s >>472
再代入を許さない言語だとletがconstと等価になるからじゃないのかな?
>>460
関数宣言がfunction hoge(args)と言う形をとる事をやめて予約語(function)無しでも可能な感じはしないでもないのだけど文法に制限って起きうるかな?
(Return型) function-name(Args....)
とか
function-name(Args):Return-Type
前者はCだし、後者はJScriptの宣言形式だけど、これじゃイヤな理由も思いつかない。
グローバル変数の定義とか外部変数定義とかのvar,static,externやら名前空間のnamespaceとかpackageとかimport等の特殊な予約語彙だけ文の開始から除外すれば後者の方法で関数は定義できると思うのだけど。
再代入を許さない言語だとletがconstと等価になるからじゃないのかな?
>>460
関数宣言がfunction hoge(args)と言う形をとる事をやめて予約語(function)無しでも可能な感じはしないでもないのだけど文法に制限って起きうるかな?
(Return型) function-name(Args....)
とか
function-name(Args):Return-Type
前者はCだし、後者はJScriptの宣言形式だけど、これじゃイヤな理由も思いつかない。
グローバル変数の定義とか外部変数定義とかのvar,static,externやら名前空間のnamespaceとかpackageとかimport等の特殊な予約語彙だけ文の開始から除外すれば後者の方法で関数は定義できると思うのだけど。
474デフォルトの名無しさん
2016/04/17(日) 03:41:30.77ID:SCILLDG5 >>473
>予約語なくせば?
変数宣言でも関数宣言でも先頭に予約語が付いてIDEが色つけてくれた方が見やすいじゃない?
もしくは関数宣言をすべて関数ポインタ(クロージャ?)のみにして、変数化してしまうか?
var function-name = ->(args...){ ... }
>予約語なくせば?
変数宣言でも関数宣言でも先頭に予約語が付いてIDEが色つけてくれた方が見やすいじゃない?
もしくは関数宣言をすべて関数ポインタ(クロージャ?)のみにして、変数化してしまうか?
var function-name = ->(args...){ ... }
475デフォルトの名無しさん
2016/04/17(日) 16:43:33.52ID:3szJoJiC 基本的に、普通のブロックと、関数(クロージャ)との、区別をどうするかという問題が有るからね
普通のブロックは大体{ something }こんな感じだろうけど、これは呼び出しなしで即座に実行するのが普通
一方でクロージャは呼び出さない限りは実行されない
関数やクロージャなどを引数に取る関数が有ったとして
func_name( { something } );
こんな感じに呼び出した場合、{ something }を実行した結果を関数に渡すのか
{ something }その物を関数に渡すのか、コンパイラはよくわからない
func_nameの呼び出し引数の型がクロージャであることをコンパイラが分かっていたとしても
{ something }を実行した結果がクロージャになり、それを関数に渡すという可能性もあるのでコンパイラは判断できない
そのため、明確にするためにfunc_name( function{ something } );のように
何か普通のブロックとクロージャを区別する文法が要るのだね
そうこうしていると、Javascriptが出来上がる
普通のブロックは大体{ something }こんな感じだろうけど、これは呼び出しなしで即座に実行するのが普通
一方でクロージャは呼び出さない限りは実行されない
関数やクロージャなどを引数に取る関数が有ったとして
func_name( { something } );
こんな感じに呼び出した場合、{ something }を実行した結果を関数に渡すのか
{ something }その物を関数に渡すのか、コンパイラはよくわからない
func_nameの呼び出し引数の型がクロージャであることをコンパイラが分かっていたとしても
{ something }を実行した結果がクロージャになり、それを関数に渡すという可能性もあるのでコンパイラは判断できない
そのため、明確にするためにfunc_name( function{ something } );のように
何か普通のブロックとクロージャを区別する文法が要るのだね
そうこうしていると、Javascriptが出来上がる
476デフォルトの名無しさん
2016/04/17(日) 17:47:06.17ID:SCILLDG5 結局function代替ワードが必要だと気付く
ラムダ記号=>だと引数に使うときダサイもんね
ラムダ記号=>だと引数に使うときダサイもんね
477デフォルトの名無しさん
2016/04/18(月) 12:27:13.85ID:keXFBRJQ 新しいコンパイラを使うとき、「特有のクセのある」
のがグラフィック関数なんだよな。
個人的には、グラフィック関数も、ANSIで定めて欲しいくらい。
のがグラフィック関数なんだよな。
個人的には、グラフィック関数も、ANSIで定めて欲しいくらい。
478デフォルトの名無しさん
2016/04/18(月) 13:16:18.87ID:pknZG/q+ グラフィックなぁ
b800:0000らへんを好き勝手に弄らせてくれるなら歓迎するのだわ # ネタが古いか
b800:0000らへんを好き勝手に弄らせてくれるなら歓迎するのだわ # ネタが古いか
479デフォルトの名無しさん
2016/04/19(火) 13:33:12.70ID:6Wh9TF6d 8色でいいんか?
480デフォルトの名無しさん
2016/04/20(水) 02:49:26.81ID:dZcIDvSg 最近はいじっていないので、最新のツールはよくわからんが、
昔のツールでは、RGBの三原色を元に、すべてのグラフィックを
再現していたからなあ。今考えると、ずいぶん、原始的だった。
昔のツールでは、RGBの三原色を元に、すべてのグラフィックを
再現していたからなあ。今考えると、ずいぶん、原始的だった。
481デフォルトの名無しさん
2016/04/20(水) 05:43:15.95ID:wqKcWsga >>480
最新をよくわかってないのによく原始的だと解るね?
最新をよくわかってないのによく原始的だと解るね?
482デフォルトの名無しさん
2016/04/20(水) 06:55:13.29ID:XnBYIzBk シマノのギアの仕組みをよくわかってない俺にもギアのないママチャリは原始的だと思う
483デフォルトの名無しさん
2016/04/20(水) 07:16:40.91ID:wqKcWsga 自転車に例えるなら車輪を回転させて走らせるのは原始的だったなぁって言ってるのが >>480 なんだけどね
484デフォルトの名無しさん
2016/04/20(水) 07:52:09.40ID:UfNx2Znx えっ今もRGBじゃないの?
485デフォルトの名無しさん
2016/04/20(水) 08:22:02.22ID:r07pzD8i486デフォルトの名無しさん
2016/04/20(水) 08:29:41.63ID:r07pzD8i >>484
ツールって言うのか何を示すのか、グラフィックっと言うものの範囲にもよる
ディスプレイ表示機構に限定すれば RGB 以外のは見たことない
グラフィックツールの話なら HSB とかの他のカラーモデルを扱えるものはあるし、プリンタは CMYK だし
そもそもこのスレで長々引っ張る話でもないし
ツールって言うのか何を示すのか、グラフィックっと言うものの範囲にもよる
ディスプレイ表示機構に限定すれば RGB 以外のは見たことない
グラフィックツールの話なら HSB とかの他のカラーモデルを扱えるものはあるし、プリンタは CMYK だし
そもそもこのスレで長々引っ張る話でもないし
487デフォルトの名無しさん
2016/04/20(水) 09:12:43.14ID:UfNx2Znx CMYKなんて大昔からあった
488デフォルトの名無しさん
2016/04/20(水) 10:07:43.41ID:wqKcWsga >>485
RGBっていうコンピューターグラフィックス上で今でも最も基本的な部分を指して原始的って言ってるからギア云々は的外れって言ってんの
RGBっていうコンピューターグラフィックス上で今でも最も基本的な部分を指して原始的って言ってるからギア云々は的外れって言ってんの
489デフォルトの名無しさん
2016/04/20(水) 11:06:43.66ID:fkY4xDrs グラフィック関数ってOpenGLとかそういうはなしじゃないのか・・・
490デフォルトの名無しさん
2016/04/20(水) 12:29:24.43ID:r07pzD8i491デフォルトの名無しさん
2016/04/20(水) 14:01:09.01ID:ljSF0mgB おまえのことか
492デフォルトの名無しさん
2016/04/20(水) 15:33:41.96ID:9SnFE2FG 例えが悪いって言ってんのにどういう風に対応付けするかは色々って何言ってるのか解りませんわ。
493デフォルトの名無しさん
2016/04/20(水) 19:30:01.52ID:r07pzD8i494デフォルトの名無しさん
2016/04/20(水) 20:27:51.87ID:ljSF0mgB いや、お前こそが、そう思っているだけだろ
車輪の話は分かりやすかった
車輪の話は分かりやすかった
495デフォルトの名無しさん
2016/04/20(水) 22:17:47.57ID:iD79AHEd どっちもどっち
下らんことでお山の大将になりたがるなよ
下らんことでお山の大将になりたがるなよ
496デフォルトの名無しさん
2016/04/21(木) 01:56:58.28ID:q7849b+A 変な所を指摘したらお山の大将になりたがる猿呼ばわりか、めんどくせえスレだな
497デフォルトの名無しさん
2016/04/21(木) 02:20:43.14ID:mxlfT2Ft スレ違いだから首釣って死ねって事だ
言わせんな
言わせんな
498デフォルトの名無しさん
2016/04/21(木) 12:57:39.05ID:DAo9Zovx エプソンのプリンターも当然、CMYKだが、
「純正を使わないと、すぐに故障する」
ような構造にしてあったよな?
あれはハードの構造でそうしているのか。コードにも、純正な否かを
判断する部分を盛り込んでいるのかどうか。
「純正を使わないと、すぐに故障する」
ような構造にしてあったよな?
あれはハードの構造でそうしているのか。コードにも、純正な否かを
判断する部分を盛り込んでいるのかどうか。
499デフォルトの名無しさん
2016/04/21(木) 19:57:24.72ID:T4pmkcSw エプソンに限らずプリンターは色の三原色持ってるのが当たり前
500デフォルトの名無しさん
2016/04/22(金) 00:36:11.07ID:2IHAQJXj 純正インク以外で壊れやすくなるのは単に質が悪いから
プリンター本体は採算度外視でインクで儲けるビジネスモデルだったのに本体壊したら元も子もない
プリンター本体は採算度外視でインクで儲けるビジネスモデルだったのに本体壊したら元も子もない
501デフォルトの名無しさん
2016/04/22(金) 12:06:11.49ID:300wiAoM プリンター本体も、五年もたって故障すれば、部品製造打ち切りで
修理不能で買わざるを得ないからな。キャノンはどうか知らんが、
エプソンはそうだった。とかいって、うちの勤め先の規模では、
プリンター市場に参入出来る資金力などない。
せいぜい、大手からおこぼれで仕事をもらい、コードをいじくるしか出来ない。
修理不能で買わざるを得ないからな。キャノンはどうか知らんが、
エプソンはそうだった。とかいって、うちの勤め先の規模では、
プリンター市場に参入出来る資金力などない。
せいぜい、大手からおこぼれで仕事をもらい、コードをいじくるしか出来ない。
502デフォルトの名無しさん
2016/04/22(金) 18:41:13.87ID:U46HjcWC ずいぶん横道にそれているが、おまえらスクリプトつくってるのか?
503デフォルトの名無しさん
2016/04/22(金) 20:38:22.94ID:TT82zXSl >>496
指摘が的はずれって言われてるんだろ
指摘が的はずれって言われてるんだろ
504デフォルトの名無しさん
2016/04/22(金) 20:39:29.07ID:FoP6yTJa 誰がもこみちにそれているねん!!
(´・ω・`)b
(´・ω・`)b
505デフォルトの名無しさん
2016/04/22(金) 20:40:58.67ID:FoP6yTJa506デフォルトの名無しさん
2016/04/22(金) 21:49:45.09ID:cAq2nbH2 スレタイ嫁
507デフォルトの名無しさん
2016/04/22(金) 23:35:58.89ID:Eun++jyx >>505
後者の実装にスクリプト言語使っても問題はないんじゃなかろうか?
後者の実装にスクリプト言語使っても問題はないんじゃなかろうか?
508デフォルトの名無しさん
2016/04/23(土) 07:12:36.15ID:FJYQwL85 ここで産まれたスクリプトあんの?
509デフォルトの名無しさん
2016/04/23(土) 12:40:11.44ID:OaaA/Nov 秀丸は、スクリプトを自作するときの参考になるのかね?
一応、役に立ったことは事実だが。
一応、役に立ったことは事実だが。
510デフォルトの名無しさん
2016/04/23(土) 18:35:58.00ID:vG+aKQwy 禿丸エディタを何の参考にする気だ
511デフォルトの名無しさん
2016/04/24(日) 00:18:07.79ID:dKv+k22E 秀丸は、「作業の自動化スクリプト」を書くのに便利だからな。
その仕様を元にすれば、スクリプトを自作するのに役に立つのではないかと
思ったのだが。
その仕様を元にすれば、スクリプトを自作するのに役に立つのではないかと
思ったのだが。
512デフォルトの名無しさん
2016/04/24(日) 01:48:37.36ID:M7ZCbRga 「作業の自動化スクリプト」専用のスクリプトならgradleあたりが参考に良さそうだな
ちなみに俺はantは好きだけどmavenは大嫌い
ちなみに俺はantは好きだけどmavenは大嫌い
513デフォルトの名無しさん
2016/04/25(月) 02:57:23.38ID:ouB2BnTZ まあ秀丸はテキスト処理に特化した
自動化スクリプトの参考にはなるかもね
あれはスクリプトっていうよりマクロだけど
自動化スクリプトの参考にはなるかもね
あれはスクリプトっていうよりマクロだけど
514デフォルトの名無しさん
2016/04/25(月) 10:50:38.19ID:9hQeUDgV しかし秀丸には、CやWindows APIの命令が、多数というか、
かなり含まれている感じだが。
かなり含まれている感じだが。
515デフォルトの名無しさん
2016/04/25(月) 17:05:01.77ID:lstHaTya だからなんだよって感じだが。
516デフォルトの名無しさん
2016/04/25(月) 17:27:42.97ID:ouB2BnTZ そのまま車輪の再発明をしてしまうと
元の秀丸を使った方が便利だから
自作スクリプトを秀丸と差別化する必要はある
元の秀丸を使った方が便利だから
自作スクリプトを秀丸と差別化する必要はある
517デフォルトの名無しさん
2016/04/26(火) 03:16:17.88ID:r83feNEN そうか。秀丸に存在しない命令を考えなければならないな。
518デフォルトの名無しさん
2016/04/27(水) 00:31:37.93ID:Toh8P/+A 相変わらず手書きパーサー書いてるが、できるだけ1発でパースしつつ(LR法?)
外側から順に何度も段階分けながらパースする(LL法?)なコードも混じってる…
意味解析までたどり着くまでで力尽きそうw
外側から順に何度も段階分けながらパースする(LL法?)なコードも混じってる…
意味解析までたどり着くまでで力尽きそうw
519デフォルトの名無しさん
2016/04/27(水) 06:02:05.40ID:vmi3tpS2 よほどの理由がないなら手書きなんかやめといた方が
Bison GLR 使ってた時は不自由さがなくてよかった
semantic predicate 機能は成熟しただろうか
Bison GLR 使ってた時は不自由さがなくてよかった
semantic predicate 機能は成熟しただろうか
520デフォルトの名無しさん
2016/04/27(水) 07:02:50.92ID:h/kgFFlp 趣味でやってるんだろ
ほっといてやれや
ほっといてやれや
521デフォルトの名無しさん
2016/04/27(水) 23:38:58.25ID:Toh8P/+A 手書きパーサー製作も残すは四則演算&関数呼び出しとなったが
ツリーの形状はこんな感じで良いのだろうか?
https://pastebin.mozilla.org/8868990
>>519
本よむところから始めるのはしんどいのでな・・・
ツリーの形状はこんな感じで良いのだろうか?
https://pastebin.mozilla.org/8868990
>>519
本よむところから始めるのはしんどいのでな・・・
522デフォルトの名無しさん
2016/04/28(木) 00:23:38.80ID:mWNt94gr 関数呼び出しだとこれでいけそう
https://pastebin.mozilla.org/8868995
小さな計算でもツリーが深くなってnew()するノードの数がもりもり増えるけど
何かもっと良い方法あったら教えてちょ
https://pastebin.mozilla.org/8868995
小さな計算でもツリーが深くなってnew()するノードの数がもりもり増えるけど
何かもっと良い方法あったら教えてちょ
523デフォルトの名無しさん
2016/04/28(木) 12:59:47.77ID:Jc879At1 手書きパーサなら
木構造にせずに操車場アルゴリズムかその亜種でLL(1)するのも手だぞ。
文法と文をそれぞれ入力したらテーブル作ってLR(1)するクラスを作るって手もあるけど
大真面目に書いてc++で500行〜1000行くらいにはなったと思う。
木構造にせずに操車場アルゴリズムかその亜種でLL(1)するのも手だぞ。
文法と文をそれぞれ入力したらテーブル作ってLR(1)するクラスを作るって手もあるけど
大真面目に書いてc++で500行〜1000行くらいにはなったと思う。
524デフォルトの名無しさん
2016/04/28(木) 14:16:09.66ID:7cooGRk/ lexとyaccは、既存のものを使うべきか、自作すべきか、悩ましいね。
525デフォルトの名無しさん
2016/04/28(木) 15:44:59.86ID:Jc879At1 yaccは、やる気と暇があるなら
どういう文法なら曖昧性が無いか、とか、shift/reduce conflictとdangling elseとは何か、とか
いろんな事についてよく理解できるようになるって点で一度試しに書いてみる事をお勧めしたい
今までに俺が余暇でC実装した名の付いたアルゴリズムの内だとかなり難しい部類に入るけどな。
lexは文法全く固まってないなら使ったらどう?って程度じゃない?
割と簡単に使えるけど、同じくらいとは言わないものの簡単に自作できるし
ASCII範囲の文字は簡単に指定できるけどUnicodeなんかに対応する為にカスタムコードを挟むなら普通に全部組んだほうが楽な事もあるし。
どういう文法なら曖昧性が無いか、とか、shift/reduce conflictとdangling elseとは何か、とか
いろんな事についてよく理解できるようになるって点で一度試しに書いてみる事をお勧めしたい
今までに俺が余暇でC実装した名の付いたアルゴリズムの内だとかなり難しい部類に入るけどな。
lexは文法全く固まってないなら使ったらどう?って程度じゃない?
割と簡単に使えるけど、同じくらいとは言わないものの簡単に自作できるし
ASCII範囲の文字は簡単に指定できるけどUnicodeなんかに対応する為にカスタムコードを挟むなら普通に全部組んだほうが楽な事もあるし。
526デフォルトの名無しさん
2016/04/28(木) 15:46:10.30ID:Jc879At1 個人的にはPEGが気になるのですよー
527デフォルトの名無しさん
2016/04/28(木) 18:30:43.97ID:FI1Tv7gT コンパイラを作るはずがコンパイラジェネレーター作りがメインになってしまう不思議
528デフォルトの名無しさん
2016/04/28(木) 18:36:57.28ID:Jc879At1 そして思うのだ
コンパイラジェネレータを書くのに向いてる言語とは・・・・・・
コンパイラジェネレータを書くのに向いてる言語とは・・・・・・
529デフォルトの名無しさん
2016/04/28(木) 22:17:59.57ID:mWNt94gr >>523
そうだな。ここだけツリーにしないで、再帰関数で直接出力すれば良さそうだ
そうだな。ここだけツリーにしないで、再帰関数で直接出力すれば良さそうだ
530デフォルトの名無しさん
2016/04/29(金) 05:30:33.58ID:o23yQzXI バイトコードのテキストを読み込んだら
バイトコードの1行と対の関係になる命令ノードを
行数だけ配列にして上から順に実行するイメージであってる?
なんか構文木のまま実行するのと大して変わらない気がするけど
メモリの節約とかどうなんだろう
バイトコードの1行と対の関係になる命令ノードを
行数だけ配列にして上から順に実行するイメージであってる?
なんか構文木のまま実行するのと大して変わらない気がするけど
メモリの節約とかどうなんだろう
531デフォルトの名無しさん
2016/04/29(金) 10:04:10.82ID: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のヒープを消費する。
ただ、配列には配列の問題点と言うかでっかい領域を再確保するのが難しい事があるから
文単位ではリストや木を、式単位では配列を使うってのがインタプリタとしては良いんじゃないかなとは思う。
バイトコードならアセンブル(バイナリ化)しておかないか普通
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のヒープを消費する。
ただ、配列には配列の問題点と言うかでっかい領域を再確保するのが難しい事があるから
文単位ではリストや木を、式単位では配列を使うってのがインタプリタとしては良いんじゃないかなとは思う。
532デフォルトの名無しさん
2016/04/29(金) 13:14:44.61ID:mG1yRheY コンパイラ作りって、インタプリタよりも、10倍の労力がかかるよな。
533デフォルトの名無しさん
2016/04/29(金) 15:48:32.50ID:qwAEwLKu この辺はlispやschemeで思索しながらやると楽なんだよ
534デフォルトの名無しさん
2016/04/29(金) 17:57:56.98ID:ZvoRtCQG コード生成の方は関数型の基礎だけでもやってないとかえって遠回りに
535デフォルトの名無しさん
2016/04/29(金) 20:10:00.50ID:YATvpu7C >>533
最終的になんで苦労してまで構文木をSchemeで生成するんだろう?っておもって結局そのままLispのMacroに化けるのである(割とマジで)
Lisperが他の言語取得者のタメにDSLを組むことはあってもLisperはLispのママ扱う方がよかったりするのよね。
最終的になんで苦労してまで構文木をSchemeで生成するんだろう?っておもって結局そのままLispのMacroに化けるのである(割とマジで)
Lisperが他の言語取得者のタメにDSLを組むことはあってもLisperはLispのママ扱う方がよかったりするのよね。
536デフォルトの名無しさん
2016/04/29(金) 21:15:38.47ID:o23yQzXI >>531
ありがたい。メモリが4倍くらい節約できるのね
もしかしたら構文木のまま動かした方が動的ロードで
面白いことが簡単に実現できるんじゃないかと迷ってたけど(evalとか)
パフォーマンスではバイトコードがかなり強力なのね
ありがたい。メモリが4倍くらい節約できるのね
もしかしたら構文木のまま動かした方が動的ロードで
面白いことが簡単に実現できるんじゃないかと迷ってたけど(evalとか)
パフォーマンスではバイトコードがかなり強力なのね
537デフォルトの名無しさん
2016/04/29(金) 23:41:20.66ID:o23yQzXI >>531
>バイトコードならアセンブル(バイナリ化)しておかないか普通
たしかに普通は読み込み速度的にバイナリデータが望ましいのだけど、
手さぐりで試作するからメモ帳で読み書きできるテキスト形式でやってみるんだ
>バイトコードならアセンブル(バイナリ化)しておかないか普通
たしかに普通は読み込み速度的にバイナリデータが望ましいのだけど、
手さぐりで試作するからメモ帳で読み書きできるテキスト形式でやってみるんだ
538デフォルトの名無しさん
2016/04/30(土) 01:17:44.44ID:oV2mml7H lispインタプリタって一番簡単な実装(pure lisp?)だと何行くらいで実装できる?
539デフォルトの名無しさん
2016/04/30(土) 07:15:19.54ID:wSqWni75540デフォルトの名無しさん
2016/04/30(土) 10:02:54.88ID:oKKjAnDv >>538
何で実装するかにも依る
swiftやrubyだと100行オーダーで書けるらしい
http://xavier.hateblo.jp/entry/2014/08/19/003609
C実装だと2000行くらいみたい
https://github.com/kototama/kml
何で実装するかにも依る
swiftやrubyだと100行オーダーで書けるらしい
http://xavier.hateblo.jp/entry/2014/08/19/003609
C実装だと2000行くらいみたい
https://github.com/kototama/kml
541デフォルトの名無しさん
2016/04/30(土) 16:03:06.15ID:ASEjigO2 行というかWin32で20KByteコアのそこそこ速いScheme処理系はCで作ったな
何行だったかは忘れたが数千行にはなる
ライブラリやフレームワークにどこまで対応するかだと毎回思う
何行だったかは忘れたが数千行にはなる
ライブラリやフレームワークにどこまで対応するかだと毎回思う
542デフォルトの名無しさん
2016/04/30(土) 17:51:48.40ID:iJVuG7iJ 自作コンパイラでソフト作ろうとすると、やたらコアを吐くことに...。
543デフォルトの名無しさん
2016/04/30(土) 19:28:20.97ID:wSqWni75 >>542
selfビルド可能になれば普通じゃ無いの?>>core吐かせてバイナリ生成
selfビルド可能になれば普通じゃ無いの?>>core吐かせてバイナリ生成
544デフォルトの名無しさん
2016/05/01(日) 13:17:14.33ID: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
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
545デフォルトの名無しさん
2016/05/01(日) 17:25:31.50ID:EieRhQfe スレ違いだから他所でやって
546デフォルトの名無しさん
2016/05/01(日) 21:43:24.13ID:EieRhQfe バイトコードのはずだったのに気づいたら
関数オブジェクトのツリーを作ってた
なにやってんだ俺・・・
関数オブジェクトのツリーを作ってた
なにやってんだ俺・・・
547デフォルトの名無しさん
2016/05/03(火) 02:36:10.72ID:sSslXsw5 自作ソフトの暴走はたまにあるが、自作コンパイラの暴走はヤバイよな。
それで別のソフトを作成した日には、最悪の結果が待つことに...。
それで別のソフトを作成した日には、最悪の結果が待つことに...。
548デフォルトの名無しさん
2016/05/04(水) 02:55:51.64ID:ug5Kipfy function(機能)はrole(役割)にしよう
flowとかprocと悩んだがroleが一番良いと思う
flowとかprocと悩んだがroleが一番良いと思う
549デフォルトの名無しさん
2016/05/04(水) 03:53:55.73ID:INW31x/s 昔のC言語みたいに、floatとdoubleに分けるメリットは、
今の時代にはないよな?
今の時代にはないよな?
550デフォルトの名無しさん
2016/05/04(水) 03:59:22.27ID:NIqCX6OH むしろ half の出番さえ出てきてる時代。
551デフォルトの名無しさん
2016/05/04(水) 10:09:50.25ID:wjUC1pj0 役割っていうのは受動的な考え方であり縦割り行政的でありfunctionの適切な代替表現ではない
roleは与えられた仕事をただこなすだけというイメージ
このとき、与えられる対象、つまりデータやオブジェクトがあり
担当個所をroleするという感じ
role ≒ class であり、role ≠ function
何にも縛られず自由なfunctionとroleでは思想が違う
functionは立場や部署間を飛び越えて連携して機能するイメージ
胸熱であり、自分の仕事をこなすだけのroleなどと一緒にされては困る
function( a, b, c, d );
a.role( b, c, d );
roleは与えられた仕事をただこなすだけというイメージ
このとき、与えられる対象、つまりデータやオブジェクトがあり
担当個所をroleするという感じ
role ≒ class であり、role ≠ function
何にも縛られず自由なfunctionとroleでは思想が違う
functionは立場や部署間を飛び越えて連携して機能するイメージ
胸熱であり、自分の仕事をこなすだけのroleなどと一緒にされては困る
function( a, b, c, d );
a.role( b, c, d );
552デフォルトの名無しさん
2016/05/04(水) 10:16:54.82ID:wjUC1pj0 例えば、日本は縦割り行政的であり、役人的であると言われ(role)
一方で、アメリカは横のつながりが強く、機能的だと言われる(function)
このように、機能と役割は対立する概念として扱われている言葉であり、思想が違う
日本の映画やドラマなんかでよく
「それは自分の仕事じゃないのでやりません」とか
逆に「自分たちの管轄だから余所者は入ってくるな」とか
役割的発想は悪いことのように扱われるのが常
逆に主人公たちは部署間を飛び越えて機能的に行動すると決まっている
一方で、アメリカは横のつながりが強く、機能的だと言われる(function)
このように、機能と役割は対立する概念として扱われている言葉であり、思想が違う
日本の映画やドラマなんかでよく
「それは自分の仕事じゃないのでやりません」とか
逆に「自分たちの管轄だから余所者は入ってくるな」とか
役割的発想は悪いことのように扱われるのが常
逆に主人公たちは部署間を飛び越えて機能的に行動すると決まっている
553デフォルトの名無しさん
2016/05/04(水) 12:07:39.94ID:p+LvbHBp もうちょっとプログラマ的喩えにしようぜ。
procedure=大域環境に対して参照と破壊をするもの
function=環境を参照せず、戻り値は引数にのみ依存するもの
closure=固有の環境を持ち、その環境に対して参照と破壊をするもの
どれも意味が違う。
functionとroleはクラスとインスタンスくらい意味が違うと思う。
procedure=大域環境に対して参照と破壊をするもの
function=環境を参照せず、戻り値は引数にのみ依存するもの
closure=固有の環境を持ち、その環境に対して参照と破壊をするもの
どれも意味が違う。
functionとroleはクラスとインスタンスくらい意味が違うと思う。
554デフォルトの名無しさん
2016/05/04(水) 23:28:44.89ID:wjUC1pj0 歯車でいえば
複数の歯車が上手く連携して動いている様を機能していると言うし
個々の歯車に着目してそれぞれが自分の仕事をしている様を役割をこなしているという
手続き的に時系列に沿って考えると
個々が役割を果たした結果、全体として機能がもたらされて、また別の大きな役割を担う・・・という風に
卵が先か鶏が先か、みたいなところがあって、双方の視点はどちらも重要で
同時に扱ていかなければならないわけだけど
区別して扱われる別の視点であり、function = roleとしてしまうのは単純にセンスないというか早合点
functionとroleの考え方の微妙な違いは非常に重要で
最初の出発点が違うことで資本主義と社会主義など、時としては戦争が起こる場合もある
(つまりは、資本主義と社会主義は鶏が先か卵が先か、functionが先かroleがという思想の違い
functionはまさに空気のようなもので、人と人をつないで機能させるお金を重視している
roleはまさに人そのもの、その役割に主体を置いている)
functionをroleと言ってしまうのは教養がないと言われても仕方がない
自分の思考が今何に着目していて何を考えているか把握しておかないと大変なことになる
頭がよくなりたければ囲碁が良い
囲碁は碁石そのものにも着目しなければならないし、碁石と碁石の境界にも着目しなければならない
それぞれで見え方が全く変わってくるし、同時に考えなければならない
頭の体操に良い
「物」と「事」は別のものだけど、「物事」という言葉があるように同時に考えなければならないこともしばしば
複数の歯車が上手く連携して動いている様を機能していると言うし
個々の歯車に着目してそれぞれが自分の仕事をしている様を役割をこなしているという
手続き的に時系列に沿って考えると
個々が役割を果たした結果、全体として機能がもたらされて、また別の大きな役割を担う・・・という風に
卵が先か鶏が先か、みたいなところがあって、双方の視点はどちらも重要で
同時に扱ていかなければならないわけだけど
区別して扱われる別の視点であり、function = roleとしてしまうのは単純にセンスないというか早合点
functionとroleの考え方の微妙な違いは非常に重要で
最初の出発点が違うことで資本主義と社会主義など、時としては戦争が起こる場合もある
(つまりは、資本主義と社会主義は鶏が先か卵が先か、functionが先かroleがという思想の違い
functionはまさに空気のようなもので、人と人をつないで機能させるお金を重視している
roleはまさに人そのもの、その役割に主体を置いている)
functionをroleと言ってしまうのは教養がないと言われても仕方がない
自分の思考が今何に着目していて何を考えているか把握しておかないと大変なことになる
頭がよくなりたければ囲碁が良い
囲碁は碁石そのものにも着目しなければならないし、碁石と碁石の境界にも着目しなければならない
それぞれで見え方が全く変わってくるし、同時に考えなければならない
頭の体操に良い
「物」と「事」は別のものだけど、「物事」という言葉があるように同時に考えなければならないこともしばしば
555デフォルトの名無しさん
2016/05/04(水) 23:40:58.82ID:ug5Kipfy 関数ってそんなに抽象的な意味を持ってたのか
インプット&アウトプット、リクエスト&レスポンスの手続きくらいに見てたよ
インプット&アウトプット、リクエスト&レスポンスの手続きくらいに見てたよ
556デフォルトの名無しさん
2016/05/05(木) 00:33:21.20ID:dh4q1EnN 関数は二者以上の関係を表しており、二者以上の関係性が何か機能をもたらす
というより、逆算して、機能をもたらせるように、二者以上の関係性を作るのがエンジニアの仕事
だから関数もfunctionだし、機能もfunctionという
電子部品だって、回路を組んで組み合わせなければ機能しない
「関」という字が示すように、関係性は何事においても常に重要で
数学や物理はすべて関係性を数式で表すことで成り立っている
「1」という数字が何か意味を持っているというよりは、「1」と他の数字との関係性が「1」自身の立場や性質を決めている
関係性は非常に高等で、目に見えないものであるが故、尊いものとされている
というのも物事の関係性を紐解いたり、逆に利用できたり、機能的に考えることができる人は
当然、役割的思考も出来るものとされているから
役割的発想は馬鹿にでもできる
アメリカが赤のことを悪とするのもこのためで、そいうった悪の思想から自分たちを守るために
右翼の人たちは「保守」と呼ばれる
赤の思想のほうが理解しやすく馬鹿でも少年でもわかり
簡単で広まりやすいので、自分たちの尊い考え方や社会を
守らなければ、占領されてしまうという恐怖感からある種過剰な防衛をしている
年を取れば自然と物事の関係性の重要さに気付くものだから基本保守になる
そういったことを一通り分かったうえであえて福祉にも力を入れるというのが今の先進国のあり方
順番を誤ってはいけない
会社でいえば自分の役割しかしない人は指示待ち人間といわれ歓迎されない
一方で機能的に考える人は他者とのコミュニケーションを図り、関係を大事にし、目的を達成する努力をする
両方の考え方ができる人は機能的発想に加えて他者への配慮もするし、リーダー的
何事も一つの思想だけでどうにかしようとしないほうが良い
例えば「1」をオブジェクトとしてとらえるという、某言語のような考え方は全くする必要ない
数学の「1」にそのような意味はないし、全てをオブジェクトとして再認識して再構築する必要はなく
マルチパラダイム言語で良い
1+2は単に1と2を足すという解釈でよく、1に+2というメッセージをどうのこうのという意味不明な再解釈はいらない
考え方を統一しようとする必要はなく、そういった偏った思想をしても良いことはない
というより、逆算して、機能をもたらせるように、二者以上の関係性を作るのがエンジニアの仕事
だから関数もfunctionだし、機能もfunctionという
電子部品だって、回路を組んで組み合わせなければ機能しない
「関」という字が示すように、関係性は何事においても常に重要で
数学や物理はすべて関係性を数式で表すことで成り立っている
「1」という数字が何か意味を持っているというよりは、「1」と他の数字との関係性が「1」自身の立場や性質を決めている
関係性は非常に高等で、目に見えないものであるが故、尊いものとされている
というのも物事の関係性を紐解いたり、逆に利用できたり、機能的に考えることができる人は
当然、役割的思考も出来るものとされているから
役割的発想は馬鹿にでもできる
アメリカが赤のことを悪とするのもこのためで、そいうった悪の思想から自分たちを守るために
右翼の人たちは「保守」と呼ばれる
赤の思想のほうが理解しやすく馬鹿でも少年でもわかり
簡単で広まりやすいので、自分たちの尊い考え方や社会を
守らなければ、占領されてしまうという恐怖感からある種過剰な防衛をしている
年を取れば自然と物事の関係性の重要さに気付くものだから基本保守になる
そういったことを一通り分かったうえであえて福祉にも力を入れるというのが今の先進国のあり方
順番を誤ってはいけない
会社でいえば自分の役割しかしない人は指示待ち人間といわれ歓迎されない
一方で機能的に考える人は他者とのコミュニケーションを図り、関係を大事にし、目的を達成する努力をする
両方の考え方ができる人は機能的発想に加えて他者への配慮もするし、リーダー的
何事も一つの思想だけでどうにかしようとしないほうが良い
例えば「1」をオブジェクトとしてとらえるという、某言語のような考え方は全くする必要ない
数学の「1」にそのような意味はないし、全てをオブジェクトとして再認識して再構築する必要はなく
マルチパラダイム言語で良い
1+2は単に1と2を足すという解釈でよく、1に+2というメッセージをどうのこうのという意味不明な再解釈はいらない
考え方を統一しようとする必要はなく、そういった偏った思想をしても良いことはない
557デフォルトの名無しさん
2016/05/05(木) 01:08:08.43ID:dh4q1EnN アメリカは自由自由いつも言ってるが、いったい何に対しての自由なのか、
どこを目指しているのかというと
自分が生まれながら背負ったroleから自由である、ということ
この辺、人種差別の問題とか貧困の問題とかが出てくる
一方で、社会に対する自分の機能性のようなものは常に非常に重視される
要らなくなったらすぐに首を切られるし、厳しい
とにかく機能機能機能機能、個人に対して厳しい、機能性のない人はいりません
しかし、生まれ持ったroleからの自由はサポートしましょう
その意味で、移民は受け入れる、ただし機能性のある人だけ
どこを目指しているのかというと
自分が生まれながら背負ったroleから自由である、ということ
この辺、人種差別の問題とか貧困の問題とかが出てくる
一方で、社会に対する自分の機能性のようなものは常に非常に重視される
要らなくなったらすぐに首を切られるし、厳しい
とにかく機能機能機能機能、個人に対して厳しい、機能性のない人はいりません
しかし、生まれ持ったroleからの自由はサポートしましょう
その意味で、移民は受け入れる、ただし機能性のある人だけ
558デフォルトの名無しさん
2016/05/05(木) 01:19:48.20ID:AqKMDGmp この長文君きもちわるい…
559デフォルトの名無しさん
2016/05/05(木) 01:42:26.59ID:3/paarxc >>553
ぼくの作ってるものは偽C言語でグローバル変数もあるから
定義的にはプロシージャが適切なんだろうな
それでロールについてはもう少し考えてみるつもりだけど、
malloc()そのものがfunctionとして、malloc()を何につかうのかがroleなのかな
けれど関数の多くはライブラリとかAPIではなく単なるサブルーチンのような気がして
サブルーチンはロールだとも思うのよね
ぼくの作ってるものは偽C言語でグローバル変数もあるから
定義的にはプロシージャが適切なんだろうな
それでロールについてはもう少し考えてみるつもりだけど、
malloc()そのものがfunctionとして、malloc()を何につかうのかがroleなのかな
けれど関数の多くはライブラリとかAPIではなく単なるサブルーチンのような気がして
サブルーチンはロールだとも思うのよね
560デフォルトの名無しさん
2016/05/05(木) 02:12:56.28ID:Jo4WiHb1 単に役割って意味なら、変数にだってそれぞれの役割があるよね。
レスを投稿する
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【雑談】暇人集会所part18
- 高市早苗「支持者の理解を得られないので台湾発言を撤回できない」 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
