日報

2019/07/17

コメント機能をつけたのと、空行でエラーになるのを直した。この二つがつくことで意外とプログラミングっぽくなるな

デバッグメッセージを綺麗に出力するようにした。地味に時間くった

main関数をちゃんとループするようにした。あとMidiはバーチャルポート作って投げるようにした。けど起動してポート開いていきなりシグナル投げるので、あんまりやり方としては賢くないかも、どうするのがいいんだろ

2019/07/16

諸々修正して、MIDIでドレミをループして鳴らすことができた!まだなんか再帰をかけた時に関数の引数が式だときちんと評価されないことがあるっぽい、直さなきゃ

2019/07/15

やっと調子が戻ってきた!

Include機能の実装。ただソースがその場に展開されるだけだし楽、と思ってたけど一度ASTにして読み込んだ段階でもう一度パーサーに戻らなきゃ行けないので意外と厄介(うっかり再帰呼び出しになって無限呼び出しになった)。一応実装できたけどこれはリファクタリングの余地ありだなー、というか、InterpreterがDriverを抱える形に変更したので、それに伴う改善できるパートがたくさんある気がしている、、

ライブラリ作り始める前に、先にコメント機能だけ実装しようかな・・・

うーん、思ったより先が長い。ブースト会議までにGUIのダーティプロトタイプができればいいけど、無理っぽいな、うーん・・・

2019/07/14

TidalCycles10周年めでたい、ということで当時の記事をそれなりに読み漁っていると色々参考になりそうなものが出てきた。

確かにリズムパターンの編集でいうとHaskellの関数型を活かしてて結構面白いなと思った。というかオリジナルの言語になる前にHaskellのユーザー定義演算子だけでDSLっぽいの作ってる状態の方がむしろラディカルで面白かったかもしれん。

加えて、HMSLという言語をちゃんと知らなかったので色々調べている。最近になってJUCEにポートされたのでビルドできるかあちこちいじって動いた。かなり言語の様式自体が80年代の古臭さを残してて面白いけど、当時からGUIとセットになって動いてたのを考えると重要な先行事例ではあるっぽい。

ていうかやっぱり、こういうのみてるとJUCEの果たした功績は非常に大きいよなーと思ってしまう。

次に何を実装すべきかが脳死状態で何も考えてなかったのだけど、include/import構文だな。coreライブラリでとりあえずmidiのノートオンとかノートオフとか作りたいので・・・あとそろそろコメント機能も?

2019/07/13

Doxygenの導入準備。うーん、一応クラス図とか整理できたけど、仮にライブラリを作るとしたらmimium言語用のドキュメントシステムが必要になってくるわけだよな。そして何よりCSSが汚くてみづらい、2019年のデザインとは思えない。そもそも本当にソースコードのコメントとしてドキュメントを残す必要あるんだろうか。自動でディレクトリ構成がソースコードに従ってくれるのはありがたいとはいえ・・・SphinxはSphinxで色々よくわからないし、いっそHugoとかでも良いんじゃ?

2019/07/08

MIDIの実装、とりあえず生バイト吐けるようになったのでコアライブラリをはじめにロードするような仕組みを整えたい

2019/07/05

起きられません。

午後からforループの実装をし始めた。ここまでやるとiteratorとかで型システムとかメソッドがないとやはりやりづらいかもしれない。

ていうか先にwhileを実装すべきだったな

2019/07/04

まだきちんと起き上がれないが、調子は少し回復

3DプリンタでExidiophoneのマイク用アームの印刷を久しぶりにやった

配列、作るだけ作ってアクセスする演算子を作ってなかったので実装。

2019/07/03

再び起きれず、ちょっとスケジュール整理と型理論のお勉強。やっぱりどこかの段階で擬似命令列に変換する方式ぐらいにまでスイッチできるといいなあ、あんまり時間がない気がするが・・・

2019/07/02

主に授業でおわる、きちんと起きれず微妙

2019/07/01

関数呼び出しおかしくなったのを直したのでフィボナッチなど書けるようになった。興が乗ったのでそのまま比較演算子などをまとめて実装。これでできることはだいぶ増えてきたかなー、あとはcmathの三角関数とか指数関数を呼び出せるようにしてオーディオ処理できるのかどうか試してみたい。

2019/06/27~30

久しぶりに日報をつけ忘れる。なぜかというと実装をしていたのは昼まで夜は結構音楽を作っていたため寝る前に書き忘れるのだった。

関数呼び出しを再帰させると引数の参照がおかしくなってフィボナッチとか書けなくなるのがわかったので結構ハマった。

2019/06/26

時間再帰で無限ループするけどコンソール出力するやつは普通に書けた。

午後はif文の実装。一応できたっぽい。while/for文先にやるべきか、配列先に作っちゃうべきか迷うなー

2019/06/25

時間操作の付加をもっと自由に書けるように考えているけど、なんかインタプリタが一時的にとはいえASTに時間情報を付加(副作用)して実現してるのちょっと設計悪い気がする、しかしどうしたらいいんだ?

結局時間付加用ASTを普通に実装して完了。リスト型作るとややこしいことになりそうだけど必要なんだよなー

2019/06/24

誕生日。京都から帰宅し、ミリスさんのレクチャーのレポート書き。スケジュールの整理。ちょっと休憩。

2019/06/23

音学2日目からの未踏MTG。Language-Server Protocolというのを教えてもらい、確かにVedaみたくコードエディタの拡張として実装するという道はゼロではないかも。一旦Webassemblyについても見直してみようかな

2019/06/22

音学シンポ1日目で発表

2019/06/21

ポスターを印刷し、合間とか新幹線で移動しながらなんとかスケジューラーを実装。スケジューラー動いた、が時間をASTとして持たせなかったのは失敗だったので直そうというメモ

2019/06/20

朝起きれず、調子悪い感。暑いだけかも。ポスター作りを進め、おおよそできた。家に帰ってからスケジューラーのために先に必要になるであろう組み込み関数の実装を考え、printだけ作った。スケジューラー間に合わない・・・

2019/06/19

朝ランした、午前中ポスターの叩きを作り、そのあとクロージャの実装。一応できたっぽい。とりあえず再帰ない状態でもスケジューラーをなんとか実装したいなー と、夕方はロバートミリスさんのゲストレクチャー。

2019/06/18

ゼミ/授業/授業とポスター準備とか、クロージャ実装の下調べとか、メール応対してたら夕方になり、家事をしてajiroにベルクソンのトークを聞きに行って1日が終わった。実装手出せなかったの辛いが仕方ない

2019/06/17

関数のブロック記法のパーサーでだいぶハマって時間を食ったが、なんとかローカル変数の実装まで出来るようになった。あとはクロージャ変換するようにできれば。。。

あと:再帰を書くには普通にif文がいる/ていうか配列、リストっぽい型が欲しい、テストの規模がでかくなってきて辛くなってきた、パーサーに空の行とか、コメントとか入れてもエラーにならないよにしたい。。今週じゅうにどこまでいけるか。

2019/06/16

朝ランしようと思ったら途中から雨で挫折。スケジューラーのことどうしよっかなーっと思って、RtAudioのビルドを試みる。少しCMakeFile.txtがおかしくってハマったけど、ビルド自体は割とすんなり通って驚いた。さてこれをタイマーとしてうまく使えるのかどうか。午後からそれやろうと思ったけどご飯食べたら気絶してしまった。起きて、アンベラシュウにイベント「全員」を見に行った。帰って、ちょっとギターを録って終了。

2019/06/15

今日も若干調子悪く、多めに寝た。夕方から作業をして、関数定義と実行ができるようになり、だいぶプログラミング言語っぽくなってきた。あとはローカル変数とクロージャができて、再帰かけるようになれば強い。あと、流石にエラー出たときに毎回セグフォで落ちるのとか気になるようになってきたのでエラー処理まとめたい。しかしその前に再来週の発表の概要スライド作らねば・・・。

2019/06/14

若干調子わるい。関数定義と実行部分の実装をちょっとトライしたけどローカル変数の作り方っつーかクロージャの作り方わかんなくて死んだ。明日頑張ります

2019/06/13

一瞬Extemporeのトランスパイラを作れば全部解決なんじゃないかと思ったけど、temporal recursionで作るシーケンスとか逆にノンリアルタイムでビジュアライズすることができなくなるね!ということを思ったので大人しくインタプリタでまず実装する事にした。変数機能付き電卓までは作れた。

しかしこれ、実質音声出力用のインタプリタとビジュアライザ/GUI用インタプリタの2種類作る事になりかねんなあ、スケジューラー作り始めてから考えるようにはするけど。

2019/06/12

Extemporeのソースを改めて読んでてやっとわかったけど、あれはCPPで実装されたSchemeで、xtlangのJITコンパイルとか、型部分のシンタックスシュガーとかJITコンパイルのllコード吐くところはみんなScheme自身でランタイムで行われている、恐ろしや。。確かにギリギリmalloc命令だけ確保しておけばあとは作った言語側で実装できるんだろうか・・・。

2019/06/11

引き続きLLVMのcodegenの資料を読み漁っていたが、いざ実装するとなると結構重い。というか、何も考えずにやっているとLLVMのレジスタマシンっぽい、命令型言語の仕様に引っ張られそうになるので開発の仕様考え直すのに時々戻らないといけない。そして、ちょっと関数型っぽい仕様を取り入れたいとか思うと型についてもっときちんと勉強しないとダメだとなってくる(インタプリタ型ならともかく、LLVM IRに落とすまでの体力がない)。gocamlのスライドとか読むと、型付きの命令列というさらに中間表現的なものに一度落とし込むという手もあるっぽい。

で、ここまで考えたけどやっぱり一度Extempore(xtlang)の型推論付きトランスパイラにしちゃった方が賢いのではないだろうか。最悪後からランタイムは作り直せるわけだし、パーサーとASTは使いまわせるはず、だし・・・

2019/06/10

LLVMのJITの資料少し読みあさり、パーサーにAssign機能を追加して、地味なリファクタリングをした。

午後、Exidiophone基板の発注をする(アセンブリサービスがセールだったので試してみた)。Maxを入れてなかったのでインストールする。

Kronosの開発者の人にSlackで色々聞いてみる。自分のやってることについても少し案を話せたのでよかった

帰ってから、関数周りのパーサーを追加した。これで最低限プログラミングっぽいことができると思うので、次はllvmのcodegenを試したい。KareidoScopeぐらいにはなってきたのではないか

2019/06/09

朝ランして、LLVMをインポート→IRBuilderを使ってビルドを通すところまでやった(まだ.llファイル吐き出せてない)。演算子ごとにswitchでcodegenする関数を切り替えたくてBison側のenumを引っ張ってこようと思って適当にやっていたら循環includeになりまくって死んだ。時間無駄にする前にノートとかで整理した方がいいという学びがあった

2019/06/08

土曜なので少し控えめに、、、インタプリタ部の実装(スケジューラーとか)をどうしようかなーと思ってExtemporeの実装を眺めたり、LLVMの仕様を見たり、OSのsleep関数の仕様を調べて、あとは家事をしてたらだいたい1日が終わった感 明日はコードを何かしら書こう

2019/06/07

パーサーに時間操作の演算子だけ実装した。未踏のやつか公開になって、思ったより反応があって驚いた。いっつも作ったものに対して「ハ?」みたいな反応される方が普通なので、まだ何も作ってない段階から期待されることにめちゃくちゃ重圧を感じる・・・しかし音楽系の人からもそれなりに反応があったのがわかってよかった。

2019/06/06

ようやくBisonでビルドが通るところまで行ったので基本的なASTが組み立てられるところまで実装、変数登録できるとこまで行ったら時間操作の奴取り組み始める、の順番でいいのかな

2019/06/05

今日もBisonでのパーサーの書き直し、ビルドが全然通る気配がないし、インクリメンタルな開発が全然できないので辛い

2019/06/04

Bison,FlexをCじゃなくC++としてジェネレートする方が良さそうなため、そちらのビルドのやり方探しに時間をかけてしまう。

2019/06/03

諸用で東京へ。テクニカルな進捗は特になし

2019/06/02

Exidiophoneのボディ作りの続きをした、コーディングにどうしても気が乗らないんだけど、これはどっちかというと何をいつまでにどのくらいやったらいいのかの目標がはっきりしなくなってきたからだな、中短期的目標を引きなおさなければ。。

2019/06/01

朝ランして、パーサーをflexとbisonで書き直し始めた。結構これまでの努力が徒労になっている気がするが、しょうがない・・・。テスト駆動開発がこれでできるんだかできないんだかよくわからない。

出先でExidiophoneの新しいボディのモデルを軽く作る。いつ出力するかな

帰ってきたら急に疲れたので小休憩して、OSS活動(Homebrew野良repoのメンテ)をした

2019/05/31

合同ゼミがあったので雑なスライドだけ作って挑む。一旦関心ごとをブワッと広げて話したけどおかげでやっぱり伝わんなかったね。やっぱり研究の方法論の問題系だけ絞ってExidiophoneで論文を書くのがいいのかもしれないと思った。

2019/05/30

朝ランした。事務仕事周りを少し片付けたら眠くなってしまったので家に帰って休眠。しばらく色々ゴタゴタしたのでしょうがない。

2019/05/29

ベッドの搬入をして、ついでに買ってしまったSK-88proとかも受け取る。論文が思ったよりサクッと進んだというか、気がついたらまともな感じになっているかもしれない。実装から離れているので戻らなければ

頑張って論文を提出。

2019/05/28

Fairlightの続き→授業をやって、片付けして、三月の水に行き、Copy Cont Rollを見る。論文・・・

2019/05/27

朝ランした

蓮沼さんと一日Fairlightをいじる。

2019/05/26

暑いので学校で作業をしようと思う→時間外入館手続きしてなく入れない→展示へ行く→SSD持ってきてなかったことに気がつくのコンボを食らう

帰ってからどうにか論文を少し進める、が早くも夏バテ

変数に時間付随させるのと関数でhistory扱うのうまく切り分けないとごっちゃになるな

2019/05/25

だいぶ疲れていたので、昼まで休んで買い物をして帰る。全然何もできなかった・・・。

2019/05/24

朝ランした、パーサーにトップレベル加える、その他もろもろ手直し。

学校いって論文イントロ書いた。なんか図を作った方がいいな。。

論文進まず、パーサーに配列を加える。あとインタプリタのクラスを作り始める・・・。

2019/05/23

論文書き。あんまり構想まとまらないのでパーサの微妙な直しに逃げたりしたが、よくなかった気がする

パーサのAST、多分unique_ptrで持ってる方が良くていちいちmoveで移動させてあげた方が正しいんだろうけど書き方が煩雑になるくらいならshared_ptrのままにした方がいいのか迷う。

あとS式で書く意味あるか?パフォーマンス的にそもそも悪いのはわかってたけど、関数定義の構文糖衣とかlambdaに変換して持たせるのは破壊的変換だから、そっから完全なソースコードの展開はできないのでいっそソースコードを生でエディタと共有させた方がいいよな

2019/05/22

パンを焼いて1日が終わった

2019/05/21

朝ランした。ポスターの原稿を書き始める。言語仕様を少しだけ明確にしたので、ランタイムでやらなきゃいけないことは見えてきた。これは結局ChucKのような同期型になるのかな

2019/05/20

寝起きが悪かった。図書館に本を返さなきゃいけないので学校に行く。少しパーサのクラス直しをした。お昼を食べてパーサをさらに書いた。ここまでくると一旦ランタイムを最低限何があれば動くのか決めて動かせるようにするべきだな

2019/05/19

朝ランした、CppcmbやっぱわかんなすぎてIssueで質問立てた。

Daxophoneのモデルちょっと進めた。どうせ穴とかは5軸じゃないと削れないしこのくらいで一回やってみようかな

質問スッゲー早く帰ってきて無事中置記法→ネストS式のパーサ書けた!これで大分進む気がする


2019/05/18

ChucKのリポジトリの中にDesignていうフォルダがあって設計時のメモ書きがそのまま残ってる感じはいいなと思ったので参考にしよう

C++用のGoogleTestフレームワークを導入したので少しコンパイラ開発が建設的にはなった。しかし結局パーサコンビネータの再帰がうまく行ってなくてダメな予感。いや、やっぱりそもそもモナディックパーサ使っててASTの構造を普通のクラスでやってるからダメなんだ、全部関数で返せば良いのか

今更だけど、中置記法の演算をASTではS式っぽい形で持ってるとしたら中置記法をその言語の中で自分で定義することはできなくなるってことか(まあそんなことC++でさえできない訳だけど)

基本的なところはcppcmbが全部やってくれるんだから、パースした結果を受け取る側で加工してまとめてS式なりのASTにすればよい?

実装はともかくとして、少しずつ具体的な言語仕様とか文法が見えてきた

2019/05/17

新しいクレカを契約したら暗証番号が5ケタでどうしても覚えられず、1回目でいきなり間違えたらそこら中にアラートが行って締め出されるというすごい嫌な夢で起きた。夢日記を書くのはよくないとは言えロクでもなさがすごい

朝から大濠公園まで自転車でいき、学振最後の直しをする。天神で色々してから帰って、自転車の掃除をし、洗濯、料理をした。

Exidiophoneの回路の改良を少しして、後Daxophoneの記事読んでこれやっぱり今年中に作りたいなと思い、Fusionで図面を引いてみるのだった。結果図面の数値がよくわからなくて手作業でやることにしたが

2019/05/16

朝からまあまあ調子が悪いけど学振申請書の直しをした。國本さんのEPが出たので聴きながら。音源を今年は頑張って作りたいなーと思っている。今年やりたいことがいっぱいなので全部実現したい。

午後は一枚Exidiophoneの基板を半田付けして、前から作ろうと思っていたボタン電池式の2x2アクティブマトリクスミキサーの回路をEagleで作ってみる。コンパイラ作りはお休み。

2019/05/15

朝ランして、学校に行ってイヤホンを修理した。 言語仕様決めるのをずっとやり続けるけど、よくわからなくなってきた

時相論理というものの存在を知った、Temporal Calculus of Communicating Systems とか、便利そうだけど難しすぎて全然わからん


2019/05/14

ちょっとChucKのソースをビルドしてみて流れを追いかけたりした。結構コンパイラとVMの結合がきついんですけど。。。全然追えない


2019/05/13

朝ランしてたら転んで絆創膏を4枚貼る羽目になった CPPcmbと格闘して1日終了 型付きでやるとastのデータ構造作るのがJSとかと比べて難しいったらありゃしない! かといってany型とかは使いたくないし、どうすんのがいいんだろうな こんなとこで止まっててもしょうがないんだけどー、、


2019/5/12

予定を整理したりした、

CppCmbを使い始めた、というかそれのためのCmakeの使いかたのお勉強かも あとUltralight.uxのサンプルもちょっと動かした 結局インタラクションやろうとするとJS書かないと意味ない?

いい加減言語仕様を仮に作ってみないとASTも作れないので考えよう ていうかパーサ書きながら考えよ