PLPLのメモ
流れが速いので、その内辿れなくなりそうなので、mrsekut.iconが気になったものをコピペしておく。
リンクは貼ったところでアクセスできなくなって悲しくなりそうなので、コピペする
mrsekut.iconが消化したら消していく
でかすぎるな。ノート分けるかー?
arch
実装よりの話をするところ
2019/6/3
general
go
jit
http://www.complang.tuwien.ac.at/forth/threaded-code.html
上にあげた論文では「Native code」という亜種として紹介されていますが、VMの実行ループの速度向上を追求した結果、もはやVMインタプリタではなく原始的なJITになってしまっているという。
ただ、Cでコンパイルしたコード片をコピペして連結するよりは、普通に機械語を吐いた方が効率的な気がします。 ref
lisp
言語紹介
Odin
https://odin-lang.org/
https://github.com/odin-lang/Odin/blob/master/src/ir_opt.cpp
IR から要らないコード削ってて頑張ってる感じが見える
Guarded Horn Clauses
https://ja.wikipedia.org/wiki/Guarded_Horn_Clauses
並列論理プログラミング言語
Prologで言うゴールが並列処理される。各ホーン節にガードを記述でき、これで実行するか否かを制御する。
Jai
https://www.youtube.com/watch?v=TH9VCN6UkyQ
現状まだClosed Sourceですが、Jaiという言語があります。
PCゲーム開発者として有名なJonathan Blow氏が作っている言語で、ゲーム開発に向いた言語を目指しているようです。
コンパイル時実行、GC less、シンプルな所有権、暗黙のコンテキスト、高速なコンパイルあたりが気になりました。
Youtubeに開発の動画が上がっているので見てみると面白いかもしれません。
papers
PLDI2018
https://gist.github.com/zacky1972/8efab9b9eb6fe0221cb2f0dc46106e16
メモリの高速性とストレージの永続性を兼ね備えている persistent memory を言語処理系からどのように扱うかについて論じている。 ファイルシステムやデータベースなどを考察する際には参照したい論文だと思われる。
https://gist.github.com/zacky1972/8084340bf3eb75595de3d19305c6ee39
https://gist.github.com/zacky1972/02f534e5342d4ee38c03c15a9a80f133
2新浮動小数点数を10進数に変換する新しいroutineであるRyuについて
従来のものよりシンプルで、3倍速い
https://gist.github.com/zacky1972/6d2436ba4d67011f3a03f94cfa7cbcf6
https://gist.github.com/zacky1972/6d2436ba4d67011f3a03f94cfa7cbcf6
Spiking Neural Networks (SNNs) に特化したメニーコアの neuro-morphic processor (人間の神経細胞を模したプロセッサ) である Loihi 向けのコンパイラを作った話
https://gist.github.com/zacky1972/c46e71dbe65e8b49c0508f735bd40672
型の話
おもしろそう
2019/6/3
Rust
2019/6/3
雑談
ATEL
https://t-tutiya.hatenablog.com/entry/20160605/1465122023
https://t-tutiya.hatenablog.com/entry/20160605/1465122023
「SmallTalk言語風のオブジェクト間通信」「オブジェクトをVM化して自律制御」「継続(continuation)によるシーン遷移」
言語
emu
Rust実装のGPUプログラミング言語
https://github.com/calebwin/emu
2019/6/3
tools
https://github.com/raviqqe/bdwgc-alloc
RustでBoehm GCをつか溜めのライブラリ
自作言語のランタイムをRustで書きたいけどGCはとりあえずコンサバティブGCでいいや、みたいなときに使ってください。少し前に、Boehm GCにstackful coroutineのサポートが入ったのでそれにも対応してあります。
raviqqe氏作
BNF Converter
https://bnfc.digitalgrammars.com/
コンパイラのfront-endを生成してくれる BNF Converter (bnfc)は,そこそこ面白いです.Labeled BNFという記法で構文を記述すると,lexerジェネレータ(たとえばflex)用, parserジェネレータ(たとえばbison)用コード,プリティプリンタのモジュールコード(C,C++,Java,Haskell) ,ドキュメント用LaTeXファイルを生成してくれます.
intasparse
https://github.com/Engelberg/instaparse
nstaparseというClojureのすばらしいparser generatorがありまして、CFG書いてtransformer書けば大抵の文法は綺麗にいちころです。Lexerも基本いらない/parserの一部として書けちゃいます。残念ながらClojure以外で使えるかどうかは知らないです。
wasm
言語設計
情報共有
https://www.researchgate.net/publication/220284676_Abstract_Machines_for_Programming_Language_Implementation
言語実装のための仮想機械についてのサーベイ論文。JVMからGマシン、果てはawkの実装方式に言及あり
GHCで使われている最適化をまとめた論文
https://www.microsoft.com/en-us/research/publication/a-transformation-based-optimiser-for-haskell/
https://gitlab.haskell.org/ghc/ghc/wikis/commentary/compiler/hsc-main
https://github.com/kekyo/decode2019_CM12
昨日今日と東京で開催されたde:code 2019のCM12というセッション向けに、補足技術資料として書いたものを公開したので共有します。カバー範囲は.NETにおけるマルチプラットフォーム対応テクニックについて考えられる一般的な手法からランタイム内部向けのものまでの概要とポインタです - セッション「CM12: .NET Core マルチプラットフォームの本質」に対応するサンプルコードと解説
http://scheme2006.cs.uchicago.edu/11-ghuloum.pdf
論文紹介ですが、この論文のインクリメンタルなアプローチは8ccに大きな影響を与えていて、Writing an interpreter in Goを書いたThomas Bellさんもたしかこれを参考文献にあげていたと思うので、実は自作コンパイラ界にはわりと影響があった論文なのかも。
https://github.com/namin/inc/blob/master/docs/tutorial.pdf
補助教材
https://craftinginterpreters.com/contents.html
オンラインブック、なんの?
Nystrom氏
https://craftinginterpreters.com/compiling-expressions.html#design-note
http://corecursive.libsyn.com/crafting-interpreters-with-bob-nystrom
https://tanakamura.github.io/pllp/docs/
直接コンパイラではないですがアセンブラとかその辺の入門によさそう?
たなかむらさんの低レイヤプログラミングの入門
http://www.gnu-darwin.org/www001/ports-1.5a-CURRENT/devel/mcpp/work/mcpp-2.6.4/doc-jp/cpp-test.html
Unicode の普及で今となっては若干の古さも感じますが、C プリプロセッサの詳しい解説をこれ以外に知らないです。C の文字の扱いの駄目さ加減とかも、きちんと書かれています
進捗報告