プログラム

3項演算子

3項演算子に対応した 3項演算子は正規化中にif文へ置き換えている なんで正規化中かっていうとthen節とelse節をif文に付け替えてから正規化しないといけないし かといって正規化前に3項演算子を処理しようとするとややこしい 結局3項演算子をちゃんと見つけ…

暗黙の引数がなぜか動作

ラムダ式の引数をいちいち書くのがじゃんくさいから$1とかで引数にアクセスできるようにしてみた ひさびさにレキサをちょっと変更して名前解決の時に$1をArgumentsにぶちこむようなコードだけ書いたところ・・・なぜか完成した なんでや、ILでは引数1個の関…

ラムダ式の戻り値の型を型推論

ラムダ式の戻り値の型を作った側が毎回書くのはじゃんくさい 関数の引数に使った感じから型推論できるように対応してみた型推論の途中で戻り値なし、またはIntってゆーのを [Void | Int] みたいに表して 関数からフィードバックを受けて最後にVoidが残ったら…

タプルに対応 続

タプルの型定義をかけるようにしてみた 構文は[Int, String]にした 使う側はvar x = (1, "str")なのに型定義はカギカッコなのはちょっとどうかなと思ったけど 戻り値がIntとStringの関数で sub f() (Int, String)が良いか sub f() [Int, String]が良いか考え…

タプルに対応

タプルが使えるようになった 最初はvar x = [1, "str"]なんて文法がええかと思っていたけど これやと配列と区別が付かないのでvar x = (1, "str")にした タプルの要素へは数字のプロパティでアクセスする なんか知らんけど、深夜のテンションでそう決めた 勢…

ローカルスコープに対応

ローカルスコープが扱えるようになりifの中で変数が定義できるようになった スコープ内で外側の変数と同名の変数を定義した場合、別の変数として扱うことにした オーソドックスなCと同じ仕様にした なんかjavascriptあたりがきしょい動きをしていたような気…

nullに対応

nullに対応した え、いまさら? はい nullはNull型のインスタンスとした せやから[Foo | Bar]?は[Foo | Bar | Null]のシンタックスシュガーになる CILでは値型にnull入れれへんから、Object型にしてBox/UnBoxする事にした .NET Frameworkの参照型はnullが無…

共用型がまさかの完成

共用型を対応するためにRoku側のコードを書いて CILへの対応は一旦置いといてコンパイルしてみたところ、なんと期待通りに動いてしまった! 共用型はとりあえず1個目の型に変換しとくってロジックがあるだけなのでCILでは正しいわけがない せやからCILでは実…

型変換を伴うif対応

型変換が出来なかったのでできるようにしてみた どういう形がいいだろうと悩んだ挙句 どうせ型変換したらうまくいったかどうかのif文を書くんだからってことで 型変換をif文に組み込んでしまったうーん、気持ち悪い

switch対応 その2

型によるcase式に対応できた 参照型変数は「ldloc→isinst→ldnull→cgt.un」でいいんだけど値型変数だとうまくいかない 結局、値型変数は「ldloc→box→isinst→ldnull→cgt.un」にした boxが出てくるのはどーよって気がしなくもないけど、まぁいっかしかし、case…

switch対応

switch文に対応してみた まだswitchは式にできてないので戻り値は返せないけどもとりあえず[x, xs]のxs部分にcdr相当を渡したいんだけど めっちゃめんどくさいので単純に配列をGetRangeしてコピーすることにした GetRangeはご丁寧にもMSDNにO(n)っすよって書…

.NETのYieldが何をしているか

.NETのYieldがどんなふうにILを出力してるんか調べてみた VBだけ調べたけどC#も多分一緒だろう 割とcall/ccするのめんどいな1. Yieldの付いた関数毎にIEnumeratorなクラスを作る、とりあえずStateMachineと呼ぶ 2. Yieldの付いた関数の引数、ローカル変数を…

関数の戻り値型から空配列の型解決

なんのこっちゃか分かりにくいけど 戻り値の型から空配列の型解決ができるようになった 型解決をするために配列を正規化している return([]) ↓ $0 = [] return($0)これをやると問題になるのがこんなやつ xs = [Int]() ↓ $0 = [Int] xs = $0()Intってのが型解…

関数内型定義

関数内で型が定義できるようになった インナー関数が作れたついでにやってみたらすぐできた メソッド的なものは作るつもりはないので大体そろった感じ 次はなにつくろっかなー 例外関係かな

空気を読んだ関数のオーバーロード

関数の戻り値から関数のオーバーロードができるようになった いゃったぁ! こんな書き方しないけど!今までインナー関数はマングリング(?)してグローバル関数として作っていたけど returnを関数として実装している都合、関数毎にインナー関数用のスコープを…

空配列の型解決

空配列の使っているところを見て型推論っぽいのをできるようにした 型解決がその場しのぎで、つぎはぎだらけのよく分からないものになっていく 大して関係ないけど、WSHの↓が動かなくなっていた echoなんてコマンドないって怒られる 変わったことと言えばWin…

戻り値だけ異なる関数のオーバーロード

戻り値だけ異なる関数をなんちゃって型推論して解決することができた 約1年越しにほっといた機能を夜中のテンションで作成 元は数値型をIntかFloatかShortなどなど、使っているところから推論したいってのが始まり まだそっちはできてないので何とか考える欠…

ブラウザを作ってみる 2日目

なんとなくタブっぽいものが作れた 実際にはImageButtonを並べているだけ 選択したときのハイライトとか付けたい 画面をキャプチャするタイミングが分からん setPictureListenerとかそれっぽい名前のリスナはObsoluteでござるとか言われるし じゃあ代替の関…

ブラウザを作ってみる

AndroidでWebViewはめ込んだだけのブラウザを作ってみる どうにも思ったようなものがないこんだけイジる低速SIMを使ってるからデフォで外部ファイル(js、css、画像全て)は読み込み不要 タブ化してタブの切り替えは画面下並べる ボタンはメニューとタブを閉じ…

無線&タッチセンサー

無線とタッチセンサー化したくてとりあえずAdafruit Feather 32u4 Bluefruit LEを購入 サンプルいじってBluetoothのキーボードにするのはすぐできた 超簡単(^-^) Amazon.co.jp: Adafruit Feather 32u4 Bluefruit LE: DIY・工具ただ、↑にはピンヘッダついて…

データグローブ試作 その2

手袋の指先にポッケを作りセンサーをぶっさして多少見栄えはよくなった センサーがよくずれるけどなんとかならんもんか・・・ 今はマジックテープで縛って両面テープでくっつけている、でもよくずれるソフト側はC言語ならかじったことあるのでめちゃ簡単に作…

データグローブ試作

曲げセンサーが届いたので早速くっつけてみた センサーに半田付けしてブレッドボードにぶっさす簡単設計 長さが足りなくなるとヤダから、長めのワイヤ付けたら余りまくり 5cmくらいのワイヤのがよかったかしら・・・ 曲げると抵抗値が変わるらしいけど そな…

Arduino買った

こないだ買ったキーボードがいけてない アルファベットはかろうじてブラインドで打てるが記号キーが打てない キーボードのFJのポッチをこんなに探し当てるのが大変なんて・・・ おまけに移動キーがFnとのコンビネーションしかないのだが、IJKLという変態仕様…

ローカルリポジトリをGitHubへ後から上げる方法

毎回よくわからなくなるのでメモ GitHubでリポジトリは作っておく、リモートリポジトリの設定はGUIでやっておく リポジトリ名は.gitって付いているほう https://github.com/zenuas/Roku https://github.com/zenuas/Roku.git git fetch git merge origin/mast…

.NETのジェネリクス解決

.NETのジェネリクス解決が意外とめんどくさい 型にジェネリクスがついている場合と関数にジェネリクスがついている場合がある例えばListなんかは型にジェネリクスがついているのでこんな感じ Dim list = GetType(List(Of )) Dim list_add = list.GetMethod("…

.NETのメソッドが呼べた

.NETのメソッドが呼べるようになった 作っている言語にメソッドなんて概念をつけていないので「型.メソッド(引数)」の並びを「メソッド(型, 引数)」に変えて関数コールするようにした 幸いCILではどっちでも一緒だしねちょっと面倒なのが名前空間 「DateTime…

.NETのコンストラクタが呼べた

.NETのコンストラクタを呼べるようになった 値型でコンストラクタの引数無しはinitobjなの? とりあえずnewobjしか対応してない、DateTimeを引数無しで作成することができへんけどまぁええわ コンストラクタの解決はめんどくさかったのでこんな風にしておい…

.NETの関数が呼べた

.NETの関数が呼べるようになった おかげでprint関数とかをハードコーディングしなくてもmscorlibをロードしておけば System.Console.WriteLineを呼べる感じただ、コンストラクタを呼べるように作ってないので呼べるのはまだクラス関数だけ! メソッドは、、…

WMI Win32_Processorが使えない

最近Windows7→10にした一台でアップデートしたとたんWin32_Processorが使えなくなってた LoadPercentageがずっとnullになる感じ 他のWin10マシンでは問題ないので原因はよくわかんないアップデート後にCPUの使用ログを見たらずっと0%のままなので何事かと思…

配列が書けた

配列が使えるようになった 、、、と言っても要素足したりはまだ、おいおいやっとく要素なしの空配列の型解決が超むずそうだったので未対応 nullを対応する時に一緒に対応を考えよう クラス構文を用意してないけど.NET Frameworkのメソッドは普通に呼べそう …