日報
2023/05/07
5/13の宣伝を追加。プロフィールもちょっと更新。
2021/05/21
2019〜2021の活動が全然更新できてなかったので作品とResearchを更新し、Menuにteachingで資料置き場へのリンクも追加した。
あとMasonryでのレイアウトはとっくに過去の異物になってたらしく、同作者のisotopeというライブラリで作り直した。
これまでタグとカテゴリのフィルターとソーティングを手動でやってたのが自動でよくなったのでだいぶ楽になった。
正直、Infoのページがいるか?みたいな感じにも思えてきた。告知をするだけならSNSで十分にも思えるし、過去こういうものがありましたよというのを溜めておく場として使うなら1つのページを更新し続ける方が楽では、とか。
あとはこの日報の使い方をもう少し考え直そう…。
2021/01/03
眠い、とにかく眠い。後両目の焦点がとにかく合わない。困った
2021/01/01
再開。雑煮を作って、実家とFacetimeで話したりして、漫画を読んでゲームをやってアニメをみたりした。
mimumは返り値が参照渡しの関数の実装を考えた結果よく分からなくなり、考え中。目の左右の焦点が全然合わん。
2020/03/30
流石に調子落ちてきた なんだか時間があっという間に過ぎていく
2020/03/26
少し論文で書きたいことが見えてきたのでよかった。毎回論文を書く時、書き方をゼロから学び直しているような気分になる。
しばらく雨が降るらしいので気晴らしに自転車散歩という訳にもいかなくなってしまった。こっから3日間家にい続けて気が持つのか普通に心配。
2020/03/23
未踏を終えてからというものなんだか完全に気が抜けてしまい、しかも論文執筆/仕事/授業準備と全然違う種類のタスクが3種類パラっており、完全に死亡モードになってしまっていた。今日ようやく持ち直し、午前開発、午後論文、夕方授業準備とそれぞれ進んだのでなんとなく気分が良くなった。
一方mimiumの開発計画自体もなんだか真っ白になっているので論文書きながらも少しずつドキュメントを整えたりしないとなあ、はあ。
あとはこのWebサイトの2019年度分の活動報告を後出しで出さないといけないなあ、はあ。
4月から本当に授業があるのか(受ける方も教える方も)今になってもまだわからないというのは正直異常なものである。本当は年の後半海外で研究しようかと思って書類の準備をしようとしていたけれどこの状況では応募どうこうという気分でもなくなってしまった。あと2年で終わる(らしい)博士をどういうスケジュールで進めていくかもいまいち検討が実のところついていない。気分としては開発1年やった結果コードを書くのに疲れてきたので音楽でも作りてー、みたいな気分でもあるが、、、
2020/01/15
もうちょっとコードのモジュラリティを高めようと思った。少なくともコンパイル(LLVMコード生成まで)部分とランタイム部分は分離ができるわけだし。そんで動的ライブラリをいくつか作った上でリンクするようにすれば多少見通しが良くなる。あとランタイムもrtaudio版、PortAudio版、JUCE版JACK版とか複数作れるようになるはずだし.
そうするとなにが嬉しいかというとmimiumのコードから単一のバイナリを吐き出すことができるようになる。
あと非同期の話。rustやgoの非同期について延々読んでいたのだけど結構今のスケジューリングを素直に拡張していけば良い感じにできるように思った。MIDIとかの最後のIO周りだけは専用のラッパーを用意して、別スレッドに移し微妙にmicrosleepさせて実行、とかするようにすれば全ての関数をちょっとまってsleepとかしなくて良くなるので、サンプルレベルのスケジューリングが回されてもそこそこなんとかなる(はず)。
あと、所有権とライフタイムの話。これもrustの仕様を改めて読んでだいぶ理解が深まってきたのでいろいろわかってきた。とりあえずmimiumにgcはいらない、、、と思う。そもそも音楽に対して可変長配列を長さを動的に変えながらうんぬんかんぬんとかすることって実はまずないし、と思ったので。で、基本の動作はjsみたくプリミティブはコピー、アグリゲートな物とか関数は参照渡しでよい。問題はクロージャになるのだけど、一番面倒なケースはクロージャ関数を返却する関数、というやつなので、それさえ禁止してしまえば良い気がする。
あと、FFIの話、やっぱりplugin作らせるようなことをせずにunsafeの中では生ポインタが扱えて直接C関数が呼べる、ていうのがいい。そうするとセルフホストへの道が近づく(文字列操作はC++に頼って他は自力でコンパイル、とかね)
次、ジェネリクスの話、欲しいけどどうしたら良いかわからんな、、、なんかここまでくるとほとんどオレオレRustを作っているような気がする。
2020/01/14
dsp関数から自動でクロージャを拾えるようにした。具体的にはmimium_main()を呼び出すと返り値がdsp関数のクロージャオブジェクトのアドレスになるようになっている。こんなもんでうまくいくんだろうかと思ったらうまくいった。あとはこれをマルチチャンネルに対応すべくタプルの実装をする。タプルでの実装の効率が良いのかどうかは正直ちょっと微妙。コピー渡しにするのか参照渡しにするのかという問題もある。なるべくモノラルの状態で直列に繋いだ関数をあとでタプル(MC)用に複製するのが実行速度的には有利になるはずだけど、デザイン的にはどっちで書こうが同じになって欲しいとも思う。どうせこのあとディレイの実装でCFGみたいなものをコンパイラ側で持つ必要が出てくるので、それを使って解析すればどちらでも同じになるようにあとで最適化することもできるのだろうか。
2020/01/13
週報にしようかな
mallocで確保するの○
mallocで確保して関数の内側からグローバル変数書き換えるの○
クロージャオブジェクトを外から拾うのもaddTask()とaddTask_cls()の2種類を使い分ければまあできたっぽいが、なぜかバグる 多分クロージャのアドレスが正しくない
ところで一つの基底クラスから派生したやつをたくさん持たせたvariantに共通のインターフェースを持たせる場合に、いちいちstd::visit([](auto& a){ a->commonInterface();},hoge);
とかやるのは馬鹿っぽい。普通にhoge->commonInterface()
とできるようにしたい。多分ヘルパーテンプレートを作って
struct Base{
virtual void commonInterface()=0;
}
template<class T1,...>
struct ASTVariant : public Base{
std::variant<T1,...> content;
void commonInterface(){なんか実装する};
}
とかやってやると良い気がする。パラメーターパックはえらい。そのうちこのパターンでASTとMIR全部書き直したい
2020/01/06
半年空けていた間Macのメモ帳でいろいろメモしていたが、やっぱり公開しておいた方がいい気がするのでなるべくこっちにつけていく。
とりあえずdac関数から音は鳴らせたけどクロージャとして実行するためにクロージャオブジェクトを拾わなければならない。そのためにはグローバル変数をヒープに移さないといけない。Faustのようにグローバルの宣言はinit関数にまとめてヒープに確保するようにすれば管理はまあ楽。問題は今後Replにしたくなったときにアロケーションがだるくなる。どっちみち動的にメモリ確保するようなアプリケーションは想定してないし当分GCが乗る予定も無いわけだし、Replで動かすのはそのときで良いのか。
と思ったけど、init()をわざわざ作っておっきな固定領域アロケーションするより最初の実装としてはグローバル変数それぞれでmallocして確保しちゃった方が楽なんでは。
あとはmallocで確保したdac()のクロージャオブジェクトのアドレスをどうやって受け取るかですが、、どうするんだ?とりあえずはinit()の返り値をdacのクロージャのアドレスにしてしまうことだが,, ああそうか、そもそもヒープに確保するんだから直接そのアドレスをぶん投げたらいいのか?
mutableキーワード導入した方がいいかなあ・・・
グローバル変数はグローバル変数を全部まとめた構造体を一個作って、最後にそのアドレスを返す
この辺の構造体の型の中身は型名定義なのでir生成のタイミングでもらっておくことができるので、分解して参照することも可能だな うん ちょい気が遠いがいけそう・・・
Replにするなら変数更新だけインタプリタ動作するってのはもしかしたらアリかも
で、あとは非同期メッセージングの方ですが、、
ひとまずはvoid(float)以外受け付けなければ解決するのか、、?いやまだvoid(float,closure)が欲しいから無理か、いやでも同じようにclosureの型は関数名から引っ張れるようにしておけばいいのか、いけそう・・・?
2019/07/28
また飛んでしまった。。。19~28日までは後付けで思い出せたものです。
2019/07/27
起きれず、調子悪い。学校いって届いたPCBAをケースどうするか色々考える。
2019/07/25,26
YCAMでSWOの作品メンテの手伝い。ちょっとBidirectional Programmingの歴史を調べてみた。色々理論的には難しいんだけどLSP使うとそれっぽいことはできてしまうのではないか??
2019/07/20,21
未踏ブースト会議
2019/07/18
オーディオ処理機能を無理やり追加した。今の所サイン波一本でもリアルタイム間に合わない。原因はおそらくstd::mapの検索スピード・・やっぱりVM実装しないとだめかー。
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も作れないので考えよう ていうかパーサ書きながら考えよ