「コンパイラ・スクリプトエンジン」相談室16at TECH
「コンパイラ・スクリプトエンジン」相談室16 - 暇つぶし2ch1:デフォルトの名無しさん
14/07/20 11:16:19.37 p6eMVAxc.net
プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。

Wikiのまとめページ
URLリンク(www6.atwiki.jp)

2:デフォルトの名無しさん
14/07/20 11:18:41.91 p6eMVAxc.net
誰も立てないので立てた。

需要なければこのまま放置ということで。

3:デフォルトの名無しさん
14/07/20 11:19:36.24 b1uNa6xY.net
前スレ
「コンパイラ・スクリプトエンジン」相談室15
スレリンク(tech板)

4:デフォルトの名無しさん
14/07/20 13:22:32.46 6KMBfrlQ.net
前スレ落ちたの気づかなかった>>1

5:片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0
14/07/22 13:31:35.08 itpt16Wl.net
というわけでCaperをRubyで使えるようにしなきゃいけない。。。

6:デフォルトの名無しさん
14/07/23 00:33:25.56 6DA6PhLu.net
最近はみんなLLVMに集まる流れなのかな

7:デフォルトの名無しさん
14/07/24 10:32:17.75 w2uo6knu.net
お手軽に言語作ってみますた なら
バックエンドは インタプリタか JVM かLLVM のどれかになるべ

あとは JSへのトランスレータか
意外に選択肢多いな

8:片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0
14/07/27 13:36:28.20 YSqiGYKe.net
jonigataさん、Rubyのサポートを追加しました。

9:デフォルトの名無しさん
14/07/27 21:59:50.89 aStfmk5+.net
JVM上で動く言語をガチで作ってる人ってバイトコードを直接出力するコンパイラ作ってるのかな。
JVM上で動くエンジン用のコードじゃなくて。

10:デフォルトの名無しさん
14/07/27 22:00:59.03 UgznbaEB.net
そりゃそうだ。

11:片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0
14/07/28 14:12:21.53 DUvGztkP.net
jonigataさんと連絡取れない。。。

12:片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0
14/07/28 16:55:40.10 SnQo0cO4.net
caperにRubyサポートが追加されたよ

13:9
14/07/28 21:54:34.37 zEAFz2i4.net
>>10
やっぱりですか。
ただ目標がゲームエンジンで将来的にスマホも視野に入れると直接バイトコードってのもどうかという気もします。
ただクッション入れると速度的にどうなんだろう、悩ましい。

14:片山博文MZ次期CEO ◆T6xkBnTXz7B0
14/07/29 01:15:58.91 qgm2mseY.net
>>1
もっと参考URLを置いてほしいぜ

15:片山博文MZ次期CEO ◆T6xkBnTXz7B0
14/08/01 11:03:08.58 fIgY7BmT.net
caperにPHPサポートが追加されたよ!

16:デフォルトの名無しさん
14/08/01 15:28:56.80 ARdX3qTq.net
>>15
サポートヨロっていわれてんじゃん、がんばれ

17:デフォルトの名無しさん
14/08/02 16:23:44.47 jWpcYE6C.net
>>13
俺は前に自作スクリプト→Javaソース→javassistでバイトコードに変換と
やってたけど遂に完成させずに投げてしまったxp

18:デフォルトの名無しさん
14/08/03 01:07:00.19 MH7BOvZw.net
つかC並にJVM上で低レベルに動く言語が・・・ってどっかにありそうな気がする。

19:デフォルトの名無しさん
14/08/03 12:20:45.13 q8fBalr7.net
ちょっと何言ってるかわかりませんね

20:デフォルトの名無しさん
14/08/03 16:19:28.19 /m+nZnOr.net
>>18
日本語でおk

21:デフォルトの名無しさん
14/08/04 00:28:33.88 5WaCX4TM.net
JVMのバイトコード吐くライブラリってもあるけど
こっちはバイトコードの知識必須
言語仕様だけ考えて満足しようぜw

22:デフォルトの名無しさん
14/08/04 02:12:43.16 BTc2ko+M.net
どうせ中間言語に落とし込むんだしバイトコードくらい余裕だろ

23:デフォルトの名無しさん
14/08/08 03:06:15.46 W/TCi66w.net
URLリンク(www.buzzword.jp)

24:デフォルトの名無しさん
14/08/08 08:30:38.85 pWDxpd5M.net
guro

25:デフォルトの名無しさん
14/08/08 08:47:25.07 19ZqYpH8.net
>>23
あんた誰?

26:デフォルトの名無しさん
14/08/08 12:06:16.40 MJ5RFc2h.net
>>13
まず簡単なのを作って、次は作りなおせばいいじゃん。

27:デフォルトの名無しさん
14/08/08 12:31:17.41 U1h/L2RD.net
>>7
最近はasm.jsみたいなのもあるしね。

28:デフォルトの名無しさん
14/08/08 16:22:46.37 F5/v+VI2.net
>>23はウィルス注意

29:デフォルトの名無しさん
14/08/12 11:48:49.30 AbgWlUoH.net
マークスイープのようにGC以外のところでGCを考えずに済み
参照カウントみたいに最大停止時間が短いGCってある?
速度は問いません

30:デフォルトの名無しさん
14/08/12 12:44:46.12 A03


31:Bg3Wq.net



32:デフォルトの名無しさん
14/08/12 12:44:50.65 +sDF17YZ.net
>>29
実装簡単なのだとCOPY GCかぬ?
これに寿命を意識すると世代別GCに発展したのがある。

コレより先は実は最先端だったり

33:デフォルトの名無しさん
14/08/13 00:05:07.82 5Fn9SOB/.net
>>31
コピーgcはやっぱメモリ効率がーんー
今のところ遅延マークスイープをなんとか使おうかと思うけどーなー
悩ましい。。。

34:デフォルトの名無しさん
14/08/13 00:29:26.50 IvuVUKO/.net
>>32
EdenだけCopy GC,OLDに行ったらMarkSweepとか色んな掛け合わせもあるみたいだね

35:デフォルトの名無しさん
14/08/14 01:15:17.94 nk1V5Hss.net
mostly-concurrentマーク&スイープGCは?
1. ミューテータを止めてルートセットをマーク
2. ミューテータと並行に別スレッドでマーク
3. ミューテータを止めて再度ルートセット+残り全部をマーク
4. ミューテータと並行に別スレッドでスイープ
ってやるやつ
ライトバリアがいるからGC以外のところでGCを考えずには済まないけど (そのへんは世代別も一緒だが)
最大停止時間は短いと思うよ

36:デフォルトの名無しさん
14/09/20 16:42:37.06 Vt9JAeIo.net
caperが改善されて大規模なパーサーでも
早く生成できるようになったようです。

37:デフォルトの名無しさん
14/09/20 17:18:58.94 INF4B04G.net
あんまりでっかいの書かないんで今まで困った事ないのだが、吉報には違いなかったりするのでお礼を述べさせて貰います、ありがとう。
>>Thanks for ジョニガタさんとMZさん

38:デフォルトの名無しさん
14/09/21 00:08:58.31 +YftySIr.net
やること
★Ruby RaccとCaperの比較レビュー。
★CaperでCSVパーサーの作成。
★CaperでXMLパーサーの作成。

39:sage
14/09/26 04:19:50.66 VUi+/UsP.net
winXP visual studio 2010 expressで
antlr4の導入できた方いらっしゃいませんでしょうか?

40:デフォルトの名無しさん
14/09/26 10:04:23.12 8tItaSRz.net
ANTLRWorks とか言うヤツはダメなん?

41:デフォルトの名無しさん
14/09/27 01:39:11.71 oNml76ai.net
バッチファイルみたいなのに定義ファイルかませば出せると思いきや、
JAVAしか出てこない。。。
英語よく読めない

42:デフォルトの名無しさん
14/09/27 01:53:39.94 PIGMRS01.net
akiramero

43:デフォルトの名無しさん
14/10/12 13:57:53.54 fouZ38nR.net
やっと簡単な電卓インタプリタができたー

44:デフォルトの名無しさん
14/10/12 15:26:51.34 s0CJmRCd.net
おめおめ
四則演算と簡単な制御構造が実装できると
あとは応用だから
扱う型の種類が増えない限り楽に拡張できそうだね

45:デフォルトの名無しさん
14/10/13 01:35:36.78 UPM0IlOC.net
演算子って四則演算以上のことやらすと必ずそいつが決めた優先順位に縛られて破綻するし
電卓ならLISPの(+ 1 2 3 4 5)みたいに演算子相当が無くてオペランド側をいくらでも増やせる構文の方が楽

46:デフォルトの名無しさん
14/10/19 05:56:05.61 irMeVnbo.net
それも


47:そいつが決めた優先順位なわけだが



48:デフォルトの名無しさん
14/10/19 07:29:43.65 Ww99Jszp.net
LISPはLISPで解析器に都合の良い構文だと思う
もちろんそういう意味で(作る側が)楽と言ってるんじゃないのは分かっているが
もう少し使う人間のことも考えてやれと
……で行き着くのも例えばpythonだったりするのでそれはそれでうーん

49:デフォルトの名無しさん
14/10/19 19:43:22.93 U9zncy/O.net
古代言語なんだから人間向きなわけがない

50:デフォルトの名無しさん
14/10/19 19:50:43.83 wwCHsqfk.net
慣れたら何とも無いけど

51:デフォルトの名無しさん
14/10/19 23:32:38.99 zZJPnNDh.net
>>46
FORTHが一番解析器に優しいと思う、Lispは少なくとも関数に渡す引数の数は解析で判断できるけど、FORTHはそれすら捨ててる
あとLispは支援するエディタがあれば書く事に戸惑いは殆どないよ。
読むのは適切なインデントがされていないと辛いのは本当だけどそれだってRubyやらCやらでインデント無しと変わらないと思う。

なお、Pythonはインデントが構文に含まれているのが嫌い(エディタで再フォーマットできない)

52:デフォルトの名無しさん
14/10/20 07:07:45.12 vNvY5rmm.net
ある海外のファンタジー小説で、異世界召喚されたプログラマが魔法でFORTHを実装して
最強魔導師になってた。

53:デフォルトの名無しさん
14/10/20 07:26:17.53 fcKonDPy.net
May the forth be with you.

54:デフォルトの名無しさん
14/10/20 11:16:47.94 6/LNQkyp.net
Lispは見た目的に「目にひっかからない」(関数もマクロもみんな同じようにしか見えない)のが問題なんだけど、
最近流行ってる(?)みたいに ( ) と [ ] を使い分けるとかすると、だいぶ感じが違うと思う。

55:デフォルトの名無しさん
14/10/20 16:23:26.53 s/tFnXbk.net
>>52
Clojureが凄い良くできてる
()でリスト,[]でベクタ,{}でマップ、#{}でセットとリテラルの扱いが凄い綺麗

56:デフォルトの名無しさん
14/10/25 10:10:07.27 9gGhLYaB.net
{} はすごくいいね。素の lisp だとほとんど使われない記号でもったいなかった。しかも数式とも合ってる。
ただ[] は好きになれないなぁ。個人的趣味だけど。

57:デフォルトの名無しさん
14/10/25 13:15:04.28 rVCkRMh+.net
変わった趣味だw

58:デフォルトの名無しさん
14/11/01 16:34:43.21 5yNYNAVX.net
エラーメッセージを楽して、素晴らしく表示したいんですけど
いい方法を教えてください。

59:デフォルトの名無しさん
14/11/01 18:28:37.68 yfMW+WpF.net
>>56
センスのいい奴に頼む

60:デフォルトの名無しさん
14/11/01 19:12:18.30 md1XyPQH.net
言うても行桁理由以外に何か必要かね

61:デフォルトの名無しさん
14/11/01 19:25:31.66 etXlBO/A.net
ファイル名…かな

62:デフォルトの名無しさん
14/11/01 20:57:55.11 68QCuiUg.net
エラー表示は?だけでいい
というネタがあったな

63:デフォルトの名無しさん
14/11/02 00:04:36.51 FPvqJpqA.net
人間が見てるのとコンパイラが解釈してるので大きくズレがある場合とか
エラーメッセージ見てわからんことが多々ある

xxの前にxxがあります/ありません系のエラーはウンザリ

64:デフォルトの名無しさん
14/11/02 00:22:55.85 E/aMB+tP.net
print " _人人 人人_ \n",
"> 突然の死


65:< ", col, ",", row, " in ",filename,":", reason, "\n", "  ̄Y^Y^Y^Y ̄\n"; die; 楽して素晴らしい方向を考えた



66:デフォルトの名無しさん
14/11/02 04:19:14.28 l3Xq9EsR.net
$ nmlc -run examples/lablgl/triangle.nml
Fatal error: exception Failure("
_人人 人人_
> 突然の死 < parse error line 33
 ̄Y^Y^Y^Y^Y ̄
")
って出るようにしてみた。

67:デフォルトの名無しさん
14/11/02 07:10:13.81 Pf8ySLA3.net
何のエラーか
なぜ起こったか
どうすれば良いか

のうちどこまでエラー表示するか
表示しないものはマニュアルに書くか
統一しておくと良い

68:デフォルトの名無しさん
14/11/02 10:22:44.88 P2QTHoYV.net
何のエラーか数字で提示
あとはknowledge baseで
knowledge baseは迷宮

69:デフォルトの名無しさん
14/11/02 11:43:14.80 6U4Atlhd.net
基本的には書いた人の頭のエラーだからな。
コンパイラ的には「チェンジ!チェンジ!この子変えて!!!」
だけでいい。

70:デフォルトの名無しさん
14/11/02 12:31:43.49 4dYx0WR7.net
> 関西型プログラミング言語のひとつ Kyoto のコンパイラは,文法ミスのあるコードを与えると「ふうがわりなコードどすなぁ」とだけ返すので,何が間違っているかはこちらで推測する必要がある.

71:デフォルトの名無しさん
14/11/02 12:39:13.58 FPvqJpqA.net
何回も間違ったらぶぶ漬けが出てきそうだな

72:デフォルトの名無しさん
14/11/02 12:58:18.94 i2BOrYsG.net
>>64
> どうすれば良いか

これは余計なお世話だわ

73:デフォルトの名無しさん
14/11/02 13:03:44.74 FPvqJpqA.net
この道路は工事中なので次の迂回路をご利用ください

74:デフォルトの名無しさん
14/11/02 16:35:04.02 l3Xq9EsR.net
コンパイル速ければ、エラーは1個で十分だったりするよなぁっとか。
大量に出すなら、一番先頭のエラーを一番下に出すと嬉しいとか。

75:デフォルトの名無しさん
14/11/03 12:49:03.39 ljM6XCm0.net
>> 70

迂回は出来ないんだなぁ

76:デフォルトの名無しさん
14/11/03 18:22:08.25 6fFurIEN.net
最近のghcとかだと、関数名をタイポすると似た存在する関数名を示してくれる。外してる時もあるけど。
ああいう親切さをもっと充実させるのも方向性としてはありだと思う。
あらゆるコンパイルエラーがクラウドサーバに送られ続けて典型的なミスを蓄積し続ける、とかね。

77:デフォルトの名無しさん
14/11/04 11:17:19.99 bZGUB4M2.net
大量のデータをまとめて整理した結果をどこかで見たけど
よくあるスペルミス・インポート忘れ・宣言忘れが飛び抜けていて
それ以外はごくわずかでどうでもいいという印象だった

78:デフォルトの名無しさん
14/11/04 11:19:32.39 bZGUB4M2.net
中級者以上と入門者はつまずく所が全く違うから
後者のデータだけを集めれば「入門者に最適」な言語やツールが作れるかもしれない

79:デフォルトの名無しさん
14/11/04 13:56:57.87 OXvDS9Yh.net
C言語は、研究結果;はあった方が良いみたいな話を聞いた事があるような気がする。
けど、最後だけ無しとかだったのかもしれないし、良く覚えてないなぁ。
今作ってる言語は必要な所だけ;を書くって作ってるのだけど。
初心者には難しいのかもしれないです。

80:デフォルトの名無しさん
14/11/04 15:36:24.07 bZGUB4M2.net
気の利いたエディタサポートまで考えるなら改行をまたぐ構文を禁止すべき
VBはそうなってる

81:デフォルトの名無しさん
14/11/04 15:58:19.03 vqrMdBMn.net



82:lispとかでマクロ展開したときに中でエラーが起こったら行と桁の表示は諦めるしかないのかな 前に作ったとき展開後も展開前の行を引き継ぐやり方をしてたけど



83:デフォルトの名無しさん
14/11/04 17:04:17.39 99dxtSJ/.net
>>78
トークンに文字列だけじゃなく、もとあった位置の情報も付けたら?

>>76
どんな言語でも、ある程度本格的なプロダクトなら、たいてい、「やたら長くなるから改行を挟みたい式」と
「やたら短くて似たようなのが連続するから1行にまとめたい文」の両方が出てくるので、
どちらを強制するのも一長一短。

構文的には (a, b, c, d) と {a; b; c; d;} の、どちらも似たようなものだけど、機械的なコード生成では
後者のほうが以前は楽だった(最近は可変長配列みたいなオブジェクトに入れて、最後に
joinとか、ライブラリが充実してる言語を使うのが普通なので、あまり差は無い)。

人間の作業としては、複数行にまたがるものでは前者のほうはちょっとめんどい。
(最後の行を削ったあとで、前の行の最後も削る必要があるので)
{a,
b,
c}
みたいに閉じカッコを行末に付けてしまえばそうでもないかもだが。

あとそもそもC言語の構文では ; の規則がちょっと変則的。

84:デフォルトの名無しさん
14/11/04 23:11:55.77 DC7Ttoit.net
Lispマクロのデバッグはちょっと難しいよな。
backquoteのように構文上の構造を引き継ぐような奴ばかりならいいんだけど。

85:デフォルトの名無しさん
14/11/04 23:12:32.22 DC7Ttoit.net
デバッグ→デバッグ情報

86:デフォルトの名無しさん
14/11/04 23:31:17.91 6PskSs9/.net
複雑なマクロでもたいていは展開系見れば何とかなるね。それでも動かないマクロがたまーにあって辛いけど。

87:デフォルトの名無しさん
14/11/04 23:40:21.11 cufVHbaO.net
自作のコンパイラなりなんなりはデバッグと最適化を考えたらなにも出来ない
むしろ潔く投げ捨てる勢いと割り切りで走らないとダメっしょ
俺様考えたルールで動いた万歳終わりな感じ
四則演算と条件文、あとGOTOなりCALLなりがあれば立派
それ以上の高度化は努力しだいってことで
それとも大人しくCommon Lispあたりを使って妥協するとか
Lispだと関数を生成して実行できるんだよね
例えば入力画面の項目数とか要件とかを与えて関数の形で生成して実行な感じの

俺様コンパイラ、Lispコード生成するからコンパイルや実行デバッグはそちらでオネガイみたくw

88:デフォルトの名無しさん
14/11/05 01:50:49.88 j8mQRcC4.net
そこまで楽するなら構文をリードマクロで定義したほうが早そう

89:デフォルトの名無しさん
14/11/05 07:49:49.12 xr1YCX3/.net
xmlってスクリプト言語なの?データ構造なの?
xmlを使ったスクリプト言語らしきモノもあるみたいだし、よーわからん

90:デフォルトの名無しさん
14/11/05 08:22:34.79 Fpn6fvq+.net
>>83
C とかのソース吐いて、最適化よろしくね(はーと)でいいだろ

91:デフォルトの名無しさん
14/11/05 09:54:15.68 gfolKTI3.net
>>85
データ構造だろ
パーサ作るのが楽というか有りものが使えるからxxxxMLみたいに拡張して使われるんだろう

92:デフォルトの名無しさん
14/11/05 11:54:58.98 bBYPRYMe.net
>>85
プレーンテキストってスクリプト言語なの?データ構造なの?

93:デフォルトの名無しさん
14/11/05 17:03:13.23 I87EWij/.net
>>88
只の文字列だよ
そこに意味を付けるのはまた別の事

94:デフォルトの名無しさん
14/11/05 17:58:10.42 uuXXn0N9.net
シェルスクリプトとかみたいな意味でスクリプトではない。
XSLTとか、あとワドラー氏が冗談で提案していたと思うがXMLで表現するプログラミング言語と
いうものもありうるけど、XML自体は単なるデータ構造でしかない。

95:デフォルトの名無しさん
14/11/05 21:09:37.17 WN8UKbpt.net
XMLにロジックを書く者は呪われる。やめておいた方がいい。あれはデータ形式としても冗長すぎるし、良いところはない。
S式を使うといい。

96:デフォルトの名無しさん
14/11/05 21:32:19.82 uuXXn0N9.net
XSLTは割とよくできてるよw

97:デフォルトの名無しさん
14/11/06 01:58:37.08 Rw7wEfhr.net
閉じ括弧重ね書き文化は誰も止めなかったのかねえ))))))))))))))))))))

98:デフォルトの名無しさん
14/11/06 02:08:22.53 rrEEAzVB.net
Cみたいな中括弧、改行、インデントを繰り返すのもイマイチ

99:デフォルトの名無しさん
14/11/07 19:44:15.64 XxPyN8W7.net
整ってると思うがなあ
switch, caseだけはアレだが

100:デフォルトの名無しさん
14/11/07 20:31:09.14 sXupdHKX.net
switchとcaseは同じインデントにしてbreakだけ字下げだよね?ね?

101:デフォルトの名無しさん
14/11/07 20:52:59.78 4yd7iQ66.net
>>96 に一票

102:デフォルトの名無しさん
14/11/07 22:25:11.01 fMVGCDH+.net
(,)は特別な意味持たせたいとかあるので難しいですね。
(a,)はタプルにしようか、タプルじゃないのかとか。(,a)はタプルとか。

103:デフォルトの名無しさん
14/11/09 11:22:54.52 /PoG0aeo.net
Pythonの「1要素のタプル」はトリッキーだが面白いとは思った。
kなんとかの人が言ってるように、カッコなしでもそうなるのは罠だがw

104:デフォルトの名無しさん
14/11/09 12:10:23.68 6nixZySy.net
lispだと(a)とaの違いかな

105:デフォルトの名無しさん
14/11/09 16:44:48.42 7O7eobU9.net
>> 100

そんな感じ。名前のない構造体

106:デフォルトの名無しさん
14/11/09 20:23:26.03 15ZMIIuR.net
いや名前ある、タプル

107:デフォルトの名無しさん
14/11/10 01:34:25.20 zIX5GD/A.net
ここって正規表現エンジンの話もいいのかな
nfaとdfaのハイブリッドエンジンを実装したいんだけど
dfaの中にnfaがあったらどう処理するかとかどこまでdfaにしていいかとかさっぱり分からない
調べてもon-the-flyという単語ぐらいしか出てこなくて実装方法とかは見つからない
知ってる人いたら教えてほしい

108:デフォルトの名無しさん
14/11/10 07:33:01.86 XDoaKxdi.net
schemeの自作コンパイラ作成の過程で、cps変換につまづいています。
よくネット上で「簡単な処理で実現できる」という感じで書いてあるのを良く見るのですが、
実際にやろうとするとなかなかできません。
具体的に何をやったらいいのでしょうか?

ちなみにlambdaでのcps変換はぎりぎり理解できてると思います。

109:デフォルトの名無しさん
14/11/10 09:06:04.50 hP+YfTbo.net
Scheme使ってるならEoPLの最後のほうの章読んだらええで。

110:デフォルトの名無しさん
14/11/10 12:08:25.51 s3EMdqhf.net
>>103
つ ドラゴンブック, lazy transiyiOn evaluation

古典実装だとoriginal egrep

111:デフォルトの名無しさん
14/11/10 17:06:44.93 G4zfChd8.net
>>100
Lisp の (a) は (a . nil) だからちょっと違う。

>>101
構造体とかそういう別の名前を持ち出したりするとややこしくなるだけ。

112:デフォルトの名無しさん
14/11/11 02:10:53.26 85SNGvMw.net
>>106
ありがとう
でも自分の望んでるのとは違うみたい

113:デフォルトの名無しさん
14/11/12 01:44:27.15 DTrQhtqP.net
>>108
この延長線上にある話だと理解できてないか、
SFA(semi-deterministic finite automata)を勘違いしてon-the-flyだと思っている。
前者ならGNU Rxを読めばいい。

114:デフォルトの名無しさん
14/11/12 01:57:21.21 /4vNcbkH.net
>>109
多分後者かもしれない
自分の考えてるのは(X)*aときたら
1 ==(X)==> 1
1 ==a==> 2
というdfaを作って次のノードへの遷移条件が文字じゃなくてnfaなら
それを優先して見てマッチしたらその先に行く方法を考えてた
それならnfaとdfaをうまく組みあわせられると思って

あとsfaは今初めて知った
sfaとかon-the-flyは調べてもちゃんとした説明が出てこなくて困る

115:デフォルトの名無しさん
14/11/12 01:59:11.10 /4vNcbkH.net
あとnfaだけかdfaだけなら偶然持ってたドラゴンブックやネットの情報が十分にあって実装出来た
ハイブリッドにする方法が分からなくて途方に暮れてる

116:デフォルトの名無しさん
14/11/12 11:39:32.29 b8dDlQST.net
SFAでググったらランク上位の日本語の記述がこれだった
URLリンク(www.slideshare.net)

役に立つかは知らないけどマッチングの並列実行だってさ

117:デフォルトの名無しさん
14/11/15 04:11:51.30 2wuAQ8Y6.net
DFAで出来ないこと、やると遅いことをNFAでやる。
DFAにならない正規表現の拡張や状態が爆発するn回繰り返しなど。

118:片山博文MZ次期CEO ◆T6xkBnTXz7B0
14/11/29 15:46:21.26 AWiICJMh.net
Caperで、Haxe用のパーサーが作れるようになったらしいぞ!!!

URLリンク(jonigata.github.io)

119:デフォルトの名無しさん
14/11/29 19:24:39.29 bjHueY84.net
ということはjavaとphpとC#に対応したということか

120:デフォルトの名無しさん
14/11/29 19:25:23.30 bjHueY84.net
って元からしてんじゃん…

121:デフォルトの名無しさん
14/12/04 17:14:51.41 hjxCxC4V.net
スレ立てるまでもない質問はここで 139匹目から来ました。

JavaCCで負の数と引き算を識別したいんですけど、どう定義したらいいでしょうか?

以下現状の一部抜粋(メソッド名についてはスルーしてください)
void enzan3() :
{}
{
enzan4()((<TASU>|<HIKU>)right=enzan4())*
}

void enzan4() :
{}
{
enzan5()((<KAKERU>|<WARU>)enzan5())*
}

void enzan5() :
{}
{
<MOZI>|[<HIKU>]<SUUZI>|"(" e=enzan3() ")"
}

122:デフォルトの名無しさん
14/12/04 18:52:41.09 jHjIGczB.net
>>117
そのスレの997以降のはやってないの?

number=0..9
plus::=<expr> + <expr>
minus::=<expr> - <expr>
expr::=<number>|<plus>|<minus>
な感じになるだろうし

単項のマイナスはexprにかからない形式で-が出てきた時だし間違いようがなさそうに思うんだけど

123:デフォルトの名無しさん
14/12/04 20:49:24.04 hjxCxC4V.net
あ。
そこの
>単項演算子と二項演算子の区別
についてはまだ調べてないです。
調べてみます。

二項演算子+,-の間に二項演算子*,/を含む式があって、
その中にカッコか数字か変数呼び出しなどがあるように定義するのではないのですか?
例えば
-1
1-2
-2*4
2/(-2+5)
などの書き方が使えるようになるといいなとか考えています。

>>118
::=って書き方は確かBNF記法でしたっけ?
その書き方についてぜんぜん知らないのでそれも調べてみます。

124:デフォルトの名無しさん
14/12/06 17:09:31.69 evyQIgPT.net
みんなBNFとかやってるのか
char配列にして解析してるから常に最後が';'だと楽なんだよね
'{'で+1、'}'で-1、+-0の状態で';'がきたらその構文が完結する
int a;, class {}; switch{}; void hey(){}; if(true){}; for(){};

125:デフォルトの名無しさん
14/12/06 17:17:29.59 djm9MkQZ.net
演算子の優先順位はどうしてんの?

126:デフォルトの名無しさん
14/12/06 17:30:21.62 5oGFUyw+.net
べつに区切り文字が = だろうが : だろうが ::= だろうが BNF は BNF だ

127:117
14/12/06 23:05:55.88 BPhK2Nlg.net
>>120
>みんなBNFとかやってるのか
JavaCCの場合字句解析でトークン列に分解してくれて、
>>117にあるようにそのトークンの並びを書いて構文解析の定義をします。
なのでBNF記法とは違った書き方になります。

>>121
>演算子の優先順位はどうしてんの?

いい説明文が思い浮かばないので、
まずは例として1+2*3/4-5という式を構文木にしたものを以下にアップします。
URLリンク(fast-uploader.com)
こんなかんじのまとまりです。
演算子:/ 左辺:3(enzan5) 右辺:4(enzan5) → ①(enzan4)
演算子:* 左辺:2(enzan5) 右辺:①(enzan4) → ②(enzan4)
演算子:- 左辺:②(enzan4) 右辺:5(enzan5) → ③(enzan4)
演算子:+ 左辺:1(enzan5) 右辺:③(enzan4) →④(enzan3)

128:117
14/12/06 23:06:51.00 BPhK2Nlg.net
とりあえずenzan3の定義の先頭にマイナスの記号があるかもしれないという意味合いで
以下のようなコードに変えてみました。

void enzan3() :
{}
{
[<HIKU>]enzan4() //★
((<TASU>|<HIKU>)enzan4())*
}

void enzan4() :
{}
{
enzan5()
((<KAKERU>|<WARU>)enzan5()
}

void enzan5() :
{}
{
<MOZI>|<SUUZI>|"(" enzan3() ")"
}

<>:トークン |:左右のどちらかの構文(||やOr演算子のようなもの) []:省略可能構文

129:117
14/12/06 23:07:27.16 BPhK2Nlg.net
すると、以下のような警告が出ました。

Warning: Choice conflict in (...)* construct at line 608, column 9.
Expansion nested within construct and expansion following construct
have common prefixes, one of which is: <HIKU>
Consider using a lookahead of 2 or more for nested expansion.

内容は選択の突出(Choice conflict)と言うもので、
私が作った構文の定義があいまいのようで
608行目(ここでは★を付けた行)の定義が他の定義とかぶっているらしく、
先頭に出てくる<HIKU>トークンが共通点らしいです。
そもそもの考え方が間違っているかもしれませんが、
それを抜きにしてもまずなぜこのような警告が出ているかわかりません。
一体なぜ出ているかわかる人いれば教えてださい。

130:デフォルトの名無しさん
14/12/06 23:08:41.58 q7blqefO.net
>>120
java(というよりC)のforは()の内部に;が出てくるのが
>>119
javaccの書き方と大差ないみたいよ

131:デフォルトの名無しさん
14/12/06 23:27:12.88 5oGFUyw+.net
この文脈でconflictは「衝突」と言う。
そのメッセージの通り、複数の定義で共通してるトークンがあるから、どっちの定義のほうだとして
解釈していいかわからないからエラーになる。
そのメッセージでは「Consider using a lookahead of 2 or more for nested expansion.」2個あるいはそれ以上の
先読みを使うことを検討してみろ、と言っているが、それに従ったところでうまくいくかどうかは
わからんけどね。

132:デフォルトの名無しさん
14/12/07 01:31:54.20 bfkTF4nN.net
>>123
>>121は重要なヒント
-(1+2)とか、1+(-2)とかにその定義で対応できる?

たとえば★の行をenzan5に移してみるなり、演算子の優先順位を変えてやりなおすとか
それとは関係ないけど、3*2/4って直感的には( (3 * 2) / 4 )になりそうだけどその構文木だと右から左なのね

133:デフォルトの名無しさん
14/12/07 01:36:47.04 bfkTF4nN.net
>>128
勘違いしたわすれて

134:117
14/12/07 21:58:06.68 OacxF8nB.net
>>127
選択の衝突でしたね。
間違えて覚えました;
かぶってるらしいからLOOKAHEADで先読みをしなくてはならないのはわかるのですが、
そのコードでどのパターンとどのパターンでかぶってるのかがわからなくて。

>>128
>-(1+2)とか、1+(-2)とかにその定義で対応できる?
1+(-2)のパターンは意識していましたが、-(1+2)のパターンは忘れてました。
きちんと考えなおしてきます。

135:デフォルトの名無しさん
14/12/07 22:37:16.24 bfkTF4nN.net
>>130
試しに四則演算のみ行う言語をjavaccで作ってみたけど単行演算子程度ならLookAheadいらないよ

136:117
14/12/08 00:25:52.66 yQ2quuvD.net
いろいろ考えているうちに構文規則がおかしなことになってきました;
とりあえず負の数やかっこを含む数式の構文木を一通り考えてみたつもりなんですけど、
以下のような感じであっているでしょうか?
URLリンク(fast-uploader.com)
また、他に欠けているパターンはないでしょうか?

137:デフォルトの名無しさん
14/12/08 18:02:04.16 3czqE9B9.net
>>132
単項演算子はどこに行ったんだ

138:117
14/12/08 21:29:48.11 yQ2quuvD.net
>>133
あれは構文木と言うより抽象構文木というか内部構造と言うかそんなかんじのものですね;
負の数をどう計算するか考えてたらその式や数字に-1をかければいいかなと思って作ってました。
今度はきちんと抽象じゃない構文木を考えます。 はい。

139:117
14/12/08 23:27:15.44 yQ2quuvD.net
とりあえず自分がわかっている範囲で -(1+2)*4 の解析木を作ってみました。
URLリンク(fast-uploader.com)
enzan番号という名前はやめてみました。
空欄部分は下位置調節のためや何を入れたらいいかわからない部分です。

140:117
14/12/09 21:43:09.57 KYZ3f1RL.net
構文規則作ってみましたが、選択の衝突が消えません。
tasuhikuのkakewaruをkakewaru2に変えると消えます。
kakewaruで呼んでるminusの[<HIKU>]がtasuhikuの<HIKU>と競合しているのかと思いましたが、
なぜなのかわかりません。
どこが間違っているでしょうか?

警告なのでとりあえず無視してjavacコンパイルして解析&実行させてみると、以下の式はきちんと実行できました。
1+2+3
-9-3
1+2*3/4-5
7+(-2)
-6*2
-(1+2)*4
(-1+2)*4
-1+2*4
4-(-2/5)
-(-(-39))/13
一応ある程度のパターンを網羅していると思います。

Warning: Choice conflict in (...)* construct at line 608, column 9.
Expansion nested within construct and expansion following construct
have common prefixes, one of which is: <HIKU>
Consider using a lookahead of 2 or more for nested expansion.

141:117
14/12/09 21:44:56.07 KYZ3f1RL.net
void tasuhiku():
{}
{
kakewaru() //608行目
((<TASU>|<HIKU>)kakewaru2())*
}

void kakewaru():
{}
{
minus()
((<KAKERU>|<WARU>)sikikakko())*
}

void kakewaru2():
{}
{
sikikakko()
((<KAKERU>|<WARU>)sikikakko())*
}

142:117
14/12/09 21:45:41.74 KYZ3f1RL.net
void minus():
{}
{
[<HIKU>]sikikakko()
}

void sikikakko():
{}
{
("(" tasuhiku() ")"
|atai())
}

void atai():
{}
{
<SUUZI>
}

143:デフォルトの名無しさん
14/12/10 06:22:59.98 ICK0nNNi.net
荒らされてるなぁ・・・

144:デフォルトの名無しさん
14/12/10 14:14:42.32 lFxVBhH5.net
>>136
文法作るのはものすごく難しいんだよ。
同じ文書を受理する複数の文法が存在し、複数の間で優劣がある。
しかも、優劣を機械的に評価することが難しい。

「こいつを使えば簡単にできる」というようなソフトウェア紹介を見かけると
思うけど、そんな魔法の杖みたいなソフトは無いから。
そういうこと言ってる人は、付属してきたサンプルを動かして簡単といってるだけ。
信じちゃだめだ。

構文解析器の生成系を自分で作れるようにならないと文法を作れないと思っていい。
少なくともその程度の理解は必要。

まずドラゴンブックを買ったらどうかと思うんだが。

145:デフォルトの名無しさん
14/12/10 14:18:41.54 lFxVBhH5.net
まずドラゴンブックを買う。
実際に作ってみる。

この作ったものは実用にはならないよ。
テーブルが大きすぎるからね。

それでも作ることが重要。

その後に、市中に出回る生成系を使ってみたらどうだろう。
俺はこの順番が良いと思うよ。

中身の動作を知らないと使えないって、ツールとしては下等だけど、
今はまだその程度の世界なんだよ。

146:117
14/12/10 16:50:00.17 pQyEQrGQ.net
>>139
私のことだったら荒らそうと言うつもりは全くありません。
でも荒らしに見えてしまっていたならすいません。

>>140-141
ドラゴンブックってこれのことですかね?
URLリンク(www.amazon.co.jp)
(私にとって)安くないですし今そこから勉強している余裕はないので・・・。
すいません。

よそでパーサジェネレータ使った方がいいとか言われて、
Javaが好きなどの理由でJavaCCを使うようになりました。
なんにせよ周りに作ったことある人とかいないので、
URLリンク(www.sbcr.jp)
とか
URLリンク(item.rakuten.co.jp)
とか片手に独学でやってます。

147:デフォルトの名無しさん
14/12/10 17:17:43.47 lFxVBhH5.net
>>142
そこが勘違いなんだよ。

JavaCCを使うにはJavaCCを作れる程度の知識が必要。
だからドラゴンブックが必須。
ドラゴンブックは決して読みやすい書籍ではないよ。
どうとでもとれる表現がいくつもある。
読み解きながら理解する必要があるので、結局生成系を自分で一つ書き上げる必要がある。

「JavaCCを使えば知識がなくてもこんなに簡単」的なことを書く人は
実はJavaCCを使っていないんだよ。
そこに騙されてはいけない。
文法を作るには深い理解が必要なんだよ。
簡単にできる方法はない。

148:デフォルトの名無しさん
14/12/10 18:27:22.40 eXNtCHKb.net
誰か別の人にやってもらえばいいんだよ。クラウドソーシングとかあるじゃん。

149:デフォルトの名無しさん
14/12/10 21:11:35.37 Lctd7lUm.net
荒らされてるんじゃなくて話題がなさすぎるから一人が専有してるように見えるだけだろ?

150:117
14/12/10 21:46:27.74 pQyEQrGQ.net
>>143 >「JavaCCを使えば知識がなくてもこんなに簡単」的なことを書く人は そこまで言われたことはないです。 一番最初は文字列を自分で解析するところからやろうとしてましたけど、 パーサジェネレータを知ってからわたしにとってはそっちの方が楽だと感じています。 ここで質問したこと以外でも詰まったりもしましたけども、 もし構文解析ツールを1から作っていたらきっとここまでたどり着くまでにもっと詰まっていると思います。 >>144 すいません。 実はこれ卒業研究なので・・・。 自分で作ってみたい→卒研のテーマに悪くないよね? な感じで決めてしまったテーマです。 >>145 連投とかしすぎましたかね・・・;



152:デフォルトの名無しさん
14/12/10 21:57:46.01 dcz7kjCK.net
指導教授に聞けば。

153:デフォルトの名無しさん
14/12/10 22:28:57.42 ZSLSh1LL.net
www

卒研なら自分で考えいw

154:デフォルトの名無しさん
14/12/10 22:32:59.96 eXNtCHKb.net
>>146
まさか卒業研究の本体がなんの新規性もない構文解析なわけじゃないだろう。
それが本質的な部分じゃなければ人に手伝ってもらうのもありだよ。

もし、構文解析そのものが君の卒業研究なら……
楽してでっち上げるという考えは即座に捨てて、143のいうようにちゃんと勉強して理解しな。

155:デフォルトの名無しさん
14/12/10 22:55:57.69 Lctd7lUm.net
卒研かよ
フォローして損した

156:117
14/12/10 23:23:29.27 pQyEQrGQ.net
>>147
Javaの研究室ではありますけど、先生は構文解析などの経験はないそうなので・・・。
ゼミのときに負の数と引き算の問題も一応聞いてみたんですけど、
残念ながら大したアドバイスをもらえませんでした。

ちなみに、研究室ではネットワーク関連のことやってる人が多いです。

157:デフォルトの名無しさん
14/12/10 23:27:11.16 bWIayA6r.net
うーん、その卒業研究、どこか新規性あるの?

158:デフォルトの名無しさん
14/12/10 23:46:18.31 lFxVBhH5.net
文法を作ることの難しさを理解できていないんだよ。
嘘ではなく、本当に難しい。

実用性は無くとも理論通りに動作する生成系を自分で作るのは絶対必要。
遠回りに見えるだろうけど、これが最短の道なんだよ。

「俺の考えた言語」の文法をきちんと作れるなら、生成系程度すぐ作れる。
その逆は無いよ。

何か考え違いをしてるんだと思う。
文法程度すぐ作れるけど、生成系を作るのは難しいと思っていそう。
まるっきり逆。

159:デフォルトの名無しさん
14/12/10 23:48:44.51 lFxVBhH5.net
さらに言えば、理論通り動く生成系を作っても、それは実用性を持たない。
学習のために作るんだ。

実用には、既存の生成系を使うんだよ。

そういう順番が良い。

160:117
14/12/11 00:04:58.83 TxaNdaYp.net
>>148 >>150
すいません・・・。

>>149 >>152
"こういうところが新しいです"
と言える自信はありません・・・。 すいません。
一番の理由は"自分で作ってみたい"と思ったからです。
あと、先生に止められることもなかったですし。
構文解析が目的と言うよりは、半分ノリで付けてしまったテーマが
「初めでも使いやすい日本語で書けるプログラミング言語を作る」
なんてテーマです。
"日本語なら初めてでもとっつきやすいかな?"なんて安易な考えで
「初めてでも」なんてつけて付けてしまいました。
構文を考える上で自分で後悔してたりします;

>>153
文法を考えるのも構文規則を作るのも楽なものではないと思ってます。
それよりも構文解析器を作るほうが難しそうと感じてしまっているのは事実です。

161:デフォルトの名無しさん
14/12/11 01:55:24.44 pP5Pqqse.net
>>153=154が優しく言ってくれてる
あなたが本当に本気なら明日にでも図書館行って、ドラゴンブック借りるといいよ
難しいけど必ず価値はあるから

162:デフォルトの名無しさん
14/12/11 06:06:17.74 sSshpgwI.net
数学の知識もないのにアンチョコ片手にMathematica使えば何でもできると思ってるようなもんだな。まあ、無理。

163:117
14/12/11 07:22:36.95 TxaNdaYp.net
>>156
プログラミングの棚にはなかったと思うんですけど、
とりあえず今日大学の図書館探してみます。
「ふつうのコンパイラをつくろう」の方は図書館にも置いてあったので。

164:デフォルトの名無しさん
14/12/11 07:41:13.71 JXHpp2tS.net
空気読め

165:117
14/12/11 17:45:33.30 TxaNdaYp.net
ドラゴンブックは残念ながら大学の図書館にはありませんでしたが、
市内(他区)の図書館にはあるとのことなので取り寄せて読みます。
1万円ほどの本を買うには残念ながらお金がないもので・・・;

他に大学にあった以下のコンパイルの本び中でおすすめってありますか?
コンパイラの基礎 / 徳田雄洋著
命令レベル並列処理 : プロセッサアーキテクチャとコンパイラ / 安藤秀樹著
コンパイラ入門 : 文法から設計・製作まで / 小田一博著
Cコンパイラ設計 : yacc/lexの応用 / A.T.シュライナー,H.G.フリードマン 著 ; 矢吹道郎 〔ほか〕訳
超並列処理コンパイラ / 村岡洋一著
コンパイラ / 疋田輝雄 著
DIANA入門/言語仕様/応用 : Adaコンパイラ実現のための中間言語
やさしいコンパイラの作り方 / 中西正和 共著 ; 大野義夫 共著
新言語作成の技法 : オリジナル・コンパイラ / 大貫広幸 著
N88日本語BASIC(86)コンパイラ活用法 : Personal computer MS-DOS版 / 肥田野登 著
コンパイラの技法 / 中田育男 著
コンパイラのうちとそと / 島内剛一ほか共著
コンパイラの設計と構築 / Arthur B.Pyster 著 ; 松尾正信 訳
コンパイラの技法 / F.R.A.ホップグッド著 ; 首藤勝, 関本彰次共訳
コンパイラ構成法 / 原田賢一著
コンパイラ : プログラム言語処理の基礎 / 井上謙蔵著
コンパイラ設計技法 : 理論と実践 / T. ピットマン, J. ピーターズ著 ; 今泉貴史訳
dBASE ・ PLUSコンパイラ & アセンブラ ゜ / 桑村幸雄,池端良一 著. -- 2版
コンパイラ・コンパイラ / 井上謙蔵著. -- 産業図書, 1970.
Let's C(Ver3.0)プログラミングハンドブック : MS-DOS用Cコンパイラ / PMC研究所 編
やさしいコンパイラの作り方 / 中西正和,大野義夫 共著
Microsoft QuickC コンパイラ Ver.2.0 ランタイム ライブラリ リファレンス
コンパイラ作成の技法 / David Gries著 ; 牛島和夫訳
コンパイラ / 中田育男著

166:デフォルトの名無しさん
14/12/11 18:35:53.94 yZEE5pFs.net
文芸的なcobol+日本語ななでしこ?
>>160
あるなら手にとって読んでみればいいのに
アドバイスはできないすまん

167:デフォルトの名無しさん
14/12/11 18:43:18.72 tbxqmm74.net
>>160
中田先生の本は良い本(というか国内で学者が書いてる数少ない本)
買うかどうかとは別に読んで損はしない。

先生は多忙なのか執筆が遅いので最新を追うとちょっと遅れるけど

168:デフォルトの名無しさん
14/12/11 20:08:42.05 O2yGUM7o.net
>>143
んなアホな

169:デフォルトの名無しさん
14/12/11 20:21:08.66 ED9Fc+9a.net
中田本は結構いいね。でもドラゴンブックも読んどくべきだけどね。

170:デフォルトの名無しさん
14/12/11 20:26:34.20 URNWWvBk.net
ドラゴンブックに限らずあの手の堅い文章は頭に入りにくい

171:デフォルトの名無しさん
14/12/11 20:51:29.95 HAPX7Bnj.net
>>162
> 先生は多忙なのか執筆が遅いので最新を追うとちょっと遅れるけど

まだ執筆してるの?
最初に買った真っ白表紙のコンパイラなんて 30年以上前だったのに

172:デフォルトの名無しさん
14/12/11 20:58:28.23 hXJaCtwW.net
やさしいコンパイラの作り方と
コンパイラのうちとそとは
読み物として面白い。
でもたぶん(今じゃ)なんの役にも立たないw

173:デフォルトの名無しさん
14/12/11 21:22:50.68 tbxqmm74.net
>>166
2011年が最後かな
言語実装パターン ―コンパイラ技術によるテキスト処理から言語実装まで
ってのをオライリーから共著で出してたはず

でも一番読み応えあるのは1999年発行の
コンパイラの構成と最適化
だと思う、この本はドラゴンブックと一緒に是非買うべきって


174:言っても良い



175:117
14/12/11 21:35:13.25 TxaNdaYp.net
>>161
>文芸的なcobol+日本語ななでしこ?

cobolやなでしこは使ったことないのでわかりませんが、
私は英語を用いた言語よりはわかりやすいと思います。
コメント文での説明が要らないかどうかは作るものによりますけど。

>あるなら手にとって読んでみればいいのに

いろんな図書館に点々としてるそうで、
中にはどこにあるのかわからない図書館にある本だったりも・・・;
ちなみに、上げた24冊のうち私の工学部の校舎にある図書館に絞ると3冊しかないそうです。

>>162 >>164
中田先生の本読んでみます。
ドラゴンブックの方も取り寄せが届いたら読みます。

>>167
面白いならその2冊も読んでみます。

176:デフォルトの名無しさん
14/12/11 21:37:16.34 Q8kAUXaJ.net
>>167
> やさしいコンパイラの作り方と
> コンパイラのうちとそとは
> 読み物として面白い。

両方読んだ気がするが、内容覚えてないわ

> でもたぶん(今じゃ)なんの役にも立たないw

色々な人を呼び込むと言うのも、重要な役目だと思う
誰か「漫画で読むコンパイラ」とか書かないかなぁ w

177:デフォルトの名無しさん
14/12/11 21:40:57.95 KrH9mSC/.net
まともにやる気あるなら、その中のどれでも一つ真剣に取り組めばいいよ。

迷うのはそれからでも遅くない

178:デフォルトの名無しさん
14/12/11 21:42:20.07 tbxqmm74.net
>>170
麻宮騎亜がアップを始めたようです。

179:デフォルトの名無しさん
14/12/11 21:57:20.15 JvQXLAia.net
CPUの創り方が萌えキャラで出る時代だから
コンパイラ版が出る日も近いな

180:デフォルトの名無しさん
14/12/12 03:52:20.71 yYnp70gr.net
疲れた時は白と黒のとびらとか。読み物だけど

181:デフォルトの名無しさん
14/12/13 11:59:00.15 KEKavmkB.net
>>168
共著じゃなくてAntlrの作者が書いた本の監訳だよ

182:名無しさん@そうだ選挙に行こう
14/12/13 19:31:14.67 LmsGKyNP.net
正直ドラゴンブックって内容はともかく説明はとても優しいよね
洋書はIT系に限らず懇切丁寧な事が多いと思う

183:名無しさん@そうだ選挙に行こう
14/12/13 22:13:39.97 aWFoLZL3.net
虎も仲間に入れてやってください
サンプルがアレだが

184:デフォルトの名無しさん
15/01/19 11:19:23.48 cYd/ZsDZ.net
kmoriさん亡くなったって。

185:デフォルトの名無しさん
15/01/19 11:34:19.54 CzsUjspG.net
yaccの一実装書いてた人か。南無

URLリンク(web.archive.org)URLリンク(d.hatena.ne.jp)

186:デフォルトの名無しさん
15/01/19 15:30:26.84 cYd/ZsDZ.net
kmyaccも有名だが、「LSI-Cの作者の一人」だった。

187:デフォルトの名無しさん
15/01/20 21:04:04.33 wHr1vYS1.net
熊ヤックと読んでいた

188:片山博文MZ ◆T6xkBnTXz7B0
15/02/18 16:40:51.07 9VF3MRJc.net
C++11の正規表現でCのスキャナーをスマートに書きたい。
しかし、コメントの扱いがややこしく、また、行番号の情報を取得する必要がある。
一行ごとに読み込むべきか、従来どおりトークンに切り分けて読み込むべきか。
全部をいっぺんに読み込んで'\n'でsplitする方法は実行時のメモリーと時間がかかると思う。
どういう戦略にすべきか?

189:片山博文MZ ◆T6xkBnTXz7B0
15/02/18 17:03:37.74 9VF3MRJc.net
改行に特別なトークンを割り当てて、すべてのトークンを読み
込んだ後でトークンに行番号をつけてから改行のトークンを取り除くという
方法についてはどう思いますか?

190:デフォルトの名無しさん
15/02/18 21:19:15.31 po3oOzQK.net
Cってマクロとかインクルードとか有るん?

191:片山博文MZ ◆T6xkBnTXz7B0
15/02/19 01:08:43.02 XXveEoOV.net
マクロやインクルードは、プリプロセッサーがやってくれるよ

192:デフォルトの名無しさん
15/02/19 12:19:19.08 b9Ke1XGw.net
プリプロセッサーの展開後の行番号って要るのかね?

193:デフォルトの名無しさん
15/02/19 19:51:00.22 rp3PUwqb.net
無かったらエラー表示するとき不便だろ

194:デフォルトの名無しさん
15/02/19 21:27:05.57 wg16DBik.net
展開後の行番号の方がいらなくね?
プリプロセッサ文てコンパイラ側でも処理するよね?
#line とか

195:デフォルトの名無しさん
15/02/19 21:31:56.28 uOq48O3O.net
コメントはプリプロセサで置き換えたらいかんのか

196:デフォルトの名無しさん
15/02/21 01:08:42.33 XnZFjwve.net
SmalltalkのVM上にJavaVMを構築してんだけど、
VMの話もここで良いんだよね。

197:デフォルトの名無しさん
15/02/21 12:59:06.48 eVOI8zE3.net
OK

198:デフォルトの名無しさん
15/02/21 23:58:08.89 bst4VCEg.net
>>182
Cのスキャナって正規表現だけで表現できるんか?(構文解析しないで良いエディタのhilightingとかは大丈夫だけど)

199:デフォルトの名無しさん
15/02/22 01:27:09.68 0QFgdJ2i.net
>>191
了解。
SmalltalkのVM上でDalvik VM用のclassも動かしたいんですが、
いちいちDalvik用のVMまで作るのがメンドイです。
Dalvik用のclass形式からJavaVM用のclass形式に変換するオススメのLibraryを教えて下さい。
Libraryの言語はSmalltalkに書き直しますので何でもいいです。

200:デフォルトの名無しさん
15/02/23 17:30:23.57 FikKUZMK.net
>>192
scannerってlexerの一部。
lexer=scanner+tokenizer

201:デフォルトの名無しさん
15/02/23 17:38:19.44 FikKUZMK.net
>>193
JEBはDalvikのdecompilerだから、コンパイルすればJVMのbytecodeに出来る。
URLリンク(www.pnfsoftware.com)

202:デフォルトの名無しさん
15/02/23 17:41:10.47 FikKUZMK.net
javaで書いたDalvikのVM
URLリンク(www.eflow.jp)

203:デフォルトの名無しさん
15/02/23 22:14:05.07 Fe2dvIpV.net
C++で完結するって所に惹かれてboost::spiritを試してみたが…、これは死ねる。

204:デフォルトの名無しさん
15/02/24 01:43:04.58 f8A7qwV2.net
共通部分式の除去のやり方がわかんねえ
定数伝播、四則演算も含む組み込み関数の畳み込み、使わない変数の除去、
ループ展開等を同じパスでやってるんだけど
共通部分式の除去とそれをやるのに必要な不変式の判定はまた別でやった方がいいのかな
不変式かどうかはループ最適化でも使えそうなんだけど混乱してきた

205:片山博文MZ ◆T6xkBnTXz7B0
15/02/24 08:04:58.95 UGr8Bbp/.net
>>198
ある計算式eについて、eの部分式を互いに参照するエントリーとして再帰的にテーブルに登録する。
登録するときにソートと重複チェックを行えば、テーブルは一意化できる。
テーブルの各エントリーの参照構造は、木構造のノードを成す。

206:デフォルトの名無しさん
15/02/24 11:33:08.23 wemgVVUb.net
>>198
式の属性に関する再帰方程式の近似解をニュートン法のように求めること、
これがデータフロー計算解法の本質と理解できてないんじゃない?
ドラゴンブックのavailable, killedの説明の所読んでみれば?
同じパス内でループしながら収束するまで計算するのよ。

207:デフォルトの名無しさん
15/02/24 11:35:18.85 wemgVVUb.net
ドラゴンブックのどの節か書こうとしたけど本が見つからない...
とりあえず、ここのp.10から。
URLリンク(dragonbook.stanford.edu)

208:デフォルトの名無しさん
15/02/24 17:44:49.00 H95vOz7j.net
>>199
そのテーブルに式を入れるときその式が不変かどうかを判断する部分でわからなくなってくる
>>200
ほとんど読んでないドラゴンブック見たら最適化部分についても書いてるな
これ読むの辛いな
頑張って読んで出直すか

209:デフォルトの名無しさん
15/02/24 17:53:23.22 avE+zAm1.net
多分ちゃんと読んだ方がかえって早い。
共通部分式A,Bがあって、例えばBの方の除去をやると、
Bの到達性がAの到達性にも付与される。
このことは他の属性に影響を及ぼしうる。
よってもう一度計算をしないとより正確な属性を求められない。
以下ループ。
よって収束するまで繰り返すことになる。

210:デフォルトの名無しさん
15/02/24 18:04:39.54 H95vOz7j.net
変化がなくなるまで最適化処理を繰り返すのはわかった

211:デフォルトの名無しさん
15/02/24 19:26:42.04 wUDy2moe.net
>>197
コンパイル時間がか?

212:片山博文MZ ◆T6xkBnTXz7B0
15/02/24 20:45:40.84 UGr8Bbp/.net
__declspecとか__attribute__などをパースできないと正確な構造体型のサイズ
を求めることができない。しかしattribute周りの文法がメチャクチャやなあ。

213:片山博文MZ ◆T6xkBnTXz7B0
15/03/03 01:05:04.60 t6l1EelO.net
次は"typed value"の扱いだな。定数にも型がある。型付きの値を
扱えなければ、正確な定数値を求めることはできない。

214:デフォルトの名無しさん
15/03/03 04:49:45.03 ZU1MaIS8.net
最適化なんてイラナイよね、何処まで処理系に依存する気なんだよw

215:デフォルトの名無しさん
15/03/08 14:52:45.39 u8r5MR2m.net
初心者だがHSPって凄いね
自分でHSPみたいなの作ろうとすると途端につまづくw
内部でメッセージハンドルに登録していく言語だと思うんだけど
こんなにwinを感じさせない文法でwinと親和性高く作れるとは

216:デフォルトの名無しさん
15/03/08 17:15:18.44 8c6PRT7L.net
ランタイムの機能の量で躓くならともかくあの文法でつまづくなら>>1で概要把握して本読めば

217:デフォルトの名無しさん
15/03/09 14:52:03.75 MIZIuI1f.net
文法とOSに何の関係が?

218:デフォルトの名無しさん
15/03/09 16:12:25.65 J8WIpDef.net
いただきジャンガリアンに辛酸をなめさせられたのだろうよ

219:デフォルトの名無しさん
15/03/09 17:25:40.74 VM1FVYaf.net
うーん初心者だから言い方わかんないんだけど
コマンドプロンプトのスクリプトってコマンドに従って単に実行していくだけだよね
でもwinだと実行されるのは素直に考えるとメッセージが来たとき
cでウインアプリつくるときはメッセージ毎に処理を書くけど上から順に読むスクリプトは
それはできないわけだからどう整合性取るのかなってことで悩んでた
結局メッセージ毎にリストがあってコマンドを読んだらそのリストに関数ポインタ名で追加、
メッセージ毎に呼ばれる関数はその種別のリストを上から順に実行していく
こんな感じで作ったけどこれでいいのかな

220:デフォルトの名無しさん
15/03/12 21:28:48.21 BlO2EFmA.net
そりゃ文法じゃなくて実行モデルだな。
イベント駆動ってことでしょ。

221:デフォルトの名無しさん
15/04/13 21:09:38.60 qtTodoaL.net
「Cのコンパイラなら何日かかけて作っても良いが、C++は、一人で
作るのは嫌だ。文法をきちんとカバーするのに日数がかかりすぎるから」
と言われたよ。

222:デフォルトの名無しさん
15/04/22 02:22:50.19 eOWj6Ffd.net
javaに近い構文の言語をつくろうとしてるんだけど、
ようやくchar配列に変換したソースから関数の外側を構文解析できた。
山括弧<>、文字列リテラル、コメントに気をつけつつ、
なんとか関数の中を無視してクラス・変数・関数の名前や型名を取得して
関数の中身にとりかかるところ。
関数の中身は丸括弧()が難関になりそう。
AAAA bbbb = ((HHHH)cccc.dddd.eeee(ffff.gggg(), jjjj)).iiii();
bbbb.kkkk = -10/(8-3)-9/-3

223:デフォルトの名無しさん
15/04/22 20:33:48.48 rBARkljm.net
>>216
まるで違う言語に見えてしまうのだが。

224:デフォルトの名無しさん
15/04/22 21:30:55.14 eOWj6Ffd.net
>>217
最初はクラス名、メンバ変数、メンバ関数を全部調べてからじゃないと
関数の中身に取り掛かれないと思ってた。
でもクラス名・変数名・関数名に区別は不要で、記号をヒントに階層を分解して、
それから型名の存在の有無・整合性を調べるという風にフェーズを分けれそう。
でも()が演算の優先順位、型キャスト、メソッド...どれに使われているのか
区別できるかは不安。for文とかは最初に予約語が入るからやりやすそうだけど。
Person person = ((Factory)group.cache.getFactory(provider.getResource(), url)).create();
person.id = -10/(8-3)-9/-3;

225:デフォルトの名無しさん
15/04/22 22:59:19.66 LKLiXgla.net
いまいち分からないけど、識別子の次にあったら関数呼び出しで
それ以外は式とかでいけないの

226:デフォルトの名無しさん
15/04/22 23:28:51.38 eOWj6Ffd.net
いけるか分からない。とりあえずやってみるってところ

227:デフォルトの名無しさん
15/04/23 08:14:58.39 +O6VWDUu.net
>>219
構文次第
てか、普通識別子に続くカッコを見て初めて関数/メソッドってわかるわけだし

228:デフォルトの名無しさん
15/04/27 01:02:40.49 RiYFohCl.net
メソッドの中が上手くいかんというか何から始めたら良いのか分からん
コンパイル速度が遅くなるけど、分解フェーズを何層にも分けて
何度もループで調べていけば良いのかな

229:デフォルトの名無しさん
15/04/27 06:59:39.15 EFAP6joI.net
コンパイラの教科書の一冊でも読んで構文解析を勉強してみ

230:デフォルトの名無しさん
15/04/27 09:38:16.26 ZDDsb7dY.net
C系のクソみたいな構文ルールをそのまま真似てどうすんの
自作なら作りやすいようにキーワード追加すればいいのよ
キャスト式にキーワード付けなかったのは最大の誤りの一つ

231:デフォルトの名無しさん
15/04/27 09:56:10.90 qDIHhHi0.net
SSA形式からスタックマシンのコード生成の最適化みたいなのに参考になる文献ってないかな?

232:デフォルトの名無しさん
15/04/27 14:22:00.53 RiYFohCl.net
>>224
そうだね。HaxeとかFlashからぱくって、C形式のキャストは無くしてみるわ
int i = cast Integer ( 0.005f );
int i = 0.005f as Integer;

233:デフォルトの名無しさん
15/04/28 18:20:14.24 PlNb5vya.net
最終的に何を目指そうかしら
1)LLVMで動かす 
→ 超難しそう
2)Luaのように組み込みスクリプトとして動かす 
→ 重そう。メモリ管理は全部ウィークポインタで良いのかな
(C/C++組み込みならnew&deleteするようなスクリプトでも良さそう)
3)JavaScriptなどに変換 
→ たぶん例外のバックトレースとかを変換するデバッグ環境が必須

234:片山博文MZ ◆T6xkBnTXz7B0
15/05/05 23:02:55.34 p1RbtT4Y.net
コンパイラーの品質保証は、数学で証明する時代だ!!!
Coqと数学でコンパイラーが作れる!!!
URLリンク(compcert.inria.fr)

235:デフォルトの名無しさん
15/05/09 18:57:31.49 SYpntI8c.net
バイトコードインタプリタつくっているんだけど
スタックマシンのコンパイラについて
パラメータスタック(データスタック)はヒープ上におくべき?
それともネイティブの領域におくべき?

236:デフォルトの名無しさん
15/05/09 19:41:52.28 SYpntI8c.net
>>229
訂正
コンパイラー>仮想機械

237:デフォルトの名無しさん
15/05/09 20:41:51.08 DhZyBtDK.net
>>230
ネイティブスタックにデータも置くって事だよね?
データスタックは分けておいた方がイロイロ楽だったので列挙
たしかこんなの
GC使う様な実装の時の仕分け
実行パスがJITでコンパイルコードと非コンパイルVMコードの行ったり来たりするとき
例外のスタックトレース(これもJIT時のアレコレあり)
チープマシンにVM仕込むときアセンブラで書くのが楽しい
最後はちげぇけど

238:デフォルトの名無しさん
15/05/09 21:02:43.06 SYpntI8c.net
>>231
自分のVMは典型的なスタックマシンで
パラメータスタック(データスタック)とコールスタックは別です。
そのうちデータスタックをヒープ内におくか
アセンブリでかかれたほうのネイティブの領域におくかってことです。
ネイティブ領域においたほうが実際のアドレスとVM上でのアドレスの変換がないので
速度としては速いのですが
欠点としてバイトコードからスタックを参照することができません
焦点とてしてはそもそもバイトコードからスタックを参照することがあるのかということで、
基本的になければネイティブ領域におこうかとおもっています
これまでつくった経験がないので設計としてどちらがよいかわからずお聞きしました

239:デフォルトの名無しさん
15/05/10 09:31:50.02 ZQGgJB6p.net
>>232
> 焦点とてしてはそもそもバイトコードからスタックを参照することがあるのかということで、
バイトコードの設計は終わってるんじゃないのか?
バイトコードの設計終わってりゃ参照の必要があるかどうかはわかってるだろうし、バイトコードの設計終わってないのに VM の構成考えてるならお前が終わってる

240:デフォルトの名無しさん
15/05/10 09:50:11.77 YKkUWNQO.net
>>233
その通りわ
出直して来ます

241:デフォルトの名無しさん
15/05/19 18:50:21.34 a+aajTcz.net
番兵の文字は
utf-8でも16でも32でも-1でいいんですか?

242:デフォルトの名無しさん
15/06/24 17:14:03.39 ZsIPeucp.net
動的型付けってLLVMだとどうやって実装するんだろ

243:デフォルトの名無しさん
15/07/10 19:59:28.32 h+kJ9m+3.net
構文解析+Cに変換して内部でgcc呼んでコンパイルするプログラムはコンパイラって呼んでいいの?

244:デフォルトの名無しさん
15/07/10 20:11:15.28 tLjH7MQJ.net
トランスレータじゃねえの

245:デフォルトの名無しさん
15/07/11 08:23:11.34 SvdcMd32.net
>>238
変換したCコードを出すならトランスレーターだけどバイナリまで出すならコンパイラーでいいだろ

246:片山博文MZ ◆T6xkBnTXz7B0
15/07/28 03:30:13.81 92wk7rzR.net
果たして文法を仮想化できるか

247:デフォルトの名無しさん
15/08/19 08:24:37.58 zh/OeKTd.net
凄いこと発見したんだけれどもΛの記号は上の尖がったところがルートで
下の二つの棒が辺を表しているんだな

248:デフォルトの名無しさん
15/08/19 22:05:03.04 caRlC37E.net
言語非依存の仮想マシンっていうアイデアがいまいち大成功していないように見えるのって
なんか理由があるのかな。

249:デフォルトの名無しさん
15/08/19 22:59:51.18 7Z0FzJPx.net
落ちてたllvmスレを立て直した
【最速へ】LowLevelVirtualMachine 2【LLVM】
スレリンク(tech板)

250:片山博文MZ ◆T6xkBnTXz7B0
15/08/19 23:17:16.98 ynuNSl9L.net
>>242
めちゃくちゃ成功してまんがな。LLVM,clang知らないの?

251:デフォルトの名無しさん
15/08/20 00:06:05.42 BI1Ot8hx.net
>>244
実際に成功していても成功していないよ・う・に・見・え・るって話


252:じゃないの? XCodeのコンパイラがllvm,clangだってのは開発者にしか見えないしclangの話だけ聞いているとgccが組み込み機のCPUに対応してたころみたいに派手に活躍してるとは感じられないって事じゃ無いの?



253:デフォルトの名無しさん
15/08/20 04:55:31.33 uOqBPetd.net
たぶん外国には、CASL2のような仮想アセンブラを使う、
情報処理試験が無いのだろう
2人の大学生が作ったLLVMに、Appleが飛びついた。
それで、Lattner はAppleに就職した

254:デフォルトの名無しさん
15/08/20 11:06:47.70 XXXu8/KU.net
良く言えば新世代の輝き
悪く言えば発展途上の不安定さ
さらに組み込みで言えばカバー範囲の幅広さは犠牲にされがち
将来性でメシが食えるのはごく一部

255:デフォルトの名無しさん
15/08/20 11:31:12.43 WmW0wMbd.net
痛い文章だ

256:デフォルトの名無しさん
15/08/24 00:47:20.35 OjRQ25eS.net
マルチメソッドを効率よく実装するにはどのようにすればよいですか?

257:デフォルトの名無しさん
15/08/24 01:10:40.39 YG1kZeuQ.net
マルチメソッドって何?

258:デフォルトの名無しさん
15/08/24 01:36:14.61 OjRQ25eS.net
OOPの最も基本的な機能です
引数によって、メソッドが切り替わります
多態といいます

259:デフォルトの名無しさん
15/08/24 02:01:55.26 YG1kZeuQ.net
オーバーロードのことですか?
ではマングリング

260:デフォルトの名無しさん
15/08/24 02:21:03.16 OjRQ25eS.net
マルチメソッドはオーバーロードでは無いです
一般にオーバーロードは静的ですが、
マルチメソッドは動的です

261:デフォルトの名無しさん
15/08/24 08:00:36.10 WVPITNbu.net
>>251
> 引数によって、メソッドが切り替わります
はい?

262:デフォルトの名無しさん
15/08/24 08:19:25.57 jJXNOMmM.net
clojureのdefmultiみたいな奴じゃないの?

263:デフォルトの名無しさん
15/08/24 11:49:46.23 BYoao/vR.net
多重ディスパッチのニッチな要求に応えるものか
それとも単純な動的バインディングだけの問題なのか

264:デフォルトの名無しさん
15/08/26 18:36:02.43 XR0u/yGZ.net
マルチメソッドはC++相談室を検索すればなんなのかがわかる

265:片山博文MZ ◆T6xkBnTXz7B0
15/08/30 17:45:45.69 bYlp1Mb/.net
>>249
パターンマッチを効率よく行う

266:デフォルトの名無しさん
15/08/30 19:15:42.50 nhXJHOe7.net
型を連想配列やトライ木で管理すればO(1)

267:デフォルトの名無しさん
15/08/30 20:08:17.93 brcjELIg.net
>>259
clojureはソレだね

268:デフォルトの名無しさん
15/09/17 12:38:19.48 mHCGeegj.net
中間言語の設計に関するノウハウとかアンチパターンとかが書かれた本誰か知ってる?
LLVMとかP-codeとかJava VMとか、あるいはKnuthのMIX/MMIXみたいな機械語に近いレベルの言語を
ソフトウェア実装すること前提に設計する場合について知りたい。
今言語設計してて、そろそろ構文解析できそうだから学んでおきたいんだけど。

269:デフォルトの名無しさん
15/09/17 19:56:34.99 7ftMaB4B.net
最初はネイティブに落とした方がいいぞ
中間言語とか遠回りしてたらアホみたいだぞ

270:デフォルトの名無しさん
15/09/18 15:07:01.58 QAQ6VXx0.net
そんな物他人に教わるくらいならおとなしく既存のを使っとけ

271:デフォルトの名無しさん
15/09/18 20:35:24.73 F4ynHS7Z.net
本として出して需要あるか?もしかしたらサーベイ論文なら探せばあるかも

272:261
15/09/18 21:16:12.07 ArWsl8Ey.net
>>262
素直にコンパイル出来ない言語を設計してるので(clispのような)、snippetの表現をx86/amd64表記にする意義が薄いんですよね。
>>263
凝り性なもので。
>>264
一応ciniiは一通り眺めたけど、中間言語の設計に関する論文って無いんですよね。
素直に


273:「中間言語」で調べると自然言語の翻訳に使う方が大量に引っかかってつらい……



274:デフォルトの名無しさん
15/09/18 22:17:11.93 i7DEL3du.net
>>265
動的型付け必須系?
ならErlangの論文とか資料あさるといいかも

275:261
15/09/19 09:19:04.79 YlOPp2hb.net
>>266
swiftのように演算子をユーザー定義出来て、
c++のように同名異引数の関数を定義出来て、
Lispのように引数間のカンマが要らず、
Rubyのようにカッコを省ける
そんな言語を設計中です。
それらの両立のために実行中に文法を書き換えて構文解析器を再構成するという手法を採ってるので、コンパイル出来ないんですよね……
clispのリードマクロを文脈依存に拡張したものだと言えば大体あってるかと。
ちょっとErlang関連の資料を見てみます。

276:デフォルトの名無しさん
15/09/19 10:26:16.30 7hgo9IJ4.net
>>267
列挙してあることはシンタックス上のことで全部コンパイル時に静的に解決出来そうに見えるけど無理なの?

277:デフォルトの名無しさん
15/09/19 11:29:33.20 I9CWDfzW.net
>>267
コンパイル時の都合だよね?
VMの設計とはなんの関係もなさげなんだけど

278:261
15/09/19 12:48:32.00 YlOPp2hb.net
>>268
今考えてる言語では、演算子の扱いが関数を引数の場所に関して一般化した第一級オブジェクトなので
前置引数の個数や後置引数の個数は実行してみるまで分からないので
コンパイル時の識別子を用いた構文解析は無理です。
前置演算子と一引数関数が別物って変だと思ったのでそうしました。
c++風に書くと、こんな感じのが通るイメージです。
g = [](a,b){return a - b;};
if (複雑な式) {
 f = [](a|b,c){return a + b + c;}; // (a|b)で前置引数としてa、後置引数としてbと示すものとする。
} else {
 f = [](a,b|c){return a + b + c;};
}
// gは2引数演算子、fは3引数演算子。
// ここではgの優先順位はfより低いものとする(c++での表現方法が無いので)。
// カッコやカンマを省いてある場合、上の条件のどちらが走っても構文上は受理される。
// 複雑な式の結果によって、これはg(1, f(2, 3, 4))及びg(f(1, 2, 3), 4)のどちらにもなりうる。
cout << (g 1 2 f 3 4) << endl;
>>269
そういうわけで一度に全部読み込んでコンパイルしてから実行するという事が出来ないので、
折角だからVMも設計しようと思った次第です。
ASTから中間言語に落とすとcontinuationの実装が楽になるので。

279:デフォルトの名無しさん
15/09/19 13:15:38.32 hJISNbn0.net
g 1 2 f 3 4は構文解析後にはどういうツリーになっているの?
フラットなままで構文解析終えて実行時にまたプチ構文解析をするの?

280:261
15/09/19 13:24:30.87 YlOPp2hb.net
>>271
字句解析でばらばらにしてLL(1)でカッコの対応等について解いた背の低い木にして、その後実行時にLR(1)で式毎に再度解析するので
> フラットなままで構文解析終えて実行時にまたプチ構文解析をするの?
これであってます。

281:デフォルトの名無しさん
15/09/19 14:10:09.60 I9CWDfzW.net
おもしろい事かんがえてるなー
ElixirとかBEAM-VMとか参考になるんじゃねぇの?

282:261
15/09/19 15:18:02.65 YlOPp2hb.net
>>273
高信頼・並列分散に特化したVMのようにあちこちで言われてるみたいですね、ErlangのBEAM-VM.
そう考えるとLLVMは解析容易性特化、JVMはVM自体の実装容易性特化といった所でしょうか。
VMを作るなら何かに特化させるべきなような気がしてきました。

283:デフォルトの名無しさん
15/09/20 00:52:44.57 m4tWKm8w.net
演算子に限定する意味は何だろう
cout << (g 1 2 f 3 4) << endl;
こんなの一見して何してるのか判らないしいっそ構文ごと第一級にすればいい
そもそも実行時に構文解析機まで走らせる重い処理系って必要なのかなあ
クロージャじゃあかんのかね

284:デフォルトの名無しさん
15/09/20 09:22:45.62 tHziPwGz.net
この程度のアイデアしかないようじゃ才能ないわな

285:261
15/09/20 11:27:11.87 oZCwg6h7.net
>>275
今作ってる実装だと構文はhead, body, precedence, directionをキーとするオブジェクトの配列になってるので
構文も第一級オブジェクトのインスタンスになっています。
説明不足ですんません。
コードは現在こんな感じ。もし読みたければどうぞ。
URLリンク(gist.github.com)
debug-printが多かったりコメントが少なかったりしますが……
> そもそも実行時に構文解析機まで走らせる重い処理系って必要なのかなあ
必要性については私にはまだ分かりませんが、
私は昔レキシカルスコープもクロージャもポインタも継続もマクロも無い素晴らしく酷い言語(古いBASIC)で全てを考えていたので、
その経験から、どんな機能も使い慣れると必要になってくると思っています。
>>276
私馬鹿なもんで。
いいアイデアがあったら是非とも実現してくだされ。

286:デフォルトの名無しさん
15/09/20 11:30:35.69 O6Xw3ijC.net
>>275-276
俺にも意味があるようには見えないけど、俺の知らない用途があるのかもしれない
とにかくわからないならスルーしとけよ

287:デフォルトの名無しさん
15/09/20 18:18:01.68 tHziPwGz.net
>>277
絶対真似しないと約束するなら教えてもいいぞ

288:261
15/09/20 18:52:58.39 oZCwg6h7.net
>>279
じゃぁ真似せずに似たようなものを考えつくまで考え抜きます。
私馬鹿なので。

289:デフォルトの名無しさん
15/09/20 20:15:16.31 9UpT3677.net
>>274
BEAMは引数のMatchで分ける処理がVMにあるんでそういう意味でオモシロイコト -> BEAM参考になるんじゃねぇのって話です

290:261
15/09/20 21:59:23.12 oZCwg6h7.net
>>281
調べてみました。
BEAMだと実行時にモジュール名、関数名、及び引数の数を指定して呼び出す関数を同定するんですね。
実引数の数がコンパイル時には分かるから命令語に引数の数を組み込めるのだと思いますが……
今考えてる言語だと、実引数の数が自明じゃないので使いにくい気がします。
助言、ありがとうございます。

291:デフォルトの名無しさん
15/09/21 19:55:02.85 x6IKJHaI.net
スクリプト型の言語って実行時にコンパイル(構文解析?)が発生するから、コンパイル型の言語より遅いのですよね。
では、アプリケーションの起動時にスクリプトを読み込んだ後のパフォーマンスは、スクリプト型もコンパイル型も大差ないのでしょうか?

292:デフォルトの名無しさん
15/09/21 20:31:03.01 XzxcjOEi.net
大差あります

293:デフォルトの名無しさん
15/09/21 21:42:55.66 LoRahTLC.net
>>283
「スクリプト型の言語」やら「コンパイル」やらが何を意味してるのかにも依りますが、
よくある速度重視の構成だと、読み込み時に構文解析や意味解析、中間コード生成を終わらせて
実行時に中間コードを(1)実行可能バイナリに変換するパターンと、(2)仮想マシン上でエミュレートするパターンとの二通りがあります。
(1)の場合は変換処理そのものがそれなりに重く、
しかも高度な最適化を掛けるとそれ自体に時間が掛かってしまうので
最適化は殆ど掛けられずコンパイラ型言語の2~3倍は遅くなりますし、
(2)の場合は1命令実行するのに命令を読み込んで比較してジャンプして、
とCPUがアナログ回路上で並列処理してる計算を逐次的に実行するのでかなり重くなります。

294:デフォルトの名無しさん
15/09/22 13:12:55.44 f7gaXzgp.net
比較にならない
スクリプトは柔軟性重視なので速度を出すためのチューニングは後回しにされる
起動時にある程度最適化できるものもあるが、
最適化のために数十秒~数分かけたりもできない
また実行直前にならないと決まらない内容も多く無駄になってしまう
そもそもコンパイラ型で速度重視のソフトを作る場合は
開発者自身やライブラリがメモリレイアウトなど制御し効率を考慮したコードを書く(書ける)

295:デフォルトの名無しさん
15/09/25 18:30:15.12 TpmuUHaP.net
自分でC言語っぽいスクリプト言語とかデータ形式作ってみたけど、どうだろ?
ちなみにスクリプト言語はSC3_Compilerってのに入ってるが。
URLリンク(osdn.jp)

296:デフォルトの名無しさん
15/09/26 01:18:18.90 4Rxec7m6.net
>>283
「スクリプト言語」の定義は難しいが、おおむね
(1)(ユーザーから見て)明示的なコンパイルというフェーズを経ずに実行される
(2)変数に型がない
(3)実行時に行える処理の柔軟性が高い(例えば関数定義など)
という特徴を持つ言語を指すことが多いだろう。RubyやPythonなど
で、それぞれの特徴が、実行速度を遅くすることに貢献する。
(1)→ 最適化に時間を割けない
(2)→ 実行時に、変数が指すオブジェクトの種類を調べる処理が毎回入る。
(3)→ これを実現するためにバイトコードインタプリタで実装されることが多く、遅くなる
もちろん厳密な定義ではないので、あくまで「おおむね」という話。
Javascriptみたいな変態事例もあるし断定的なことは何も言えない
言葉の定義の論争は不毛

297:デフォルトの名無しさん
15/09/26 11:28:42.59 GpPO3Mdd.net
>>287
(一切実行せずに)サラッと眺めた感じだと
字句解析くらい生成系やライブラリ(flex++やboost::spirit等)に頼ってみたらどうかなってのはあるかな。
変数名としてnCount(整数,カウント)の代わりにixArg(添字,引数)を使うとか
細かいところは幾つかあるかも知れんけど、それなりに読みやすいと思うよ。
stdafx.cppって名前で使ってることは察したけど、VS使うんなら
プロジェクト開くのに必要なファイル(.sln等)を入れるとか、
或いはMinGW/Cygwin/msys2なんかのUnix系ツールでさくっとビルドできるようにcmakeを書くとかしておくと
評価する人が増えると思うよ。

298:デフォルトの名無しさん
15/10/04 21:40:28.41 Qeh3kLaJ.net
おれバカで不勉強だから知らなかったえけど、最近の処理系って状態コードのお持ち帰りをしてくれるんだね
手続きAを呼んだ直後にグローバルな状態変数に何がしかの情報が入ってる(何も起きなかったとか、フックして停止させるの推奨みたいな)
面白いな~
データを加工して返すー>関数(関数内で処理のフローに関係する記述は禁止)
処理のフローに関係するー>手続き(状態コードを標準で返す)
複数個所使うで同じ様な処理をまとめるー>サブルーチン(スタックフレームの無いローカルな手続き)
プログラムを組み上げるときの構造や構成に行儀のよい作法がないと
プログラムのどの時点でどのデータがどの構成や状態にあるのか把握ができなくて発狂するww
で、なんでも記述できる自由度の高い処理系ほど読解困難な発狂プログラムが出来上がると

299:デフォルトの名無しさん
15/10/05 23:32:01.45 F9TK8Py4.net
>>290
状態コードのお持ち帰りって何?

300:デフォルトの名無しさん
15/10/06 02:07:01.38 mXRqVUnf.net
何を言ってるのかさっぱりワカラン…

301:デフォルトの名無しさん
15/10/06 02:50:21.48 rErEEAIK.net
クロージャのことかな・・・
最初Smalltalkやlispの環境のことかと思ったけど

302:デフォルトの名無しさん
15/10/06 10:51:51.85 SQrzN3D5.net
coroutineだったりして?

303:デフォルトの名無しさん
15/10/06 13:56:11.40 6X8NqiS5.net
継続じゃないの
俺は気持ち悪いとしか思わんけど

304:デフォルトの名無しさん
15/10/06 14:17:39.64 ztjfyQaD.net
なんでも記述できる自由度の高い言語ほど……

305:デフォルトの名無しさん
15/10/06 22:40:32.31 KmJ2byjS.net
(PEEK/POKEで)なんでも記述できる自由度の高いBASIC言語はいかがですかー

306:デフォルトの名無しさん
15/10/07 11:46:38.15 YlJ45J+b.net
文字通りステートコードの事じゃね?
Unixが何十年も前に確立してるけど
# make && make install

307:デフォルトの名無しさん
15/10/11 09:14:44.03 yW9ExgL4.net
なんか意味不明なこと書いてすいません
ステートコードで正しいと思います。
バカ正直に戻り値だけと思い込んでいたので
さっき、vs2013のc++起動して、構成プロパティでx64とアセンブラコードの出力に設定して
c++の入門書を買うか悩むこと5分
lispの実装でググって15分
考えるのやめて現実逃避中orz
一番自由度の高いのはアセンブラ(当たり前だけど)
ただし、全て自己責任(自由度が高い=自己責任ですよ~)
なんか、適当なスクリプト言語が作れないかなと

308:デフォルトの名無しさん
15/10/11 16:02:56.87 e7nwHPrn.net
>>299
「自由度」の定義は何?確かに「そのマシンで出来ることがなんでも記述できる」ならアセンブリほぼ一択だけど、
例えば「その言語のプリミティブと同等な機能を作れる」ならCommon Lispは自由度が高いし(マクロ最高!)、
或いは「その言語のプリミティブの機能を別な機能に変更出来る」ならTeXは自由度が高いよね(TeXの\endプリミティブが、なんとLaTeXでは違う機能に置き換わってる)。
例えば「その言語の文法を変えられる」って意味ならswiftやprologなんかは自由度が高い例になるだろうし、
仮にそれらの意味であればアセンブリ言語なんて自由度の欠片もない言語の一つになるよ。

適当なスクリプト言語が作りたいならHQ9+かbrainfuckか何かを作ればいいと思うよ
という冗談はさておき、そのスクリプト言語で何をやりたいかによって色々変わってくるよね。
テキスト処理ならgrepやsed、awkやperlなんかは参考になるだろうし、
統計処理や数式処理なんかはRやmathematicaが有名所かな。
読みやすさ重視ならある意味ではCOBOLやBASICが、別な意味ではpythonやrubyが「読みやすさ」を重視した言語として有名だし
とにかく簡単な文法にしたいならlispやpostscriptなんかが興味深い例ではある。
特殊用途向けの言語が作りたいか、汎用的な言語が作りたいか
汎用的な言語であれば手続き型か関数型か論理型か、関数や型はファーストクラスオブジェクトか、どんな文法か。
特殊用途向けの言語であればどんな用途で使うのか。
ノベルゲーム制作の補助向け(NScripter/吉里吉里等)なのか、文法記述用(regex/LR/PEG等)なのか、画像や構造を記述するもの(svg/postscript等)なのか。

309:デフォルトの名無しさん
15/10/12 16:27:55.78 xsIpokn9.net
>>300
丁寧な指摘ありがとうございます。
実際にVS2013をインストールしc++の入門を開いてブレイクポイントーデバッグーアセンブラの表示までたどりつきました
実際のアセンブラのコードを見て少し頭を抱えたしだいです
int a,b,c;
a=1; b=a/2*2;
たったこれだけのコードのアセンブラ出力も、符号拡張命令後の処理の意味が汲み取れませんでした
取り合えず高度な目標はありません
NanaTerryなるアイデアプロセッサを使ってみたらとても使い心地が良かったので
これをシンプルな機能に絞って実装する、そんなプログラムやアイデアを綴るTEXTを扱うtoolを
作りだす為の仕様に絞って色々検討しています。
低機能なlispっぽいなにかになる予定
最近はcコンパイラの実装まで大学のカリキュラムにあると聞いたので凄く刺激を受けました
実際c++の入門などを読んでも言語の仕様に何等かの違和感があるのです

310:デフォルトの名無しさん
15/10/12 18:59:19.08 ATBGiUj9.net
こいつ覚えたての言葉を使いたいだけのワナビーだろ
おそらくスレ違いなのにも気づいてないし相手すること無いぞ

311:デフォルトの名無しさん
15/10/12 19:02:17.18 qifYD3R8.net
パラドックスが始まった

312:デフォルトの名無しさん
15/12/09 21:43:53.38 yqcBT5mk.net
CでCを作るのと、アセンブラ使ってCコンパイラを作るのと、
どっちが良いかな?

313:デフォルトの名無しさん
15/12/09 23:21:35.10 0CTdrHjr.net
CでCを作る時間をCでXを作る時間に充てるのが良い

314:デフォルトの名無しさん
15/12/10 03:57:42.43 zEe7T/5S.net
>>1
デュエル・マスターズ Android版 ,i-OS版、公式 URLリンク(dm.takaratomy.co.jp)
デュエル・マスターズ対戦CGI ex
URLリンク(web.archive.org)URLリンク(www53.atwiki.jp)
デュエル・マスターズ(デュエマ)DM ONLINE 1.8a  /  VanGuard ONLINE 1.5a
URLリンク(web.archive.org)URLリンク(uhyohyohyo.sak)<)URLリンク(kiimaa.jugem.jp)
「カードファイト!!ヴァンガード」のネット対戦ができる公式オンラインゲーム「Cardfight!! Online」 2015年冬スタート
URLリンク(web.archive.org)URLリンク(supersolenoid.blog63.fc2.com)
遊戯王 Automatic Dueling System
URLリンク(web.archive.org)URLリンク(www3.atwiki.jp)
遊戯王 デュエル・オンライン
URLリンク(web.archive.org)URLリンク(www31.atwiki.jp)
URLリンク(web.archive.org)URLリンク(do.yugioh-portal.net)
WIXOSS WEBXOSS URLリンク(webxoss.com) URLリンク(webxoss.com)
BG(ボードゲーム)Engine URLリンク(web.archive.org)
URLリンク(web.archive.org)URLリンク(14owl.hateblo.jp)
アプレンティス  マジック:ザ・ギャザリング(MtG)オンライン化 URLリンク(homepage1.nifty.com)
URLリンク(web.archive.org)URLリンク(homepage1.nifty.com)

315:デフォルトの名無しさん
15/12/10 04:01:27.83 zEe7T/5S.net
【 オンラインTCGエディター 】   >>1,>>306
デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。
例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持


316:っておりながら、 当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。 既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。 デュエマ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、旧ガンダム・ウォー、ライブオン、ディメンション・ゼロ、シャーマン・キング、カードヒーローなど のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。 マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。 WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。 設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。 個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。 ↓ エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。 ↓ 遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。 バトスピ、ヴァンガ、デュエマなど発売済みゲームソフトが存在してるTCGはベンダーに研究させる。 ↓ 各社TCGを再現するテストプレイ ⇒ 更に改良や修正。 ↓ 機能制限した下位版を制作しても原則として発売せず + 上位版デュエリ-グ用でサーバー稼動。 ↑ 下位版を仮に発売した場合の改造および商用利用には、別途で当社との契約が必要。 さ~て、インド人ベンダーと日本人の翻訳兼PGを見つけよっと!ww http://wc2014.2ch.net/test/read.cgi/entrance2/1449623194/-18



317:デフォルトの名無しさん
15/12/21 02:59:48.04 4Mx5VRPH.net
>>304
BCPLとかCの生まれをもう一度考えてみると良いんじゃ無いかな?
凸記法で言語の生成を僕が読んだのはBit別冊の何かに書かれていたPlan言語の解説だったけど、ああいう記法って今は使わないのかな?
↑ある言語を生成するのに必要な言語処理系を凸と凹で組み合わせて表記してある奴なんだけど、アカデミックな世界でなんて言う方法かしらないのでこう書いてます。

318:デフォルトの名無しさん
15/12/21 21:20:55.44 6WzMDceb.net
乱数の発生のさせ方は、クロックを利用するものだけかな?
色々ありそうだけど、調べても良くはわからなかった。

319:デフォルトの名無しさん
15/12/22 01:30:01.23 P1DQx2Lt.net
時刻ではなく、プログラムを起動してから経過した時間を取得できます。それを種にする

320:デフォルトの名無しさん
15/12/22 01:34:09.74 P1DQx2Lt.net
GetTickCount function
システムが起動してから経過したミリ秒を取得
Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days.
URLリンク(msdn.microsoft.com)

321:デフォルトの名無しさん
15/12/22 14:10:11.43 dkSLpih8.net
>>309
see


322:dを何にするかって話? /dev/randomとか



323:デフォルトの名無しさん
15/12/22 14:11:39.64 dkSLpih8.net
>>310
>>311
プログラムやシステムの起動直後に実行するコード、プログラムではほぼ似た値を使うことになってしまう。

324:デフォルトの名無しさん
15/12/22 16:20:29.14 FIUTNb/j.net
>>309
ハードウェアのADコンバータ経由(アナログなノイズジェネレータからADコンバータで拾ってくる奴)で乱数作るとかもあるけど、計算機の乱数は種から一意に求められる様な物が一般的だよ
で種(seed)の値に現在時刻をつかったり、ユーザの挙動(キー入力やマウスの位置)を素にしたりして見かけ上の乱数性を生成しているのが普通。

325:デフォルトの名無しさん
15/12/22 18:18:28.54 qPz15M1W.net
専用ハードがあってもいいかと‥
最近のCPUには載っているそうなんだが
スレリンク(tech板:337番)

326:デフォルトの名無しさん
15/12/22 20:55:17.79 1duNN4a3.net
乱数表をあらかじめ組み込んでおいて、起動からの時間により、順繰り
読んで擬似的に乱数を発生させる方法はありかな?

327:デフォルトの名無しさん
15/12/22 22:21:41.42 HbMu76eU.net
ねーよ

328:デフォルトの名無しさん
15/12/22 22:39:41.89 S5fGjlFA.net
>>316
乱数表に見えるってだけで良いなら擬似乱数列使えばそれで済む話で
わざわざ乱数表全体を組み込む意味がない

329:デフォルトの名無しさん
15/12/23 02:10:18.76 o2v4fYco.net
何でそんなに起動からの時間が好きなんだよw
女官じゃないぞ

330:デフォルトの名無しさん
15/12/23 14:48:59.82 1VnhNGH+.net
大昔の光栄ゲーでは起動時に RETURN を叩いてもらってそのタイミングで乱数初期化してたw

331:デフォルトの名無しさん
15/12/24 23:33:07.59 Uv2klDgG.net
std::random_device

332:デフォルトの名無しさん
15/12/25 21:30:55.13 R/sO38u1.net
ユーザーのマウスの動きを、ミッキー単位で取得して乱数を...と
思ったら、プログラマはマウスを嫌がり、あまり使わないで
tabキー多用する奴も多かったからな。別な手を考えた方が良いかな?

333:デフォルトの名無しさん
15/12/25 22:26:16.56 DXbDvcZw.net
なあ、今時のCPUはランダムデバイス持ってることくらいは知っとこうや
幾らくたばりかけてる爺でも

334:デフォルトの名無しさん
15/12/26 08:32:40.01 CDX6E7Ry.net
なあ、全員が今時のリッチなCPUを使う訳じゃないことくらいは知っとこうや
幾らゆとりのアホでも

335:デフォルトの名無しさん
15/12/26 12:19:14.32 NrOPRYuI.net
CPUを明示して相談しなよ
知らんだけで乱数用のエントロピー生成命令持ってるかもしれんし
IntelならOSがサポートしてなくてもIntel DNRG使えばいい

336:デフォルトの名無しさん
15/12/26 13:31:50.28 4htfJ0fo.net
俺の頭の中のcpu(10MHz)が・・・

337:デフォルトの名無しさん
15/12/26 13:55:58.15 oIXuKyHb.net
リアルタイムで動画処理、画像認識、空間認識、音声認識その他諸々を全部やってのけるのって地味に凄いよな
時間あたりの消費エネルギーも、要求エネルギーが2000kcal~4000kcal/dayとしてもおよそ100W~200Wで非常に効率が良いし

338:デフォルトの名無しさん
15/12/26 20:17:52.51 nC5MMPRS.net
CPUで何でも出来るようになってしまったら、
マの出番はどんどん減ることになりそうだな。
大昔は、足し算と引き算は出来るのに、掛け算と割り算が出来ないのが
当たり前だったからな。30年くらい前のものだとな。

339:デフォルトの名無しさん
15/12/28 10:04:16.17 VJBFmUt0.net
ランダムデバイスに頼るのが良いのか、迷ってしまいそうだな。
こういうのを読んでしまうと...。
URLリンク(cpplover.blogspot.jp)
ハードウェア乱数生成器は信頼できるか

340:デフォルトの名無しさん
15/12/28 10:25:27.73 1a7EtF6d.net
NSAと戦ってる人か

341:デフォルトの名無しさん
15/12/28 12:54:32.70 dgI6+oKo.net
>>329
よくわからんけど生成された値を適当な鍵使って AES 暗号化するんじゃ駄目なの?

342:デフォルトの名無しさん
15/12/28 12:58:36.44 b3qQlUF/.net
OSを作る時の話になってるから適当な鍵をどこから持ってくるか熟慮しないといけない

343:デフォルトの名無しさん
15/12/31 19:14:36.65 shZW63x7.net
一度に数十個の乱数を生成するコードを書き、重複チェックを忘れる俺は、
やはりマには向いていないのかもしれん。コード記述の時点で
重複することが頭から抜けていた。ついうっかり...。

344:デフォルトの名無しさん
16/01/01 03:47:17.29 xJBQ4MUG.net
>>329
自分の方が質が高いのを用意できるわけw

345:デフォルトの名無しさん
16/01/05 10:14:26.10 n8GHd5T0.net
「ハードよりも、俺の方が正確に動く」と、
一度で良いから言ってみたい。

346:デフォルトの名無しさん
16/01/06 02:04:42.23 DSMnLqrW.net
楽するためにプログラミングするのであるが
一向に楽にならず

347:デフォルトの名無しさん
16/01/07 17:58:56.46 3JUqZlZh.net
>>336
顧客が楽になっているだろw
裏でマが血のにじむような努力をしていることを、知る由もないからな。

348:デフォルトの名無しさん
16/01/07 18:29:10.67 E6rodr+5.net
70点じゃなくて55点で妥協すれば
費用が100分の1になるって教えてやれよ

349:デフォルトの名無しさん
16/01/10 10:05:01.35 KKgUy8RE.net
>>338
それは、「バグ入りソフトを出荷する可能性も高くなる」諸刃の剣では?

350:デフォルトの名無しさん
16/01/10 12:22:10.90 a81L0ZQ5.net
妥協するのは仕様でしょ
仕様で無理難題いうの辞めたら
コストも下がるし品質も上がるみたいな
けどスレ違いの話じゃね?

351:デフォルトの名無しさん
16/01/11 20:54:13.20 J50s7Qe5.net
「妥協しないワガママな顧客」に、
「見積もりを二桁足して出したら、予想通り、注文が来なかった」
と言っていたな。最初から断る口実だったのかな。

352:デフォルトの名無しさん
16/01/12 19:46:25.75 7kdSKUGZ.net
>>338
66.66 点くらいで負かりませんか?

353:デフォルトの名無しさん
16/01/13 17:31:32.57 DkyDX7cg.net
>>342
それだと、100万円の費用を85万円に値引くのが限界では?

354:片山博文MZ ◆T6xkBnTXz7B0
16/01/15 20:05:16.26 ds1B8EUq.net
C言語の呼び出し規約に関する文法に
詳しいサイトとかソースとかありますか?

355:デフォルトの名無しさん
16/01/15 22:22:03.06 EuNWEiBo.net
そこで言う呼び出し規約ってのは引数がスタックでどう配置されるかって話?

356:デフォルトの名無しさん
16/01/15 22:31:09.13 +0giQcLD.net
呼び出し規約に関する文法って何ぞ?

357:デフォルトの名無しさん
16/01/15 22:55:08.00 y9x+XKWj.net
C言語のABIは色々あるぞ
基本はcdeclかstdcallだけど
スタック使わずレジスタでやりとりしたり
環境や処理系毎に異なる

358:デフォルトの名無しさん
16/01/16 00:11:40.49 4AnwHYnZ.net
呼び出し規約自体は文法に現れんと思うが

359:デフォルトの名無しさん
16/01/16 01:23:45.39 7+H4Uotl.net
上のcdeclとかstdcall辺りが関数の属性値として付くぐらいじゃないかと
文法的にはこれらは両立しないから複数書いたらエラーとかその程度でしょ

360:デフォルトの名無しさん
16/01/16 01:24:46.12 7+H4Uotl.net
それとgccの__attribute__())構文なんてのもある
括弧


361:の中はもう何でもあり



362:片山博文MZ ◆T6xkBnTXz7B0
16/01/16 12:33:39.48 lRbtk3RI.net
属性について調べればいいのか
ありがとさん

363:デフォルトの名無しさん
16/01/16 12:54:05.36 H0Ul8NcN.net
>>347
独自指定子、pragma指定、
FORTRANのライブラリ呼び出すのあったね
今はextern宣言か
extern "C++"とか

364:デフォルトの名無しさん
16/01/17 14:03:21.22 WTe5Q/ML.net
サポートされる種類は環境依存だし
構文は実装依存だから
規格では書いてない
とりあえず wikipedia 見れば

365:デフォルトの名無しさん
16/01/18 06:53:14.27 TV7ry5Rb.net
>>353
環境依存と実装依存ってどう使い分けてるんだ?

366:デフォルトの名無しさん
16/01/18 08:53:28.44 XM4mBu50.net
>>354
実装であるgccはいろんな環境(プラットフォーム)で動いてる
構文はどの環境でも同じだが
どんな呼び出し規約のライブラリがあるかは
環境ごとに違う

367:デフォルトの名無しさん
16/01/19 11:13:57.61 79hXpIDE.net
新しいコンパイラを作る際、わざわざ「手動でスタックを積み上げたり
開放したりする」命令は、あった方が良いのかな?
メモリ節約や速度に直接、関係するなら言語仕様を作る段階で
考えるけどね。今のパソコンはスピードが速いから、不要といえば不要かも
しれないが。

368:デフォルトの名無しさん
16/01/19 12:41:03.92 uAThxx94.net
そのレベルならインラインアセンブラみたいな
抜け道を作るかどうかって話になるんじゃないの

369:デフォルトの名無しさん
16/01/19 21:16:12.58 j62B2E0v.net
>>356
命令ってどういうこと?
Cのallocaみたいなのを言ってるの

370:デフォルトの名無しさん
16/01/19 23:54:06.44 Xdnj5x+8.net
確保開放やらはSPレジスタをいじるでいいんじゃないかな・・・
SP変更時に無効なSP値だったらエラーにするとかその程度で
コンパイラもよほど変な事しない限りpush/pop命令なんて使わんし

371:デフォルトの名無しさん
16/01/20 12:29:31.81 zFAeGKrq.net
>>356
言語自体の仕様にも依るんじゃないかな。
あと用途とか。
モノリシックカーネルのドライバ書くのに使いますーCとアセンブリの良いとこ取りですーってんなら
手動でスタック積んだり降ろしたりする命令も使うだろうけど
いまいち用途がピンと来ない。
仮にllvm-irの使用を前提にするなら、ネイティブのスタック積んだり下ろしたりするのって意味あんの?っていう議論もありか?

言語仕様を練ってて
シンプルな構文にシンプルな継続(のようなもの)を追加したら
全体的に美しさに欠ける感じになって悩んでる。

372:デフォルトの名無しさん
16/01/22 12:29:02.92 97wZpIfH.net
高級言語の側で、わざわざ、pushやpop命令を言語仕様に入れる必要は
なかったか。メリットも予想ほどないみたいだな。
実行上で、スピードアップになるかと思っていたが。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch