「コンパイラ・スクリプトエンジン」相談室16 (649レス)
上下前次1-新
347(1): 2016/01/15(金)22:55 ID:y9x+XKWj(1) AAS
C言語のABIは色々あるぞ
基本はcdeclかstdcallだけど
スタック使わずレジスタでやりとりしたり
環境や処理系毎に異なる
348: 2016/01/16(土)00:11 ID:4AnwHYnZ(1) AAS
呼び出し規約自体は文法に現れんと思うが
349: 2016/01/16(土)01:23 ID:7+H4Uotl(1/2) AAS
上のcdeclとかstdcall辺りが関数の属性値として付くぐらいじゃないかと
文法的にはこれらは両立しないから複数書いたらエラーとかその程度でしょ
350: 2016/01/16(土)01:24 ID:7+H4Uotl(2/2) AAS
それとgccの__attribute__())構文なんてのもある
括弧の中はもう何でもあり
351: 片山博文MZ ◆T6xkBnTXz7B0 2016/01/16(土)12:33 ID:lRbtk3RI(1) AAS
属性について調べればいいのか
ありがとさん
352: 2016/01/16(土)12:54 ID:H0Ul8NcN(1) AAS
>>347
独自指定子、pragma指定、
FORTRANのライブラリ呼び出すのあったね
今はextern宣言か
extern "C++"とか
353(1): 2016/01/17(日)14:03 ID:WTe5Q/ML(1) AAS
サポートされる種類は環境依存だし
構文は実装依存だから
規格では書いてない
とりあえず wikipedia 見れば
354(1): 2016/01/18(月)06:53 ID:TV7ry5Rb(1) AAS
>>353
環境依存と実装依存ってどう使い分けてるんだ?
355: 2016/01/18(月)08:53 ID:XM4mBu50(1) AAS
>>354
実装であるgccはいろんな環境(プラットフォーム)で動いてる
構文はどの環境でも同じだが
どんな呼び出し規約のライブラリがあるかは
環境ごとに違う
356(3): 2016/01/19(火)11:13 ID:79hXpIDE(1) AAS
新しいコンパイラを作る際、わざわざ「手動でスタックを積み上げたり
開放したりする」命令は、あった方が良いのかな?
メモリ節約や速度に直接、関係するなら言語仕様を作る段階で
考えるけどね。今のパソコンはスピードが速いから、不要といえば不要かも
しれないが。
357: 2016/01/19(火)12:41 ID:uAThxx94(1) AAS
そのレベルならインラインアセンブラみたいな
抜け道を作るかどうかって話になるんじゃないの
358: 2016/01/19(火)21:16 ID:j62B2E0v(1) AAS
>>356
命令ってどういうこと?
Cのallocaみたいなのを言ってるの
359: 2016/01/19(火)23:54 ID:Xdnj5x+8(1) AAS
確保開放やらはSPレジスタをいじるでいいんじゃないかな・・・
SP変更時に無効なSP値だったらエラーにするとかその程度で
コンパイラもよほど変な事しない限りpush/pop命令なんて使わんし
360: 2016/01/20(水)12:29 ID:zFAeGKrq(1) AAS
>>356
言語自体の仕様にも依るんじゃないかな。
あと用途とか。
モノリシックカーネルのドライバ書くのに使いますーCとアセンブリの良いとこ取りですーってんなら
手動でスタック積んだり降ろしたりする命令も使うだろうけど
いまいち用途がピンと来ない。
仮にllvm-irの使用を前提にするなら、ネイティブのスタック積んだり下ろしたりするのって意味あんの?っていう議論もありか?
言語仕様を練ってて
シンプルな構文にシンプルな継続(のようなもの)を追加したら
全体的に美しさに欠ける感じになって悩んでる。
361: 2016/01/22(金)12:29 ID:97wZpIfH(1) AAS
高級言語の側で、わざわざ、pushやpop命令を言語仕様に入れる必要は
なかったか。メリットも予想ほどないみたいだな。
実行上で、スピードアップになるかと思っていたが。
362: 2016/01/22(金)12:55 ID:8nADuqf6(1) AAS
メモリやキャッシュはレジスタよりずっと遅いからなぁ。
レジスタへのアクセスに対してL1キャッシュのアクセスには2〜3倍の時間が掛かるって言われてる。
つまり、レジスタ間mov命令に対してpush/popは1命令あたり2〜3倍遅いって事だ。
C言語のregister修飾子は知ってる?変数がレジスタに乗っかるようにする為の物なんだけど。
グラフ彩色で変数生存期間に対するレジスタの使用を最適化出来る事が知られる以前の産物だから、今は滅多に使われないけどね。
363(1): 片山博文MZ ◆T6xkBnTXz7B0 2016/01/22(金)13:18 ID:0V0RVdAH(1/2) AAS
バイト列xからバイト列C(x)への変換器Cがあるとき、
Cの逆変換器C^(-1)を求める一般的な方法は何か?
364: 2016/01/22(金)20:49 ID:TW3FacBd(1) AAS
>>363
逆アセンブラです。
365: 2016/01/22(金)21:58 ID:bvwDmPF2(1) AAS
変換器Cの変換の性質がbijectiveであるという条件をつけなければいけないのではないか。
366: 2016/01/22(金)22:13 ID:9qqofano(1) AAS
この方法が分かれば、どんな暗号文も解読できるね!
367: 片山博文MZ ◆T6xkBnTXz7B0 2016/01/22(金)22:54 ID:0V0RVdAH(2/2) AAS
数学板でじっくり考えることにしたよ。
有限数列上の変換について [無断転載禁止]・2ch.net
2chスレ:math
368: 2016/01/23(土)09:04 ID:VPAh/uPo(1) AAS
変換器が可逆計算できるとは限らないから一般的な方法は無いだろ。
369: 2016/01/23(土)15:07 ID:0d2orZXz(1) AAS
メモ化とテーブルルックアップw
370: 2016/01/31(日)19:36 ID:T/RwY0g5(1) AAS
多少勉強すると、いまさらながら、Cがアセンブラにかなり近いレベルの
言語であることが、良くわかるな。
その分、マスターするのに時間もかかったが。
371(1): 2016/01/31(日)19:52 ID:Vno/qq2m(1) AAS
C言語をマスターしたって奴は絶対に信用しないことにしている
372: 2016/01/31(日)20:53 ID:7LoAMsY1(1) AAS
入門書一冊読みました=マスターしました
373: 2016/01/31(日)21:17 ID:QH+McMgz(1) AAS
これが本当のマスターベーション
374: 2016/02/01(月)16:11 ID:aq9Mx2ga(1) AAS
そんなあなたにスタンディングマスターオベーション
375: 2016/02/02(火)10:57 ID:9eq1u0GM(1) AAS
>>371
「C言語をマスターしました」
という奴の化けの皮をはがすのは、意外に簡単だからな。
簡単な計算機プログラムを書かせるか、あるいは、ピタゴラスの定理の
コードでも書かせるか。もっとも、そこで化けの皮がはがれるようなら、
とてもコンパイラの領域まで、進むことは出来ないだろうな。
376(1): 2016/02/02(火)11:36 ID:7f7wf/mW(1/2) AAS
コンパイラを書ける最低レベルに達しているかどうかの判定がしたければ
「入力された多項式を微分する関数書くならどう書く?」ってくらいは聞きたいけど。
C言語云々じゃなくてデータ構造とアルゴリズムの問題だけど、
Cでやるならポインタと再帰とラムダ算法について知ってなきゃ答えられない。
上下前次1-新書関写板覧索設栞歴
あと 273 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.019s