diff --git a/content/Coqの勉強.md b/content/Coqの勉強.md index 484536c9..d78f2b63 100644 --- a/content/Coqの勉強.md +++ b/content/Coqの勉強.md @@ -1,4 +1,4 @@ -#programming-language #memo #logic +#programminglanguage #memo #logic [[Coq]]を用いた定理証明支援の基礎 diff --git a/content/Extempore.md b/content/Extempore.md index 935d6735..20611e19 100644 --- a/content/Extempore.md +++ b/content/Extempore.md @@ -1,4 +1,4 @@ -#programming-language #sound +#programminglanguage #sound Andrew Sorensenが作ったLispライブプログラミング環境。 diff --git a/content/Faust.md b/content/Faust.md index 23b53963..4e636793 100644 --- a/content/Faust.md +++ b/content/Faust.md @@ -1,3 +1,3 @@ -#software #programming-language #sound +#software #programminglanguage #sound https://faust.grame.fr \ No newline at end of file diff --git a/content/Lua.md b/content/Lua.md new file mode 100644 index 00000000..0c0685c7 --- /dev/null +++ b/content/Lua.md @@ -0,0 +1,52 @@ +#programminglanguage + +軽量で埋め込みやすいスクリプティング言語。音楽用ソフトでは[[Reaper]]とかでも使われている。 + +コンパイラは基本的なやつはANSI Cで実装されている。 + +JITコンパイラで超高速に動く別の処理系[[LuaJIT]]もある + +Luaでオーディオビジュアルライブコーディングをするための[[LuaAV]]などがある(更新されてないけど) + +動的型付けで手続き型っぽいが、関数を第一級オブジェクトとして扱える。そのためクロージャを使用できるが、この実装にupvalueという方式を採用していることで有名(?) + +tableというArrayと連想配列の両方が扱えるような唯一のデータ構造をもち、tableに関数を放り込むことでオブジェクト指向っぽくメソッドを定義することもできる。 + +FFIでは、C言語側でユーザーデータというC言語側からしか直接触れないデータを経由する(LuaからはC言語側で別途定義したデータ操作用の関数を叩く)ことでアプリと繋ぐことがしやすい仕組みになっている。標準ライブラリのファイルIOとかもこの仕組みで実装されているらしい。 + +GCは最新の実装ではインクリメンタルマーク&スイープ。 + +Cからアクセスするには`luaState*`を受け取って`int`を返す関数だけを通じて、LuaのVMのスタックに値を積んだり、取り出したりすることで操作するような感じになる。 + +数値型は基本的に64bit floatのみ(埋め込む時はコンパイル時にマクロで切り替えることができる)。内部的にはIntとかboolの区別はあって、いい感じにキャストできるようになっている。 + + + +## リファレンス + +[Lua 5.4 Reference Manual](https://www.lua.org/manual/5.4/) + +[Lua 5.3 マニュアル日本語訳](http://milkpot.sakura.ne.jp/lua/lua53_manual_ja.html) + +言語機能もそうだが、埋め込み用のC APIの説明では結局内部の設計について知らないと動かせないので言語開発者向けの情報が多い感じ。 + +## upvalue関連 + +[1パスコンパイラでのクロージャの実装方法(Upvalue)](https://tyfkda.github.io/blog/2020/01/03/clox-closure.html) + +[[Crafting Interpreter]]で解説されているUpvalueの日本語での分かりやすい解説 +## Rustでの実装 + +[Writing a minimal Lua implementation with a virtual machine from scratch in Rust](https://notes.eatonphil.com/lua-in-rust.html) + +パーサと簡単なVMの実装。GCとかはない + +[Build a Lua Interpreter in Rust](https://wubingzheng.github.io/build-lua-in-rust/en/) + +ほぼフル機能の実装チュートリアル。中国語からの英語自動翻訳だが普通に読める。特にクロージャやupvalue周りの実装が参考になりそう。GCに関してはRustの`Rc`をそのまま使っているため、VMの機能としては存在しない。 + +Lua C APIではCのクロージャを投げるときには、そもそもC言語にクロージャがないので何が嬉しいのかよくわからない感じだったが、このチュートリアルの実装だとRust側から`Rc>>`のクロージャを投げることができるので、Rustの中でLuaを埋め込むんだったら分かりやすくて嬉しい。 + +[purua](https://github.com/udzura/purua/tree/2a2007a562fd6e2fdfa6183b0558c4809ec2a212) + +ミニマルな実験的実装。GCとかなさそうだけど、その分コンパクトなので分かりやすいかも。なぜか途中でコードをほぼ全部消すコミットが積まれていて最新版は中身がなくなっている・・・ \ No newline at end of file diff --git a/content/MetaOCaml.md b/content/MetaOCaml.md index 849183e6..e2228b7f 100644 --- a/content/MetaOCaml.md +++ b/content/MetaOCaml.md @@ -1,4 +1,4 @@ -#programming-language #software #tools +#programminglanguage #software #tools マニュアル diff --git a/content/Rustでの評価文脈(環境)のRAIIっぽい実装.md b/content/Rustでの評価文脈(環境)のRAIIっぽい実装.md index 84dfc971..370a6949 100644 --- a/content/Rustでの評価文脈(環境)のRAIIっぽい実装.md +++ b/content/Rustでの評価文脈(環境)のRAIIっぽい実装.md @@ -1,4 +1,4 @@ -#programming-language #compiler-design +#programminglanguage #compiler-design [chumskyのチュートリアル](https://github.com/zesterer/chumsky/blob/main/tutorial.md)で、評価する関数の実装がライフタイム付きでこんな感じになってたの頭いいなと思ったので、RAIIにしたらもっとシンプルに見えるのではと思った diff --git a/content/The w-calculus a synchronous framework for the verified modelling of digital signal processing algorithms.md b/content/The w-calculus a synchronous framework for the verified modelling of digital signal processing algorithms.md index 2adf5723..9558f746 100644 --- a/content/The w-calculus a synchronous framework for the verified modelling of digital signal processing algorithms.md +++ b/content/The w-calculus a synchronous framework for the verified modelling of digital signal processing algorithms.md @@ -1,4 +1,4 @@ -#paper #programming-language +#paper #programminglanguage https://dl.acm.org/doi/10.1145/3471872.3472970 diff --git a/content/mimium新内部表現の構想.md b/content/mimium新内部表現の構想.md index 1cf5b981..15120c49 100644 --- a/content/mimium新内部表現の構想.md +++ b/content/mimium新内部表現の構想.md @@ -1,4 +1,4 @@ -#memo #mimium #programming-language +#memo #mimium #programminglanguage [[音楽プログラミング言語の形式化#mimium と 多段階計算]] diff --git a/content/otopoiesis.md b/content/otopoiesis.md index 181accf9..84b61673 100644 --- a/content/otopoiesis.md +++ b/content/otopoiesis.md @@ -1,5 +1,5 @@ -#programming-language #sound +#programminglanguage #sound https://github.com/tomoyanonymous/otopoiesis diff --git a/content/依存型.md b/content/依存型.md index 67b46081..3562b748 100644 --- a/content/依存型.md +++ b/content/依存型.md @@ -1,4 +1,4 @@ -#programming-language +#programminglanguage 項でインデックス付された型 diff --git a/content/多段階計算.md b/content/多段階計算.md index 60dee313..7c9364f1 100644 --- a/content/多段階計算.md +++ b/content/多段階計算.md @@ -1,4 +1,4 @@ - #programming-language + #programminglanguage メタプログラミングの技法の一種。[[MetaOCaml]]などが有名 diff --git a/content/秋葉原と上野の歴史.md b/content/秋葉原と上野の歴史.md index c979fe64..4034821f 100644 --- a/content/秋葉原と上野の歴史.md +++ b/content/秋葉原と上野の歴史.md @@ -33,6 +33,6 @@ - https://ueno-bunka.jp/history/ - [国立西洋美術館50年史: 1959-2009: 昭和34年度-平成20年度](https://nmwa.repo.nii.ac.jp/records/769) - [上野観光連盟-上野の歴史](https://ueno.or.jp/history/) -- [科学博物館 概要2020](https://kahaku.go.jp/about/summary/imgs/kahaku_outline2020.pdf) +- [科学博物館 概要2020](https://www.kahaku.go.jp/about/summary/imgs/kahaku_outline2020.pdf) 科学博物館の方が西洋美術館より先だったってのはちょっと意外だな diff --git a/content/竹内関数で音楽.md b/content/竹内関数で音楽.md new file mode 100644 index 00000000..d6b82183 --- /dev/null +++ b/content/竹内関数で音楽.md @@ -0,0 +1,7 @@ +#programminglanguage #music + +再帰関数の実装のベンチマークなどでよく使われる竹内関数(たらい回し関数) + +[[aike]]さんの記事 + +https://aike.hatenablog.com/entry/20111112 \ No newline at end of file diff --git a/content/継時再帰.md b/content/継時再帰.md index 565096c9..639b82fe 100644 --- a/content/継時再帰.md +++ b/content/継時再帰.md @@ -1,4 +1,4 @@ -#programming-language +#programminglanguage Temporal Recursionとも。 diff --git a/content/音楽プログラミング言語.md b/content/音楽プログラミング言語.md index 2b17f4de..d3fbb006 100644 --- a/content/音楽プログラミング言語.md +++ b/content/音楽プログラミング言語.md @@ -1,4 +1,4 @@ -#research #programming-language #sound +#research #programminglanguage #sound やっているプロジェクト @@ -13,4 +13,8 @@ [[Rustでの評価文脈(環境)のRAIIっぽい実装]] -[[Cranelift]] \ No newline at end of file +[[Lua]] + +[[Cranelift]] + +[[竹内関数で音楽]] \ No newline at end of file diff --git a/content/音楽プログラミング言語の形式化.md b/content/音楽プログラミング言語の形式化.md index 1c2b790d..88d90fab 100644 --- a/content/音楽プログラミング言語の形式化.md +++ b/content/音楽プログラミング言語の形式化.md @@ -1,4 +1,4 @@ -#programming-language #research +#programminglanguage #research ## 先行例