「コンパイラ・スクリプトエンジン」相談室16 (648レス)
1-

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

Wikiのまとめページ
http://www6.atwiki.jp/compilerandscriptengine/
629: デフォルトの名無しさん [] 2019/03/21(木)17:55 ID:YzD9JPpd(1)
esprima/escodegenなんかでJS ASTを扱ってる人に質問。
ASTを舐めて変数の型を推論したものをノードに紐付けて記録しておきたいんだけど、JS ASTの場合
ASTの中にメタデータをぶら下げるのと外で持つのとどっちが一般的なんだろう?
中に持つ場合はどこにどういうプロパティ名でぶら下げるか、外の場合はノードの位置を特定する
パスのようなものが必要になるけどそれをどうするか。
630: デフォルトの名無しさん [sage] 2021/02/24(水)20:03 ID:1LsYaFKv(1)
test
631: デフォルトの名無しさん [sage] 2021/06/01(火)15:18 ID:IjgT90G7(1/2)
お前ら元気か?
Prologおじさんが2003年頃からPrologの人気がなくなったとか言ってたんだが、2chのせいではないかと思ってきてみたぜ。
めっちゃ過疎ってるじゃないか。というか2chいつの間にか5chになってたんだな。

Prologは操作的意味論をそのまま書き下して言語作れるので良いぞw

% e.pl
e(I, I) :- integer(I).
e(E1+E2, I) :- e(E1, I1), e(E2, I2), I is I1+I2.

:- e(1+2+3+4,R),!,writeln(R).
:- halt.

というファイルを作って
$ swipl e.pl
10
だ。こんな短く言語実装できる言語は他にないぜw
632: デフォルトの名無しさん [sage] 2021/06/01(火)15:25 ID:IjgT90G7(2/2)
Prologなら型システムを作るのもお手の物だ。
t(I,int):- integer(I).
t(E1+E2,int):- t(E1,int), t(E2,int).
:- t(1+2+3,T),!,writeln(T).
:- halt.
これだけ。Prologは関数というか述語のネストをできなくして
述語の引数は全てクォートとされた式のように扱われ、
変数がアンクォートな感じに書ける。
故にLispのS式より複雑な優先順位付きの演算子を使った式が扱えて便利だ。
ってことで、暇な奴がいたら使ってみて欲しいんダゼ。
じゃあなw
633: デフォルトの名無しさん [sage] 2021/06/23(水)07:02 ID:HYjDIJ1V(1)
Prolog興味あるけどCとかJavaとかPythonとかのメジャーどころと違って教科書みたいなアカデミックな本しか見つからないから並以下グラマの俺には無理
634: デフォルトの名無しさん [sage] 2021/10/13(水)08:22 ID:Qk99MJFD(1)
岩波のprologのプログラミング作法読んでみたら?

第5世代が成果をオープンソースに出来ていればなあ
635: デフォルトの名無しさん [sage] 2023/07/05(水)03:42 ID:e/cCV0Lv(1)
>>311
人は死後49日は漂うと云われているな
636: デフォルトの名無しさん [sage] 2023/09/24(日)11:28 ID:Iodo3XEj(1)
インタプリタの作り方 −言語設計/開発の基本と2つの方式による実装− - インプレスブックス
https://book.impress.co.jp/books/1122101087
637: デフォルトの名無しさん [sage] 2023/10/06(金)08:06 ID:NmxdZAP9(1)
バックエンドの作り方はググれば解説が出てくるが
“実用的な”バックエンドの作り方はさっぱりわからない
RX用のバックエンドが欲しいんだがなー
638: デフォルトの名無しさん [] 2023/11/11(土)06:58 ID:uMtlBPBy(1/2)
double a = 2.71828;

というコードをコンパイルするときに、2進浮動小数点数に変換しないといけないと思います。
2進数浮動小数点数に丸めるときに、四捨五入(0捨1入)したり、一番近い2進浮動小数点数に変換したりといろいろな方法がありますが、その方式を決定するのもコンパイラの仕事ですか?

計算機イプシロンを ε_M とします。
2進浮動小数点数に丸めるときの方式として、四捨五入(0捨1入)が採用されているかどうかを確かめる方法として、

eps = 2^(-52)
1 + (1/2) * eps

を計算させて、それが 1 + eps に等しいかどうかをみるという方法が数値解析の本で紹介されています。

1 + (1/2) * eps

を計算するときに、丸めとかで変な浮動小数点数になって、この紹介されている方法が実行できないとかないですか?
639
(1): デフォルトの名無しさん [] 2023/11/11(土)07:01 ID:uMtlBPBy(2/2)
あと、

double a = 2.71828 * 3.141592;

というコードがあったとき、

コンパイラは、 2.71828 を丸めた2進浮動小数点数と 3.141592 を丸めた2進浮動小数点数を掛けよという機械語に翻訳するんですか?
それともこんな簡単な計算はコンパイラで予め行って、その結果を a に代入するという機械語を生成するんですか?
640: デフォルトの名無しさん [] 2023/11/11(土)08:35 ID:fuGMacjx(1/2)
double a = math.E + path.PI;
641: デフォルトの名無しさん [] 2023/11/11(土)08:37 ID:fuGMacjx(2/2)
宿題は宿題スレへ
642: デフォルトの名無しさん [sage] 2023/11/11(土)11:05 ID:5AzCeqvD(1)
はい
あります
はい
場合によります(最適化という追加処理)
643: デフォルトの名無しさん [age] 05/12(月)14:33 ID:Zw0HuL6G(1)
こういう言語作る系スレが廃れた原因は何だろう
644: デフォルトの名無しさん [sage] 05/12(月)15:01 ID:zCv6/zTu(1)
>>639
そういうコードはコンパイル時に計算されて
実行時には計算結果がそのまま代入されるけど
「コンパイル時に計算」の際の浮動小数点数での計算の扱いには無頓着で良いと思ってるの?
645: デフォルトの名無しさん [sage] 05/12(月)15:24 ID:FL+WAIid(1)
C言語にはfesetenvのような浮動小数点数プロセッサのモード切替関数もあるからな
コンパイル時に計算してしまうことでそれが反映されなくなるのもそれはそれで問題になるケースがある
646: デフォルトの名無しさん [sage] 05/13(火)09:27 ID:C/NhftFY(1)
Rustなら多い日も安心
647: デフォルトの名無しさん [sage] 06/30(月)18:56 ID:YQWckD/5(1)
あれから色々勉強しましたがCoq(Rocq)での証明や Prolog で操作的意味論や型システムを書くのは楽しいです。
11年かぁ。
$ apt install swi-prolog
$ vi e.pl
e(I,I):- integer(I).
e(E1+E2,I):- e(E1,I1), e(E2,I2), I is I1+I2.
:- e(1+2+3+4,I),writeln(I).
:- halt.
$ swipl e.pl
10
と簡単に言語を作れるので便利だし、最近はAIがプログラム書いてくれるし便利になったなぁ。
648: デフォルトの名無しさん [sage] 07/12(土)09:48 ID:tq7D7WVM(1)
書き込み消えた気がする。
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.010s