Merge remote-tracking branch 'origin/v4' into v4

This commit is contained in:
Tomoya Matsuura(MacBookPro) 2023-09-12 23:36:37 +09:00
commit 1e2d05fa57
16 changed files with 78 additions and 15 deletions

View File

@ -1,4 +1,4 @@
#programming-language #memo #logic
#programminglanguage #memo #logic
[[Coq]]を用いた定理証明支援の基礎

View File

@ -1,4 +1,4 @@
#programming-language #sound
#programminglanguage #sound
Andrew Sorensenが作ったLispライブプログラミング環境。

View File

@ -1,3 +1,3 @@
#software #programming-language #sound
#software #programminglanguage #sound
https://faust.grame.fr

52
content/Lua.md Normal file
View File

@ -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<RefCell<Box<dyn FnMut>>>`のクロージャを投げることができるので、Rustの中でLuaを埋め込むんだったら分かりやすくて嬉しい。
[purua](https://github.com/udzura/purua/tree/2a2007a562fd6e2fdfa6183b0558c4809ec2a212)
ミニマルな実験的実装。GCとかなさそうだけど、その分コンパクトなので分かりやすいかも。なぜか途中でコードをほぼ全部消すコミットが積まれていて最新版は中身がなくなっている・・・

View File

@ -1,4 +1,4 @@
#programming-language #software #tools
#programminglanguage #software #tools
マニュアル

View File

@ -1,4 +1,4 @@
#programming-language #compiler-design
#programminglanguage #compiler-design
[chumskyのチュートリアル](https://github.com/zesterer/chumsky/blob/main/tutorial.md)で、評価する関数の実装がライフタイム付きでこんな感じになってたの頭いいなと思ったので、RAIIにしたらもっとシンプルに見えるのではと思った

View File

@ -1,4 +1,4 @@
#paper #programming-language
#paper #programminglanguage
https://dl.acm.org/doi/10.1145/3471872.3472970

View File

@ -1,4 +1,4 @@
#memo #mimium #programming-language
#memo #mimium #programminglanguage
[[音楽プログラミング言語の形式化#mimium と 多段階計算]]

View File

@ -1,5 +1,5 @@
#programming-language #sound
#programminglanguage #sound
https://github.com/tomoyanonymous/otopoiesis

View File

@ -1,4 +1,4 @@
#programming-language
#programminglanguage
項でインデックス付された型

View File

@ -1,4 +1,4 @@
#programming-language
#programminglanguage
メタプログラミングの技法の一種。[[MetaOCaml]]などが有名

View File

@ -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)
科学博物館の方が西洋美術館より先だったってのはちょっと意外だな

View File

@ -0,0 +1,7 @@
#programminglanguage #music
再帰関数の実装のベンチマークなどでよく使われる竹内関数(たらい回し関数)
[[aike]]さんの記事
https://aike.hatenablog.com/entry/20111112

View File

@ -1,4 +1,4 @@
#programming-language
#programminglanguage
Temporal Recursionとも。

View File

@ -1,4 +1,4 @@
#research #programming-language #sound
#research #programminglanguage #sound
やっているプロジェクト
@ -13,4 +13,8 @@
[[Rustでの評価文脈環境のRAIIっぽい実装]]
[[Cranelift]]
[[Lua]]
[[Cranelift]]
[[竹内関数で音楽]]

View File

@ -1,4 +1,4 @@
#programming-language #research
#programminglanguage #research
## 先行例