diff --git a/src/content.tex b/src/content.tex index baf8f8e..ba73ecc 100644 --- a/src/content.tex +++ b/src/content.tex @@ -410,7 +410,7 @@ This paper proposes \lambdammm, a call-by-value, simply typed lambda calculus-ba \subsection{A Possibility of the Foreign Stateful Function Call} - The closure data structure in \lambdammm\ combines functions with the internal states, as shown in Figure 3. The fact that \texttt{filterbank} samples do not require special handling for internal states means that external signal processors (Unit Generators: UGens), such as oscillators and filters written in C or C++, can be called from mimium, just like normal closure calls. Additionally, it is possible to parameterize, duplicate, and combine external UGens\texttt{In fact, in the actual implementation of mimium, an interoperation between VM and audio driver is realized by passing and calling Rust's closure}. This capability is difficult to implement in Faust and similar languages but is easily achievable in the \lambdammm\ paradigm. + The closure data structure in \lambdammm\ combines functions with the internal states, as shown in Figure 3. The fact that \texttt{filterbank} samples do not require special handling for internal states means that external signal processors (Unit Generators: UGens), such as oscillators and filters written in C or C++, can be called from mimium, just like normal closure calls. Additionally, it is possible to parameterize, duplicate, and combine external UGens\footnote{In fact, in the actual implementation of mimium, an interoperation between VM and audio driver is realized by passing and calling Rust's closure.}. This capability is difficult to implement in Faust and similar languages but is easily achievable in the \lambdammm\ paradigm. However, mimium currently uses sample-by-sample processing and cannot handle buffer-by-buffer value passing. Because most native unit generators process data on a buffer-by-buffer basis, there are few practical cases where external UGens are currently used. Nonetheless, in \lambdammm, only $feed$ terms require sample-by-sample processing. Therefore, it is possible to differentiate the functions that can process only one sample at a time from those that can process concurrently at the type level. As the multi-rate specification is being considered in Faust \cite{jouvelotDependentVectorTypes2011}, it may be possible to facilitate buffer-based processing between an external Unit Generator by having the compiler automatically determine the parts that can be processed buffer-by-buffer.