「コンパイラ・スクリプトエンジン」相談室16

2014/07/20(日) 11:16:19.37ID:p6eMVAxc
プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。

Wikiのまとめページ
http://www6.atwiki.jp/compilerandscriptengine/
2015/12/28(月) 12:54:32.70ID:dgI6+oKo
>>329
よくわからんけど生成された値を適当な鍵使って AES 暗号化するんじゃ駄目なの?
2015/12/28(月) 12:58:36.44ID:b3qQlUF/
OSを作る時の話になってるから適当な鍵をどこから持ってくるか熟慮しないといけない
333デフォルトの名無しさん
垢版 |
2015/12/31(木) 19:14:36.65ID:shZW63x7
一度に数十個の乱数を生成するコードを書き、重複チェックを忘れる俺は、
やはりマには向いていないのかもしれん。コード記述の時点で
重複することが頭から抜けていた。ついうっかり...。
2016/01/01(金) 03:47:17.29ID:xJBQ4MUG
>>329
自分の方が質が高いのを用意できるわけw
335デフォルトの名無しさん
垢版 |
2016/01/05(火) 10:14:26.10ID:n8GHd5T0
「ハードよりも、俺の方が正確に動く」と、
一度で良いから言ってみたい。
2016/01/06(水) 02:04:42.23ID:DSMnLqrW
楽するためにプログラミングするのであるが
一向に楽にならず
337デフォルトの名無しさん
垢版 |
2016/01/07(木) 17:58:56.46ID:3JUqZlZh
>>336
顧客が楽になっているだろw
裏でマが血のにじむような努力をしていることを、知る由もないからな。
2016/01/07(木) 18:29:10.67ID:E6rodr+5
70点じゃなくて55点で妥協すれば
費用が100分の1になるって教えてやれよ
339デフォルトの名無しさん
垢版 |
2016/01/10(日) 10:05:01.35ID:KKgUy8RE
>>338
それは、「バグ入りソフトを出荷する可能性も高くなる」諸刃の剣では?
2016/01/10(日) 12:22:10.90ID:a81L0ZQ5
妥協するのは仕様でしょ
仕様で無理難題いうの辞めたら
コストも下がるし品質も上がるみたいな
けどスレ違いの話じゃね?
341デフォルトの名無しさん
垢版 |
2016/01/11(月) 20:54:13.20ID:J50s7Qe5
「妥協しないワガママな顧客」に、
「見積もりを二桁足して出したら、予想通り、注文が来なかった」
と言っていたな。最初から断る口実だったのかな。
2016/01/12(火) 19:46:25.75ID:7kdSKUGZ
>>338
66.66 点くらいで負かりませんか?
343デフォルトの名無しさん
垢版 |
2016/01/13(水) 17:31:32.57ID:DkyDX7cg
>>342
それだと、100万円の費用を85万円に値引くのが限界では?
2016/01/15(金) 20:05:16.26ID:ds1B8EUq
C言語の呼び出し規約に関する文法に
詳しいサイトとかソースとかありますか?
2016/01/15(金) 22:22:03.06ID:EuNWEiBo
そこで言う呼び出し規約ってのは引数がスタックでどう配置されるかって話?
2016/01/15(金) 22:31:09.13ID:+0giQcLD
呼び出し規約に関する文法って何ぞ?
2016/01/15(金) 22:55:08.00ID:y9x+XKWj
C言語のABIは色々あるぞ
基本はcdeclかstdcallだけど
スタック使わずレジスタでやりとりしたり
環境や処理系毎に異なる
2016/01/16(土) 00:11:40.49ID:4AnwHYnZ
呼び出し規約自体は文法に現れんと思うが
2016/01/16(土) 01:23:45.39ID:7+H4Uotl
上のcdeclとかstdcall辺りが関数の属性値として付くぐらいじゃないかと
文法的にはこれらは両立しないから複数書いたらエラーとかその程度でしょ
2016/01/16(土) 01:24:46.12ID:7+H4Uotl
それとgccの__attribute__())構文なんてのもある
括弧の中はもう何でもあり
2016/01/16(土) 12:33:39.48ID:lRbtk3RI
属性について調べればいいのか
ありがとさん
2016/01/16(土) 12:54:05.36ID:H0Ul8NcN
>>347
独自指定子、pragma指定、
FORTRANのライブラリ呼び出すのあったね
今はextern宣言か
extern "C++"とか
2016/01/17(日) 14:03:21.22ID:WTe5Q/ML
サポートされる種類は環境依存だし
構文は実装依存だから
規格では書いてない
とりあえず wikipedia 見れば
2016/01/18(月) 06:53:14.27ID:TV7ry5Rb
>>353
環境依存と実装依存ってどう使い分けてるんだ?
2016/01/18(月) 08:53:28.44ID:XM4mBu50
>>354
実装であるgccはいろんな環境(プラットフォーム)で動いてる
構文はどの環境でも同じだが
どんな呼び出し規約のライブラリがあるかは

環境ごとに違う
356デフォルトの名無しさん
垢版 |
2016/01/19(火) 11:13:57.61ID:79hXpIDE
新しいコンパイラを作る際、わざわざ「手動でスタックを積み上げたり
開放したりする」命令は、あった方が良いのかな?
メモリ節約や速度に直接、関係するなら言語仕様を作る段階で
考えるけどね。今のパソコンはスピードが速いから、不要といえば不要かも
しれないが。
2016/01/19(火) 12:41:03.92ID:uAThxx94
そのレベルならインラインアセンブラみたいな
抜け道を作るかどうかって話になるんじゃないの
2016/01/19(火) 21:16:12.58ID:j62B2E0v
>>356
命令ってどういうこと?
Cのallocaみたいなのを言ってるの
2016/01/19(火) 23:54:06.44ID:Xdnj5x+8
確保開放やらはSPレジスタをいじるでいいんじゃないかな・・・
SP変更時に無効なSP値だったらエラーにするとかその程度で
コンパイラもよほど変な事しない限りpush/pop命令なんて使わんし
2016/01/20(水) 12:29:31.81ID:zFAeGKrq
>>356
言語自体の仕様にも依るんじゃないかな。
あと用途とか。

モノリシックカーネルのドライバ書くのに使いますーCとアセンブリの良いとこ取りですーってんなら
手動でスタック積んだり降ろしたりする命令も使うだろうけど
いまいち用途がピンと来ない。

仮にllvm-irの使用を前提にするなら、ネイティブのスタック積んだり下ろしたりするのって意味あんの?っていう議論もありか?


言語仕様を練ってて
シンプルな構文にシンプルな継続(のようなもの)を追加したら
全体的に美しさに欠ける感じになって悩んでる。
361デフォルトの名無しさん
垢版 |
2016/01/22(金) 12:29:02.92ID:97wZpIfH
高級言語の側で、わざわざ、pushやpop命令を言語仕様に入れる必要は
なかったか。メリットも予想ほどないみたいだな。
実行上で、スピードアップになるかと思っていたが。
2016/01/22(金) 12:55:06.86ID:8nADuqf6
メモリやキャッシュはレジスタよりずっと遅いからなぁ。
レジスタへのアクセスに対してL1キャッシュのアクセスには2〜3倍の時間が掛かるって言われてる。
つまり、レジスタ間mov命令に対してpush/popは1命令あたり2〜3倍遅いって事だ。

C言語のregister修飾子は知ってる?変数がレジスタに乗っかるようにする為の物なんだけど。
グラフ彩色で変数生存期間に対するレジスタの使用を最適化出来る事が知られる以前の産物だから、今は滅多に使われないけどね。
2016/01/22(金) 13:18:42.18ID:0V0RVdAH
バイト列xからバイト列C(x)への変換器Cがあるとき、
Cの逆変換器C^(-1)を求める一般的な方法は何か?
364デフォルトの名無しさん
垢版 |
2016/01/22(金) 20:49:57.23ID:TW3FacBd
>>363
逆アセンブラです。
365デフォルトの名無しさん
垢版 |
2016/01/22(金) 21:58:03.16ID:bvwDmPF2
変換器Cの変換の性質がbijectiveであるという条件をつけなければいけないのではないか。
2016/01/22(金) 22:13:13.93ID:9qqofano
この方法が分かれば、どんな暗号文も解読できるね!
2016/01/22(金) 22:54:36.97ID:0V0RVdAH
数学板でじっくり考えることにしたよ。

有限数列上の変換について [無断転載禁止]・2ch.net
http://wc2014.2ch.net/test/read.cgi/math/1453437840/
2016/01/23(土) 09:04:11.89ID:VPAh/uPo
変換器が可逆計算できるとは限らないから一般的な方法は無いだろ。
2016/01/23(土) 15:07:58.00ID:0d2orZXz
メモ化とテーブルルックアップw
370デフォルトの名無しさん
垢版 |
2016/01/31(日) 19:36:30.55ID:T/RwY0g5
多少勉強すると、いまさらながら、Cがアセンブラにかなり近いレベルの
言語であることが、良くわかるな。
その分、マスターするのに時間もかかったが。
2016/01/31(日) 19:52:06.23ID:Vno/qq2m
C言語をマスターしたって奴は絶対に信用しないことにしている
2016/01/31(日) 20:53:44.66ID:7LoAMsY1
入門書一冊読みました=マスターしました
2016/01/31(日) 21:17:31.75ID:QH+McMgz
これが本当のマスターベーション
2016/02/01(月) 16:11:44.37ID:aq9Mx2ga
そんなあなたにスタンディングマスターオベーション
375デフォルトの名無しさん
垢版 |
2016/02/02(火) 10:57:23.41ID:9eq1u0GM
>>371
「C言語をマスターしました」
という奴の化けの皮をはがすのは、意外に簡単だからな。
簡単な計算機プログラムを書かせるか、あるいは、ピタゴラスの定理の
コードでも書かせるか。もっとも、そこで化けの皮がはがれるようなら、
とてもコンパイラの領域まで、進むことは出来ないだろうな。
2016/02/02(火) 11:36:11.92ID:7f7wf/mW
コンパイラを書ける最低レベルに達しているかどうかの判定がしたければ
「入力された多項式を微分する関数書くならどう書く?」ってくらいは聞きたいけど。
C言語云々じゃなくてデータ構造とアルゴリズムの問題だけど、
Cでやるならポインタと再帰とラムダ算法について知ってなきゃ答えられない。
2016/02/02(火) 20:19:50.93ID:WkrnCzmR
>>376
単純な多項式に限定していいなら再帰いらんでしょ
最終的に多項式に変換できる式と言うなら別だけど
2016/02/02(火) 22:20:22.51ID:7f7wf/mW
>>377
すまん
素で項数無限だったり微分不能な関数が入ってたりしないって意味で多項式って言っとったわ。
log(x^2+8*x)とかsin(kx+wt)とかも多項式(笑)
379デフォルトの名無しさん
垢版 |
2016/02/03(水) 11:44:18.92ID:tCheJck0
面接時「Cを三年ほど仕事で使っていました」
   ↓
採用後「誰だ。あいつを採用したのは!」

「最低、Cを仕事で三年間使っていること」
を条件に採用した会社で、こんなこともないわけではないからな。
本人の申告ほどあてにならないものはない。コンパイラ作成に到達する
など、夢のまた夢。
2016/02/03(水) 11:59:22.08ID:uEOUJl1K
他人の突っ込んだバグを直せるのが中級者
自分の突っ込んだバグを直せるのが上級者
それ以外は何の参考にもならない
2016/02/03(水) 12:36:45.52ID:Gb259GwX
それ以外っつーとどんなバグも直せない奴か
そりゃ確かに考慮に値しないな
382デフォルトの名無しさん
垢版 |
2016/02/03(水) 13:57:01.05ID:WaqhOfMD
まあもともとCはコンパイラを書くには向いてないからな
GADTとかある関数型言語で書くのが一番楽

あとコンパイラが糞になるのは大抵対象言語の糞文法と糞デザインのせい
2016/02/03(水) 13:57:40.61ID:WaqhOfMD
Rubyがなぜあんな巨大な糞なのかというと(お察しください
2016/02/03(水) 14:06:49.98ID:uEOUJl1K
実用性を求められそれに応えるごとに汚れていくのさ
ピュアでいられるのはお子様だからさ
2016/02/03(水) 14:17:35.65ID:WaqhOfMD
残念だがルビーの文法とデザインが腐ってるのは初期からだw
386デフォルトの名無しさん
垢版 |
2016/02/04(木) 01:55:33.07ID:VXt+BkjY
        ∩___∩                     ∩___∩
    ♪   | ノ ⌒  ⌒ヽハッ    __ _,, -ー ,,    ハッ   / ⌒  ⌒ 丶|
        /  (●)  (●)  ハッ   (/   "つ`..,:  ハッ (●)  (●) 丶     今、どんな気持ち?
       |     ( _●_) ミ    :/ MZうy  ::::::i:.   ミ (_●_ )    |        ねぇ、どんな気持ち?
 ___ 彡     |∪| ミ    :i        ─::!,,    ミ、 |∪|    、彡____
 ヽ___       ヽノ、`\     ヽ.....:::::::::  ::::ij(_::●   / ヽノ     ___/
       /       /ヽ <   r "     .r ミノ~.    〉 /\    丶
      /      /    ̄   :|::|    ::::| :::i ゚。     ̄♪   \    丶
     /     /    ♪    :|::|    ::::| :::|:            \   丶
     (_ ⌒丶...        :` |    ::::| :::|_:           /⌒_)
      | /ヽ }.          :.,'    ::(  :::}            } ヘ /
        し  )).         ::i      `.-‐"             J´((
          ソ  トントン     Darkなんちゃら…              ソ  トントン
387デフォルトの名無しさん
垢版 |
2016/02/04(木) 13:25:41.80ID:+rC6IKS8
優れた文法を手本とするには、どの言語が良いんだ?
どれもこれも長所と短所があるし。
2016/02/04(木) 15:53:27.61ID:69F/iNHk
優れた文法とは。
2016/02/04(木) 16:18:01.49ID:ri7+Aiuk
5色のうちからユーザーが好みのものを選べるのがいいんじゃないか
2016/02/04(木) 16:29:33.62ID:69F/iNHk
5色か

Whitespace
H9Q+
brainfuck
Lazy K
INTERCAL
あたりの文法を参考に・・・・・・
2016/02/05(金) 13:29:53.12ID:BBqIJr5G
フロントエンドとミドルエンドとバックエンドに分けてフロントエンドはユーザーが作れるようにしておけばいいんじゃないのか?
392デフォルトの名無しさん
垢版 |
2016/02/05(金) 20:10:50.78ID:um7ZPY3u
>>388
言語仕様に「整合性がある」言語の事だが。
一長一短だからな。
2016/02/05(金) 21:49:15.21ID:hmTKeVMY
でもテンプレートの奥深くみたいな訳の分からないエラーメッセージとか無しでな
2016/02/05(金) 22:53:24.24ID:AF25xcuE
ミドルにエンドは無いと思うんだが、LLVMがそんな呼び方してるのはなんか意図があるんだろうか
2016/02/06(土) 00:48:13.75ID:utAdfs60
>>392
大概の言語仕様は無矛盾だと(=整合性があると)思うけど。
2016/02/06(土) 10:06:04.94ID:XRyA0EjL
最強言語(キリッ
でも標準ライブラリも効率的なデバッグの仕組みも考えたことすらありません
2016/02/06(土) 12:37:09.68ID:4z0/BkxB
そもそも文法がマトモにパーズできるようなものでないと
処理系がバグりまくる(C++やRubyの惨状を見よ)

静的型を用意するなら型理論に沿ったマトモな型システムでないと
処理系がバグりまくる(C++テンプレートやSwiftの惨状を見よ)
オブジェクト指向と関数型の変な折衷をするとこれまた型が
アレになって走査パスが増えて処理系が超遅くなる(Scalaの惨状を見よ)

人間が読めて、他のプログラムから容易に生成できて
(これは文法が糞だと目も当てられない事になる)、
マトモな言語機能を持った言語以外を作るなと言いたい
CやLispより退化してどうするんだ
2016/02/06(土) 15:40:31.20ID:lxi6Zpfn
手段が目的になってる人はそう思うんだろう
399デフォルトの名無しさん
垢版 |
2016/02/07(日) 11:42:14.16ID:CwVox+Js
かなり昔の事だが、C++のANSI規格作成で、携わっていた委員の一人が、
C++の文法の一部を誤解して覚えていたことが発覚し、周りに苦笑された
事もあったらしいからな。
「言語仕様を作る側」の頭のレベルも念頭に置かないと。
それでなければ整合性には程遠い。
2016/03/09(水) 17:29:58.75ID:ISN2ur/+
gccですら実装を見送る規格は止めてほしい
CとC++の中間ぐらいの言語が欲しい
プリプロセッサとテンプレートは採用で
401デフォルトの名無しさん
垢版 |
2016/03/14(月) 22:18:27.17ID:5P+EA/8R
名前空間付きC言語程度の言語つくってみようかしらん
特に目的はないけどこれなら作れそうくらいな動機で
2016/03/15(火) 19:07:41.78ID:RIoPtDsj
>>401
前方参照OKにしてくれ
2016/03/15(火) 23:33:07.78ID:8e1lo7mI
前方宣言のことだよね?
名前空間のインターフェースみたいなのできたら面白いかも
2016/03/16(水) 21:23:00.37ID:ejdJRW9Z
いや、多分、前方宣言じゃなく、前方参照のことだろう
2016/03/17(木) 11:20:18.13ID:U4keFPtS
前方参照でC++でもいまだにエラーとしてる理由って何だっけ
2パスを嫌ってる?
でもC++って何パスもしてる気がするよね
2016/03/17(木) 11:51:54.16ID:go3n9QI1
Java「クラスの外に宣言書けないようにすればいいのに」
2016/03/17(木) 19:00:40.54ID:HqjZona4
ヘッダーファイルという糞文化
2016/03/19(土) 04:08:08.77ID:YkVYTtmN
ポインタは*がなんかダサくて嫌だ
2016/03/22(火) 01:20:09.95ID:rf8iBlA4
3大OSで動くようにjavaでランタイム書こうと思うんだがポインタないのが不便だね
C言語ソースに変換するほうが楽だと思うけどもう少し粘る
2016/03/22(火) 02:43:19.96ID:p3cxKPtY
LLVMの話はここでいいんだよな?

LLVM+Clangを仮想Ubuntuでビルドしているが、かなり時間が掛かる。
三日間以上か。やはりC++コンパイラを仮想環境でビルドするのは無理があるのか。
実機なら数時間でビルドできるのだろうか。
2016/03/22(火) 06:20:07.57ID:2k6rwd23
>>409
もうC#でよくね?
2016/03/22(火) 13:27:29.78ID:YJW8F40f
>>410
仮装マシンの設定間違ってるだけじゃないの?(メモリ配分とかCPU割り当てとか、Networkドライブでコンパイルしちゃったとか)
2016/03/23(水) 03:14:26.98ID:o57PmMMS
とりあえず関数の外側までパースしつつJVMのバイトコードを勉強してる
helloworldするためのprintln()はどうやって作ればいいのだろう?
2016/03/23(水) 10:56:44.60ID:fhNbIMvx
>>413
JVM にはI/Oはない。 ネイティブコードのライブラリに投げる。
2016/03/25(金) 00:41:07.93ID:LUc1dGhA
>>414
つまり最初にネイティブコードを呼ぶ仕組みが必要なのだろうか?
難しそうだし、暫定的に組み込み関数を標準APIとして用意するに留めたいなあ
2016/03/25(金) 06:42:35.83ID:IRDGuB0e
その組み込み関数=ネイティブコードのライブラリなんでは・・・
2016/03/26(土) 08:43:48.51ID:drxQ1xsy
何がしたいのか分からん
JVM を呼ぶフロントエンドとグルーを作るだけなんでしょ
418デフォルトの名無しさん
垢版 |
2016/03/31(木) 23:33:53.46ID:m6GiZo6g
業務ソフト開発用のコンパイラと、ゲーム開発用のコンパイラは、
当然、分けて考えないとダメだよな?
2016/04/01(金) 03:11:11.66ID:38psm3gC
>>418
だめとは何が?
成果物によっては業務だと下手すると死人が出る
ゲームだと下手するとクレームで会社が倒産する
でもその成果物はコンパイラ以外にも色んな工程を経て作られたものだから
最終的にコンパイラが原因だったとしてもコンパイラやその開発者が追及を受ける謂れはない
例えばキミの作ったゴミコンパイラで死人が出たとして責任とれますか?
2016/04/01(金) 12:33:03.11ID:EVZZ0pNr
そのときは体で詫びます
2016/04/01(金) 13:14:37.42ID:TsVr6Gke
業務なら信頼性と生産性重視
ゲームなら実行時の性能重視 欲を言えばGPUのデバッグしやすければ勝つる

つうか強みをわかりやすくバーンと出して後は選んでもらうだけだべ
422デフォルトの名無しさん
垢版 |
2016/04/02(土) 11:20:43.68ID:5nWyUO1B
30年以上前に出た、ゲームセンターにあるゲームは、
意外にバグを多く含んでいたんだよな。それを承知で、
みんな遊んでいたから。コンパイラのせいには出来ないだろうが。
初期のナムコ製品なんて、バグ発見と、それを悪用した点数稼ぎが
やたら多かった。
2016/04/02(土) 12:06:49.67ID:pO9IxWzb
支障のあるバグだけど修正困難なので放置されていた
というのが正しい

ゲーセンのインカムに影響するようなバグは回収されるはず

数年前にサ○ラ大戦のパチのバグで回収になって
50億の損害が出たとかあったな
2016/04/02(土) 12:24:29.40ID:k2fP1WMZ
>>422
その頃のアーケードゲームはコンパイラつかってないだろ、8ビットでz80、良くて6809の時代でコンパイラはi8080向けの LSI-Cが出たか出ないかの時代だぞ
>>423
サクラ大戦ってそんなに売上げあったん?
2016/04/02(土) 19:15:30.37ID:P1i243h5
>>424
> サクラ大戦ってそんなに売上げあったん?
ゲームじゃなくてこう言う話でしょ
http://slosoku.com/archives/5072231.html
2016/04/02(土) 22:12:51.38ID:k2fP1WMZ
>>425
パチスロかパチンコなのね
2016/04/03(日) 02:39:40.29ID:iadWYSqN
千円の物が百万個売れると10億なので
ゲームの方も50億くらいはあるんじゃないの
428デフォルトの名無しさん
垢版 |
2016/04/03(日) 21:47:29.31ID:2hoiGC6I
その昔、ナムコのゲーム開発部隊では、OSを作っていたのが二人いたそうだ。
苦心惨憺の末、ギャラガというゲームを作ったライトサイドプログラマー
の大森田氏。一方、ダークサイドプログラマーとして名高い島岡弘氏。
今ではコンパイラ作りの情報はありふれているが、やはり、当時としては
相当凄かったらしく、一目置かれていたとか。

今だと、コンパイラ作るだけでは、誰も誉めてくれないからな。
中身を見るまでは、お褒めの言葉にも預かれない。
2016/04/03(日) 21:57:18.40ID:YoKWiOlG
ヘイジャックども、英語の重要な技術文書をどんどん翻訳して
WikiBookやGitHubに上げていこっぜ、ベイベー。
430デフォルトの名無しさん
垢版 |
2016/04/04(月) 01:03:07.07ID:DatNOwTQ
>>429
MSの技術解説部分も、昔は翻訳するのに制限がかかっていなかったか?
そのためにVC++を使いこなすために英文マニュアルとの格闘に
なって苦労したぜ。C++特有のわかりづらさと、英文マニュアルと、
初めて使う統合開発環境に戸惑い、ドえらく時間がかかった経験が...。
2016/04/04(月) 08:31:57.12ID:P4S1l6wk
>>430
翻訳権ってMSDNにもあるんかいな。
いい加減、日本の著作権法にもフェアユースを
明記してほしいよな。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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