fixed format
This commit is contained in:
@@ -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}
|
\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.
|
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.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user