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

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

Wikiのまとめページ
http://www6.atwiki.jp/compilerandscriptengine/
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にもあるんかいな。
いい加減、日本の著作権法にもフェアユースを
明記してほしいよな。
2016/04/04(月) 16:51:18.37ID:nzuN3Nfl
MindのUnicodeとか版コンパイラ作りたい
433デフォルトの名無しさん
垢版 |
2016/04/04(月) 21:22:22.97ID:DatNOwTQ
VC++のWindowsAPIの説明がわかりづらかったので、Delphiを使い始め
たら、同じく日本語化がまったくされておらず、詳しい人に聞いたら、
「翻訳してはならない」と聞かされて唖然としたよw
今では、遠い昔の話だが。
2016/04/06(水) 23:25:48.22ID:WLNAeUhL
やっと関数の外側をパースできたわ
435デフォルトの名無しさん
垢版 |
2016/04/09(土) 04:04:13.10ID:NXdWBRID
「豊富なライブラリやツール群を用意した、高額のコンパイラ」と、
「格安のコンパイラだが、別売オプションのライブラリも用意しないと、
たいしたソフトは作れない」ものでは、商売上、どちらが賢いだろうか?
436デフォルトの名無しさん
垢版 |
2016/04/09(土) 04:51:56.27ID:u1ofpue+
どっちも無理
2016/04/09(土) 07:04:44.02ID:FoBfIIvs
頭いい大学行くとコンパイラ理論とか習えたのかな?

独学してるけどさ、あらゆる犠牲を払わなきゃ理解、応用するまでいかなくない?
2016/04/09(土) 09:51:43.80ID:VHmuSaPj
京大はCコンパイラを全員に書かせるって聞いた
2016/04/09(土) 10:55:12.53ID:yIzAT5uL
コンパイラを自作するのは意味があるけど
Cが引きずるクソ設計を知ったら二度とC/C++をつかわなくなるはず
2016/04/09(土) 16:46:46.79ID:NknyIt7s
PascalのコードをCのコードに変換するプログラムを作れとかいう
何も考えずに出題されたとしか考えられない課題にはマジで困った

まず、関数内関数とかCに無いですしお寿司
適当な名前付けてグローバルに放り出すとしても
それだけではローカル変数のキャプチャが出来ないから
どうすんだこれ?って感じで、まぁ引数で渡すしかないんだけど
課題提出までの時間も全然足りてないし、誰も出来なかった
2016/04/09(土) 17:17:55.52ID:yIzAT5uL
>>440
しかるべきところにぶち上げて資質を問うべき
2016/04/09(土) 17:43:08.14ID:YNau7unG
ローカル変数は参照渡しすればいいだけじゃね?
2016/04/09(土) 21:34:08.79ID:YC7vrxdl
>>440
要するに p2c 作れってことだろ
パクれとは言わんけどコード参考にすればいいだけ
2016/04/10(日) 02:18:39.46ID:tVvAXki7
>>440
それ何日でやれと言われたんだ? 不可能では無いけど課題と言うにはレベル高すぎてビックリ
2016/04/10(日) 03:55:26.52ID:DcOaBboz
昔の事でよく覚えてないが、一か月ぐらいじゃなかったかね、良くわからんが

笑えるのが、そのソフトを作ること自体は前座でしかなく
その後、作ったソフトを持ち寄って、レビューか何かをするのが本題の講義であって
ソフトは皆で議論をする上での、ほんの話題のための「種」にすぎないってのがね
よくあるじゃない、プロジェクトマネンジメントとかコードレビューとかの
ちょっと実際のプロジェクトを模範した感じの、実戦風のワイワイガヤガヤ系の講義
あんな感じのやつだった
これがコンパイラの講義の課題ならまだわかるんだけどねぇ
どちらにせよ、プログラミング覚えたての学部生には酷な課題
二年生でC習って、三年生でいきなりこれ作れって、そりゃ無理ですって
普通にPascalのインタプリタ作るのだって、実力的にまだ厳しいのに
そこからさらにCに変換しろだなんて

いくつかのチームに分かれていて、チームごとに与えられる課題は違っていたんだけど
俺は最も簡単な課題が当たったから何でもなかったけど
2016/04/10(日) 09:23:24.83ID:fTRAmtFw
関数内関数ってトランスレーター的には別に難しくないだろ
3日もあればできるんじゃね
2016/04/10(日) 09:34:58.78ID:372ncJJS
>>440 > マジで困った
>>445 > 何でもなかったけど
痴呆症乙
2016/04/10(日) 10:26:51.59ID:hSypwT6Y
誰も提出できなかったけど本題じゃないから授業は進んだってことだろ
2016/04/10(日) 11:06:35.40ID:jQD3kWDp
ただのホラフキ―じゃん
450デフォルトの名無しさん
垢版 |
2016/04/11(月) 11:50:30.22ID:3nONGRtl
大昔のMacはpascalでの開発を前提にしていたからな。
(Macツールボックスは、Pascalで呼び出しを前提にしていた)
途中からはCやC++用にツールは変貌していったが。
2016/04/11(月) 17:10:55.05ID:suuESVM3
>>450
なつかしすぎるなぁ、light speed Cとか買ったとき「ああ、これでCで書ける」などと感動したわ
2016/04/11(月) 18:25:37.58ID:8c5Uimxv
C言語より動的型付け言語の方が先に広まってたって意外だなあ
453デフォルトの名無しさん
垢版 |
2016/04/12(火) 02:21:49.83ID:0eQ6kuw9
AppleのMPW。あるいはハイパーカード。
Think Cや、Code Warriorなど、一時は、Macで夢のようなソフト作りに
あこがれた時期もあった。でも、遠い昔の話だ。
2016/04/12(火) 09:22:22.73ID:Pd8H+utR
静的型付けのほうが高度なんだよ
2016/04/13(水) 01:10:21.79ID:inw4nZY2
俺もアセンブラ→静的型→動的型の順で作られてきたと思ってたけど
ジョブスの伝記漫画でウォズがアセンブラでBasic作る話があったような気がする
2016/04/13(水) 01:14:40.21ID:rXMD6+sH
基本文字列だけでいいんだよ
型なんて文字列をどう解釈するかの話だよ
2016/04/13(水) 01:23:46.16ID:2h1lI58Z
>>455
しらないのか?Microsoft
458デフォルトの名無しさん
垢版 |
2016/04/13(水) 13:34:00.12ID:a0UNLavD
もっとも愛着のあるコンパイラは、Quick BASICだった。
遠い昔の話。でも、凄く使いやすかったんだよな。
2016/04/13(水) 17:57:30.26ID:V3wVZgaP
コンパイラの初心者本?

「Tiny BasicをCで書く」
出版社: ソシム (2016/4/22)
ISBN-10: 4802610203
ISBN-13: 978-4802610209
460デフォルトの名無しさん
垢版 |
2016/04/14(木) 00:25:42.75ID:Nyx2HJFW
関数の先頭にfunctionキーワードを付けるとして長すぎるから変えようと思うんだけど
doとかjobではおかしいかなあ?
2016/04/14(木) 01:10:11.46ID:FsF2j7W4
>>460
fnじゃだめなん?
Clojureだと(fn [arg] brabrabra)な感じ
462デフォルトの名無しさん
垢版 |
2016/04/14(木) 01:29:14.13ID:Nyx2HJFW
>>461
rustのfunc, iface, modとかもそうだけど省略形はいまいちだなと思う
rubyにfor() do {}構文があるんだけど、それで関数やラムダ式の記号に
do良さげかなと思うんだけどどうかな?
2016/04/14(木) 02:42:08.95ID:co1HctEv
コンパイラの醍醐味は式の展開だから、ここを自分で書ければあとはそれほど難しくないw
2016/04/14(木) 08:30:10.02ID:BY7gxQ6D
define ならわかるが do はないだろう
2016/04/14(木) 09:12:23.12ID:d9D6y2bX
dogazer
2016/04/14(木) 09:35:38.15ID:HeHUqy+f
関数も変数もletで
467デフォルトの名無しさん
垢版 |
2016/04/14(木) 12:27:04.84ID:kJxBjGsl
予約語テーブルに何を入れるかが難しい。
何でも詰め込みすぎると、肥大化しすぎたC++になってしまうし。
2016/04/14(木) 18:04:51.72ID:FsF2j7W4
>>462
そうかなぁ?
一般名詞や動詞とかぶりそうも無い省略形ってコンピュータ言語には向いているとおもうのだ。
defunとかdefnとか
無名関数作るのにはUnicode圏が一般化した今ならλ一文字とか
2016/04/14(木) 20:06:31.03ID:VC8/A0Ig
略語もセンスがいるよな
ところで、defunって何の略?
どうでも良いけどλなんか変換しなきゃ出てこないし入力速度最悪だな
2016/04/14(木) 20:21:19.82ID:gC/abIq/
>>469
> defunって何の略?
DEfine FUNction じゃね?
2016/04/14(木) 20:43:14.68ID:FsF2j7W4
>>469
>>470氏が書いているけどdefine functionの略だよ、common lispとかemacs lispとかでつかわれてる
λ自体は”lambda”をテキストエディタ側で差し替えるとか一文字入力のマクロをバインドすればいいだけだと思うのだよね(IDE作り込みの一環)

どっちかっつーとワタシの一押しは関数定義の宣言句に省略形を許せば良くない?ってだけなのでスレ違いではある。
2016/04/17(日) 00:39:50.58ID:SCILLDG5
letはconstの代わりに使う言語があるね

関数宣言にdoがないとなると色々と候補に悩んでしまうぜ
job, fun, flow, verb, work, act(action)
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等の特殊な予約語彙だけ文の開始から除外すれば後者の方法で関数は定義できると思うのだけど。
2016/04/17(日) 03:41:30.77ID:SCILLDG5
>>473
>予約語なくせば?
変数宣言でも関数宣言でも先頭に予約語が付いてIDEが色つけてくれた方が見やすいじゃない?

もしくは関数宣言をすべて関数ポインタ(クロージャ?)のみにして、変数化してしまうか?
var function-name = ->(args...){ ... }
2016/04/17(日) 16:43:33.52ID:3szJoJiC
基本的に、普通のブロックと、関数(クロージャ)との、区別をどうするかという問題が有るからね
普通のブロックは大体{ something }こんな感じだろうけど、これは呼び出しなしで即座に実行するのが普通
一方でクロージャは呼び出さない限りは実行されない
関数やクロージャなどを引数に取る関数が有ったとして
func_name( { something } );
こんな感じに呼び出した場合、{ something }を実行した結果を関数に渡すのか
{ something }その物を関数に渡すのか、コンパイラはよくわからない
func_nameの呼び出し引数の型がクロージャであることをコンパイラが分かっていたとしても
{ something }を実行した結果がクロージャになり、それを関数に渡すという可能性もあるのでコンパイラは判断できない
そのため、明確にするためにfunc_name( function{ something } );のように
何か普通のブロックとクロージャを区別する文法が要るのだね
そうこうしていると、Javascriptが出来上がる
2016/04/17(日) 17:47:06.17ID:SCILLDG5
結局function代替ワードが必要だと気付く
ラムダ記号=>だと引数に使うときダサイもんね
477デフォルトの名無しさん
垢版 |
2016/04/18(月) 12:27:13.85ID:keXFBRJQ
新しいコンパイラを使うとき、「特有のクセのある」
のがグラフィック関数なんだよな。
個人的には、グラフィック関数も、ANSIで定めて欲しいくらい。
2016/04/18(月) 13:16:18.87ID:pknZG/q+
グラフィックなぁ
b800:0000らへんを好き勝手に弄らせてくれるなら歓迎するのだわ # ネタが古いか
2016/04/19(火) 13:33:12.70ID:6Wh9TF6d
8色でいいんか?
480デフォルトの名無しさん
垢版 |
2016/04/20(水) 02:49:26.81ID:dZcIDvSg
最近はいじっていないので、最新のツールはよくわからんが、
昔のツールでは、RGBの三原色を元に、すべてのグラフィックを
再現していたからなあ。今考えると、ずいぶん、原始的だった。
481デフォルトの名無しさん
垢版 |
2016/04/20(水) 05:43:15.95ID:wqKcWsga
>>480
最新をよくわかってないのによく原始的だと解るね?
2016/04/20(水) 06:55:13.29ID:XnBYIzBk
シマノのギアの仕組みをよくわかってない俺にもギアのないママチャリは原始的だと思う
483デフォルトの名無しさん
垢版 |
2016/04/20(水) 07:16:40.91ID:wqKcWsga
自転車に例えるなら車輪を回転させて走らせるのは原始的だったなぁって言ってるのが >>480 なんだけどね
2016/04/20(水) 07:52:09.40ID:UfNx2Znx
えっ今もRGBじゃないの?
2016/04/20(水) 08:22:02.22ID:r07pzD8i
>>483
それはお前が勝手にそう思ってるだけ
ギア付きのチャリより直結のチャリの方がより原始的なのはわかるだろ?
2016/04/20(水) 08:29:41.63ID:r07pzD8i
>>484
ツールって言うのか何を示すのか、グラフィックっと言うものの範囲にもよる
ディスプレイ表示機構に限定すれば RGB 以外のは見たことない
グラフィックツールの話なら HSB とかの他のカラーモデルを扱えるものはあるし、プリンタは CMYK だし
そもそもこのスレで長々引っ張る話でもないし
2016/04/20(水) 09:12:43.14ID:UfNx2Znx
CMYKなんて大昔からあった
488デフォルトの名無しさん
垢版 |
2016/04/20(水) 10:07:43.41ID:wqKcWsga
>>485
RGBっていうコンピューターグラフィックス上で今でも最も基本的な部分を指して原始的って言ってるからギア云々は的外れって言ってんの
レスを投稿する

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

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