wrote intro

This commit is contained in:
2024-11-28 06:45:07 +00:00
parent 1601229b17
commit 806d5e3afa
5 changed files with 11710 additions and 170 deletions

View File

@@ -7,7 +7,7 @@
$pdf_mode = 3;
$latex = 'platex --kanji=utf8 -synctex=1 -file-line-error -halt-on-error %O %S';
$max_repeat = 4;
$bibtex = 'pbibtex';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars %O %S';
# $bibtex = 'pbibtex';
# $biber = 'biber --bblencoding=utf8 -u -U --output_safechars %O %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';

156
ref.bib
View File

@@ -1,156 +0,0 @@
@inproceedings{arias2021,
title = {The {{W-calculus}}: {{A Synchronous Framework}} for the {{Verified Modelling}} of {{Digital Signal Processing Algorithms}}},
author = {Arias, Emilio Jesús Gallego and Jouvelot, Pierre and Ribstein, Sylvain and Desblancs, Dorian},
year = {2021},
booktitle = {Proceedings of the 9th ACM SIGPLAN International Workshop on Functional Art, Music, Modelling, and Design},
volume = {12},
pages = {35--46},
publisher = {Association for Computing Machinery},
location = {New York, NY, USA},
doi = {10.1145/3471872.3472970},
url = {https://hal-mines-paristech.archives-ouvertes.fr/hal-03322174},
urldate = {2021-08-30},
abstract = {We introduce the W-calculus, an extension of the call-byvalue λ-calculus with synchronous semantics, designed to be flexible enough to capture different implementation forms of Digital Signal Processing algorithms, while permitting a direct embedding into the Coq proof assistant for mechanized formal verification. In particular, we are interested in the different implementations of classical DSP algorithms such as audio filters and resonators, and their associated high-level properties such as Linear Time-invariance. We describe the syntax and denotational semantics of the W-calculus, providing a Coq implementation. As a first application of the mechanized semantics, we prove that every program expressed in a restricted syntactic subset of W is linear time-invariant, by means of a characterization of the property using logical relations. This first semantics, while convenient for mechanized reasoning, is still not useful in practice as it requires re-computation of previous steps. To improve on that, we develop an imperative version of the semantics that avoids recomputation of prior stream states. We empirically evaluate the performance of the imperative semantics using a staged interpreter written in OCaml, which, for an input program in W , produces a specialized OCaml program, which is then fed to the optimizing OCaml compiler. The approach provides a convenient path from the high-level semantical description to low-level efficient code. Publication rights licensed to ACM. ACM acknowledges that this contribution was authored or co-authored by an employee, contractor or affiliate of a national government. As such, the Government retains a nonexclusive, royalty-free right to publish or reproduce this article, or to allow others to do so, for Government purposes only.},
keywords = {Digital Signal Processing,Formal Verification,Linear Time-invariance,Programming Language Semantics,Synchronous Programming},
file = {/Users/tomoya/Downloads/3472970-vor.pdf;/Users/tomoya/Zotero/storage/C48ATPES/full-text.pdf}
}
@inproceedings{gaster2018,
title = {{{OUTSIDE THE BLOCK SYNDICATE}}: {{TRANSLATING FAUST}}'{{S ALGEBRA OF BLOCKS TO THE ARROWS FRAMEWORK}}},
booktitle = {Proceedings of the 1st {{International Faust Conference}}},
author = {Gaster, Benedict R and Renney, Nathan and Mitchell, Tom},
year = {2018},
location = {Mainz,Germany},
abstract = {Folklore has it that Faust's algebra of blocks can be represented in Hughes' algebra of Arrows. In this paper we formalise this understanding, showing that blocks can indeed be encoded with Causal Commutative Arrows. Whilst an interesting finding in itself, we believe that this formal translation opens up new avenues of research. For instance, recent work in functional reactive programming on well typed clocks, could provide an alternative to the dependent type approach proposed for multi-rate Faust.},
file = {/Users/tomoya/Zotero/storage/6X7SPZEM/full-text.pdf}
}
@inproceedings{graf2010,
title = {Term {{Rewriting Extension}} for the {{Faust Programming Language}}},
booktitle = {International {{Linux Audio Conference}}},
author = {Gräf, Albert},
year = {2010},
url = {https://hal.archives-ouvertes.fr/hal-03162973 https://hal.archives-ouvertes.fr/hal-03162973/document},
abstract = {This paper discusses a term rewriting extension for the functional signal processing language Faust. The extension equips Faust with a hygienic macro processing facility. Faust macros can be used to define complicated, parameterized block diagrams, and perform arbitrary symbolic manipulations of block diagrams. Thus they make it easier to create elaborate signal processor specifications involving many complicated components.},
keywords = {Digital signal processing,Faust,functional programming,macro processing,term rewriting},
file = {/Users/tomoya/Zotero/storage/KXEWFSGX/full-text.pdf}
}
@inproceedings{matsuura2021a,
title = {Mimium: A Self-Extensible Programming Language for Sound and Music},
shorttitle = {Mimium},
booktitle = {Proceedings of the 9th {{ACM SIGPLAN International Workshop}} on {{Functional Art}}, {{Music}}, {{Modelling}}, and {{Design}}},
author = {Matsuura, Tomoya and Jo, Kazuhiro},
year = {2021},
month = aug,
series = {{{FARM}} 2021},
pages = {1--12},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
doi = {10.1145/3471872.3472969},
urldate = {2024-07-09},
abstract = {We propose a programming language for music named mimium, which combines temporal-discrete control and signal processing in a single language. mimium has an intuitive imperative syntax and can use stateful functions as Unit Generator in the same way as ordinary function definitions and applications. Furthermore, the runtime performance is made equivalent to that of lower-level languages by compiling the code through the LLVM compiler infrastructure. By using the strategy of adding a minimum number of features for sound to the design and implementation of a general-purpose functional language, mimium is expected to lower the learning cost for users, simplify the implementation of compilers, and increase the self-extensibility of the language. In this paper, we present the basic language specification, semantics for simple task scheduling, the semantics for stateful functions, and the compilation process. mimium has certain specifications that have not been achieved in existing languages. Future works suggested include extending the compiler functionality to combine task scheduling with the functional paradigm and introducing multi-stage computation for parametric replication of stateful functions.},
isbn = {978-1-4503-8613-5},
file = {/Users/tomoya/Zotero/storage/TDBLJQTL/Matsuura and Jo - 2021 - mimium a self-extensible programming language for.pdf}
}
@article{norilo2015,
title = {Kronos: {{A Declarative Metaprogramming Language}} for {{Digital Signal Processing}}},
author = {Norilo, Vesa},
year = {2015},
journal = {Computer Music Journal},
volume = {39},
number = {4},
pages = {30--48},
doi = {10.1162/COMJ_a_00330},
url = {https://dl.acm.org/doi/abs/10.1162/COMJ_a_00330},
abstract = {Kronos is a signal-processing programming language based on the principles of semifunctional reactive systems. It is aimed at efficient signal processing at the elementary level, and built to scale towards higher-level tasks by utilizing the powerful programming paradigms of "metaprogramming" and reactive multirate systems. The Kronos language features expressive source code as well as a streamlined, efficient runtime. The programming model presented is adaptable for both sample-stream and event processing, offering a cleanly functional programming paradigm for a wide range of musical signal-processing problems, exemplified herein by a selection and discussion of code examples.},
file = {/Users/tomoya/Zotero/storage/THAKVEM6/m-api-574ff3be-cfe2-7867-406a-df50770bf1cb.pdf}
}
@article{Orlarey2004,
title = {Syntactical and Semantical Aspects of {{Faust}}},
author = {Orlarey, Yann and Fober, Dominique and Letz, Stephane},
year = {2004},
journal = {Soft Computing},
volume = {8},
number = {9},
pages = {623--632},
issn = {14327643},
doi = {10.1007/s00500-004-0388-1},
isbn = {0050000403},
keywords = {Compiler,Dataflow,Functional programming,Real-time,Signal processing},
file = {/Users/tomoya/Zotero/storage/YZVBLW85/Orlarey, Fober, Letz_2004_Syntactical and semantical aspects of Faust.pdf}
}
@article{ierusalimschy2005,
title = {The {{Implementation}} of {{Lua}} 5.0},
author = {Ierusalimschy, Roberto and de Figueiredo, Luiz Henrique and Celes, Waldemar},
year = {2005},
month = jul,
journal = {JUCS - Journal of Universal Computer Science},
volume = {11},
number = {7},
pages = {1159--1176},
publisher = {Journal of Universal Computer Science},
issn = {0948-6968},
doi = {10.3217/jucs-011-07-1159},
urldate = {2024-07-09},
abstract = {We discuss the main novelties of the implementation of Lua 5.0: its register-based virtual machine, the new algorithm for optimizing tables used as arrays, the implementation of closures, and the addition of coroutines.},
copyright = {2005 Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes},
language = {en},
file = {/Users/tomoya/Zotero/storage/GQRQSVPC/Ierusalimschy et al. - 2005 - The Implementation of Lua 5.0.pdf}
}
@book{nystrom2021,
title = {{Crafting Interpreters}},
author = {Nystrom, Robert},
year = {2021},
month = jul,
publisher = {Genever Benning},
address = {Daryaganj Delhi},
abstract = {Despite using them every day, most software engineers know little about how programming languages are designed and implemented. For many, their only experience with that corner of computer science was a terrifying "compilers" class that they suffered through in undergrad and tried to blot from their memory as soon as they had scribbled their last NFA to DFA conversion on the final exam.That fearsome reputation belies a field that is rich with useful techniques and not so difficult as some of its practitioners might have you believe. A better understanding of how programming languages are built will make you a stronger software engineer and teach you concepts and data structures you'll use the rest of your coding days. You might even have fun.This book teaches you everything you need to know to implement a full-featured, efficient scripting language. You'll learn both high-level concepts around parsing and semantics and gritty details like bytecode representation and garbage collection. Your brain will light up with new ideas, and your hands will get dirty and calloused.Starting from main(), you will build a language that features rich syntax, dynamic typing, garbage collection, lexical scope, first-class functions, closures, classes, and inheritance. All packed into a few thousand lines of clean, fast code that you thoroughly understand because you wrote each one yourself.},
isbn = {978-0-9905829-3-9}
}
@article{Taha1997,
title = {Multi-{{Stage Programming}} with {{Explicit Annotations}}},
author = {Taha, Walid and Sheard, Tim},
year = {1997},
month = dec,
journal = {SIGPLAN Notices (ACM Special Interest Group on Programming Languages)},
volume = {32},
number = {12},
pages = {203--214},
publisher = {Association for Computing Machinery (ACM)},
issn = {03621340},
doi = {10.1145/258994.259019},
urldate = {2021-05-12},
abstract = {We introduce MetaML, a statically-typed multi-stage programming language extending Nielson and Nielson's two stage notation to an arbitrary number of stages. MetaML extends previous work by introducing four distinct staging annotations which generalize those published previously [25, 12, 7, 6] We give a static semantics in which type checking is done once and for all before the first stage, and a dynamic semantics which introduces a new concept of cross-stage persistence, which requires that variables available in any stage are also available in all future stages. We illustrate that staging is a manual form of binding time analysis. We explain why, even in the presence of automatic binding time analysis, explicit annotations are useful, especially for programs with more than two stages. A thesis of this paper is that multi-stage languages are useful as programming languages in their own right, and should support features that make it possible for programmers to write staged computations without significantly changing their normal programming style. To illustrate this we provide a simple three stage example, and an extended two-stage example elaborating a number of practical issues.},
file = {/Users/tomoya/Zotero/storage/KFYY25CM/Taha, Sheard - 1997 - Multi-Stage Programming with Explicit Annotations.pdf;/Users/tomoya/Zotero/storage/X3DDM6HN/full-text.pdf}
}
@inproceedings{kiselyov2014a,
title = {The {{Design}} and {{Implementation}} of {{BER~MetaOCaml}}},
booktitle = {{Proceedings of the 12th International Symposium on Functional and Logic Programming}},
author = {Kiselyov, Oleg},
editor = {Codish, Michael and Sumii, Eijiro},
year = {2014},
pages = {86--102},
publisher = {Springer International Publishing},
address = {Cham},
doi = {10.1007/978-3-319-07151-0_6},
abstract = {MetaOCaml is a superset of OCaml extending it with the data type for program code and operations for constructing and executing such typed code values. It has been used for compiling domain-specific languages and automating tedious and error-prone specializations of high-performance computational kernels. By statically ensuring that the generated code compiles and letting us quickly run it, MetaOCaml makes writing generators less daunting and more productive.},
isbn = {978-3-319-07151-0},
language = {en}
}
@article{jouvelotDependentVectorTypes2011,
title = {Dependent Vector Types for Data Structuring in Multirate {{Faust}}},
author = {Jouvelot, Pierre and Orlarey, Yann},
year = {2011},
journal = {Computer Languages, Systems \& Structures},
volume = {37},
number = {3},
pages = {113--131},
publisher = {Elsevier}
}

View File

@@ -13,7 +13,7 @@
\affiliate{TOMOYA}{東京藝術大学芸術情報センター}
\author{松浦 知也}{Matsuura Tomoya}{TOMYOA}[me@matsuuratomoya.com]
\author{松浦 知也}{Matsuura Tomoya}{TOMOYA}[me@matsuuratomoya.com]
\begin{abstract}
@@ -29,15 +29,17 @@
% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{はじめに-音楽プログラミング言語の分業化}
音楽のためのプログラミング言語・環境は、Cycling'74 Max\cite{max}やPure Data\cite{pd}、CSound、SuperCollider、ChucKといった言語を代表として様々なものが開発されてきている。こうした言語の多くは歴史を遡ると1950年代にベル研究所でマックス・マシューズらが開発したMUSICシリーズに遡ることができる。MUSICシリーズは音圧波形を時間・音圧の2次元で離散化・量子化した数列として表すことで、計算によって任意の波形を生成することが可能になるパルス符号変調という理論に基づいて計算機で音を出した最初の事例である。
音楽のためのプログラミング言語・環境は、Cycling'74 MaxやPure Data、CSound、SuperCollider、ChucKといった言語を代表として様々なものが開発されてきている\cite{roads2001,Lazzarini2013,Nishino2016,Dannenberg2018}。こうした言語の多くは歴史を遡ると1950年代にベル研究所でマックス・マシューズらが開発したMUSICシリーズに遡ることができる\cite{mathews1963,park2009}。MUSICシリーズは音圧波形を時間・音圧の2次元で離散化・量子化した数列として表すことで、計算によって任意の波形を生成することが可能になるパルス符号変調という理論に基づいて計算機で音を出した最初の事例である。
CやC++といった汎用プログラミング言語で音声合成を行う場合も、基本的にPCMの理論に基づいてプログラミングを行うことになるが、こうした汎用の言語はメモリ管理や並行処理といったハードウェアに近い処理への理解を要求されるため、一般に音楽の記述を行う場合にはより抽象化されたライブラリや、専用のドメイン固有言語を利用するのが普通である。
そうしたライブラリや言語では、Unit Generator(UGen)と呼ばれる、オシレーターやフィルターといった基礎的な処理単位を、モジュラーシンセサイザーの様に組み合わせていくことで処理を行う。\footnote{モジュラーシンセサイザーとUnit Generatorは実際には同時期に現れたコンセプトではあるが、音楽プログラミング言語は積極的にビジュアル的なメタファーを物理的なシンセサイザーから取り入れてきている。}
2000年代以降では、Sonic PiやTidalCyclesに代表される、メロディやリズムパターンをソースコードから生成し、リアルタイムでソースコードを書き換えることで演奏を行うライブコーディング環境が開発されてきたが、これらの言語は信号処理をSuperColliderなどのUGenベースの言語に任せ、それらの言語ランタイムへ命令を送信をするクライアントとして実装されている。そして、多くの言語でUGen自体の実装にはC++などの低級言語が用いられ、動的ロードライブラリの形で提供される。
2000年代以降では、Sonic Pi\cite{Aaron2013}やTidalCycles\cite{McLean2014}に代表される、メロディやリズムパターンをソースコードから生成し、リアルタイムでソースコードを書き換えることで演奏を行うライブコーディング環境が開発されてきたが、これらの言語は信号処理をSuperColliderなどのUGenベースの言語に任せ、それらの言語ランタイムへ命令を送信をするクライアントとして実装されている。そして、多くの言語でUGen自体の実装にはC++などの低級言語が用いられ、動的ロードライブラリの形で提供される。
このように音楽のためのプログラミング言語は、表現可能な範囲をユーザーや実装者の関心のある領域ごとに細分化する形で発展してきている。その一方で、NishinoとNakatsuによるサーベイで指摘されているように、近年のコンピューター音楽実践ではマイクロサウンド\footnote{音声波形を細かく切り刻んで再構成するような音声合成手法\cite{roadsmicrosound}。シンセサイザーのカテゴリとして、グラニュラー合成と呼ばれる物の基礎的な考え方でもある。}や、サンプル単位精度でのイベント処理のような高度な処理が求められる中で、Unit Generatorというコンセプトを基礎に置くこと自体の妥当性が問われてもいる\cite{Nishino2016}
%--[p42] Nishino2016にしたい
このように音楽のためのプログラミング言語は、表現可能な範囲をユーザーや実装者の関心のある領域ごとに細分化する形で発展してきている。その一方で、NishinoとNakatsuによるサーベイで指摘されている\cite{Nishino2016}ように、近年のコンピューター音楽実践ではマイクロサウンド\footnote{音声波形を細かく切り刻んで再構成するような音声合成手法\cite{roads2004}。シンセサイザーのカテゴリとして、グラニュラー合成と呼ばれる物の基礎的な考え方でもある。}や、サンプル単位精度でのイベント処理のような高度な処理が求められる中で、Unit Generatorというコンセプトを基礎に置くこと自体の妥当性が問われてもいる。
ユーザーおよび開発者の利便性に限った点に絞ったとしても、UGenパラダイムにはいくつかの問題点が指摘できる。まず1つはコードの再利用性である。多くの言語では、実際にはほとんど同じような内容であるにも関わらず、それぞれが基本的なUGenを実装し直しており、言語間での相互運用性に欠けている。2つ目は、UGenがプリミティブなデータ型として提供されており、非線系オシレーターの用に既存のUGenの組み合わせでは表現できない新たなUGenの定義がその言語上では難しいことである。3つ目に、UGen自体のパラメトリックな接続の抽象化例えば、オシレーターを任意の本数複製したり、フィルターをカスケードしたりすることが難しい点である。これは言い換えると、多くの言語では、UGenを引数として受け取って新たなUGenを定義するような関数を定義できないということである。
@@ -45,13 +47,9 @@ CやC++といった汎用プログラミング言語で音声合成を行う場
Unit Generatorコンセプトに基づく言語の問題点は、既存の音楽プログラミング言語の多くが実装に依存しており、言語としての意味論が形式化されているものがほとんど無い、とも言い換えられる。
この観点で、実用的に使われている音楽プログラミング言語の中では、例外的に強く形式化された言語としてFaustが挙げられる\cite{Faust2002}
この観点で、実用的に使われている音楽プログラミング言語の中では、例外的に強く形式化された言語としてFaust\cite{Orlarey2004}が挙げられるFaustは、入出力を持つブロックを、並列、直列、分岐、合流、再帰の5つの合成子を用いて組み合わせる。基本的な算術演算、条件分岐、遅延をプリミティブなブロックとして提供することで、ほぼあらゆる種類の信号処理を記述することができる。また後の拡張では、項書き換え系に基づくマクロを導入することで、ユーザーによる任意の数の入出力を持つブロックの抽象化を可能にした\cite{graf2010}
Faustは、入出力を持つブロックを、並列、直列、分岐、合流、再帰の5つの合成子を用いて組み合わせる。基本的な算術演算、条件分岐、遅延をプリミティブなブロックとして提供することで、ほぼあらゆる種類の信号処理を記述することができる。また後の拡張では、項書き換え系に基づくマクロを導入することで、ユーザーによる任意の数の入出力を持つブロックの抽象化を可能にした[2]
この形式化を通じた強力な抽象化能力により、FaustはC、C++、Rust、LLVM IRなどの様々なバックエンドにコンパイルでき、あらかじめ用意されたアーキテクチャファイルと呼ばれるボイラープレートコードと組み合わせることで、MaxやSuperColliderのUGenとしてエクスポートすることも可能になっている。
その一方、Faustの理論的基盤であるブロックダイアグラム代数Block Diagram Algebra-BDAは、一般的なプログラミング言語との理論的・実用的な互換性に欠ける。Faustでは外部のC関数を呼び出すことは可能だが、ポインタや参照を扱えないのでホストの内部状態をFaust側から制御することは難しい。
この形式化を通じた強力な抽象化能力により、FaustはC、C++、Rust、LLVM IRなどの様々なバックエンドにコンパイルでき、あらかじめ用意されたアーキテクチャファイルと呼ばれるボイラープレートコードと組み合わせることで、MaxやSuperColliderのUGenとしてエクスポートすることも可能になっている。その一方、Faustの理論的基盤であるブロックダイアグラム代数Block Diagram Algebra-BDAは、一般的なプログラミング言語との理論的・実用的な互換性に欠ける。Faustでは外部のC関数を呼び出すことは可能だが、ポインタや参照を扱えないのでホストの内部状態をFaust側から制御することは難しい
また、Faustのマクロは、パターンマッチに基づいてBDAを生成する独立した項書き換え系である。そのため、パターンマッチングのための数値引数は暗黙のうちに整数であることが要求され、BDA上では整数と実数の方の区分けは存在しないにもかかわらず、コンパイル時エラーを起こすことある。この暗黙の型付けルールは、初学者のユーザーにとっては直感的なものとは言い難い。
@@ -59,7 +57,12 @@ Faustは、入出力を持つブロックを、並列、直列、分岐、合流
Kronos[4]とW-calculus[5]は、それぞれFaustに影響を受けたラムダ計算ベースの抽象化の例である。Kronosは理論的基盤としてSystem-$F\omega$ というラムダ計算のバリエーションに基づいており、型を入力として受け取り、新しい型を返す関数を定義することができる。Kronosでは、型レベルの計算が信号処理グラフの生成に対応し、値の計算が実際の処理に対応する。Kronosにおいては遅延だけが唯一の特殊なプリミティブ演算であり、フィードバックを伴うルーティングは型計算における再帰的関数適用として表現される。ただし、意味論の厳密な形式化はなされていない。
W-calculusは、変数の過去の値にアクセスする機能すなわち遅延とともに、プリミティブ操作としてフィードバックを含む。W-calculusでは、記述する対象をフィルタやリバーブのような線形時不変システムに限定した上で、Coqを用いた厳密な意味論の定義がなされている。W-calculus書かれたシステムではシステムの線形性が保証されるほか、異なる表記のシステムの同一性証明などが可能になる。他方でW-calculusでは高階関数の使用は許されていない。
W-calculusは、変数の過去の値にアクセスする機能すなわち遅延とともに、プリミティブ操作としてフィードバックを含む。W-calculusでは、定理証明支援システムCoqを用いた厳密な意味論の定義がなされている。他方で、W-calculusは記述する対象をフィルタやリバーブのような線形時不変システムに限定している。その代わりに、書かれたシステムではシステムの線形性が保証されるほか、異なる表記のシステムの同一性証明することなどが可能になる。またもう1つの制限として、W-calculusでは高階関数の使用は許されていない。
筆者が開発している音楽のためのプログラミング言語mimium(MInimal-Musical-medIUM)\cite{Matsuura2021}では、ラムダ計算に遅延とフィードバックを基本構文として組み込むことで、汎用プログラミング言語と同様の構文を維持しながら、信号処理を簡潔に表現することができる。ただ、mimiumのこれまでの問題として、意味論が厳密に定義できていないために、遅延やフィードバックを含む内部状態を伴う関数と、再帰的関数や高階関数の組み合わせを含むコードをコンパイルできないという点があった。
本稿では、W-calculusの2つの制限非線形システムと高階関数を緩和する形で設計された、mimiumの中間表現となる計算モデル$\lambda_{mmm}$を提案する。以降の節では、まず第2節で$\lambda_{mmm}$のシンタックスと型付け規則、ナイーブな操作的意味論を簡単に紹介する。この操作的意味論は現実的に直接リアルタイム実行することが難しいため、実際のmimiumの実行環境では、$\lambda_{mmm}$を実際に実行するための仮想機械(VM)とその命令セットを持つ。第3章ではこのVMおよび命令セットの設計について概説する。第4節では、現状の$\lambda_{mmm}$を下敷きにしたmimiumの設計の今後の課題および展望を3つの視点で議論する。1つ目は、計算がグローバル環境の評価時に発生するのか、実際の信号処理中に発生するのかをユーザーが区別しなければならないという問題である。2つ目は、if式による部分的な内部状態更新を許すかどうかが信号処理の表現できる範囲およびユーザー体験に大きな影響を与えるという点である。3つ目は、$\lambda_{mmm}$の中間表現を取り入れることで外部関数の呼び出しが容易になるという点である。
\section{音楽のためのプログラミング言語mimiumの仕様}
@@ -84,7 +87,7 @@ mimiumの開発は、2019年度未踏IT人材発掘・育成事業の支援の
% BibTeX を使用する場合 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\bibliographystyle{ipsjsort}
\bibliography{ref}
\bibliography{ref_bibtex}
% BibTeX を使用しない場合
% \begin{thebibliography}{9}

11387
src/ref.bib Normal file

File diff suppressed because one or more lines are too long

306
src/ref_bibtex.bib Normal file

File diff suppressed because one or more lines are too long