yhara.jp

Recent Posts

Shiikaの型推論

2023-12-03
Tech

このエントリは言語実装のカレンダー | Advent Calendar 2023 - Qiitaの2日目の記事です。前日の記事はabo_junghichiさんの9キロバイトのコードで関数型言語を実装 - 自作言語revappの理由 - 一人一党党でした。

Shiikaは私が作っている、Ruby風文法の静的型付け言語です。今日は10月に行った型推論周りの整理を解説します。

Shiikaの型推論

型推論が行われるのは以下の2つのケースです。

(more...)

er-macro-transformerのrenameは衝突を回避するだけじゃない

2023-11-08
Tech

Schemeの話。

Gaucheでsyntax-rulesとer-macro-transformerを試してたんだけど、少し挙動が違う点に気づいた。(Gaucheを使ったのは、単に両方を実装している処理系として最初に思いついたため)

まず、以下のように定数thePiを提供するpi.scmがあるとする。

(define-module pi
  (export thePi)
  (begin
(more...)

Sinatraとhtmxは相性いいかもしれない

2023-11-05
Tech

このブログはSinatraで自作しているのだけど、最近画像アップロード機能を実装した。

そこで思ったのが、ほんのちょっとのAjaxを追加するのが面倒だなということ。最近(?)はVanilla JSとかいって、「jQueryがなくても素のJSだけで大丈夫」とか言うじゃないですか。でも例えば「削除ボタンを押したら確認ダイアログを出し、Okを選んだらサーバにDELETEリクエストを送り、ボタン部分をレスポンスメッセージで置換する」みたいなのを書こうとするとけっこうめんどい。かといってこのためだけにReactやVueを入れるのはやりすぎで。

そこで本日ご紹介するのがこちらのhtmx。htmlタグにhx-から始まる属性を書くだけでいい感じに動いてくれるというやつ。いかがでしょうか。

<button hx-confirm="Delete this?" hx-post="(APIのURL)" hx-swap="outerHTML">
(more...)

ファイルの多いディレクトリを表示するRubyスクリプト

2023-10-26
Tech

NASを買い替えたので先代から中身をコピーしたのだけど、改めて思ったのがどうでもいいファイルの多さだ。昔はマシンを捨てるときに何があとで必要になるかよくわかってなかったので、ユーザディレクトリを丸ごとバックアップしたりしてたのだけど、そのせいでrubyのインストールファイル(だいたい1.8.x)があちこちに点在している。

NASは故障に備えて定期的に普通のHDDにsyncしているのだけど、こういう細かいファイルが大量にあるせいで、毎回無駄に時間がかかっている。ということで、Rubyスクリプトを書いて「ファイル数が多いディレクトリ」を調べてみた。

TH = 1000
$stdout.sync = true
def count(dir)
  n = 0
  Dir.each_child(dir) do |child|
(more...)

NASを買い替えた

2023-10-26
Tech

写真とかの保管用にI-O DATAのHDL-CE2.0BというLAN HDDを長年使ってたんだけど、さすがに調子悪くなってきたので新しいのに買い替えた。

HDL-CEは2012年に買ったので、もう10年以上経ってるのか。ひえー。壊れたら買い換えようと思ってたんだけど全然壊れないのよね。

とはいえだんだん読み込みが遅くなってきたような気はするし、数年前に誤って落下させてしまって蓋がちょっと浮いてるし、明らかに買い替え時ではあった。とどめを刺したのは、先月いつものように普通のHDDにFastCopyで丸ごとバックアップしようとしたら「SMB 1.0はもう使えません」的なエラーが出たこと。セキュリティの関係でdeprecatedなんだね。ハードより先にプロトコルが駄目になるとは。

買い替え先

後継は同じくI-O DATAのHDL-AAX2にした。容量は2TBあれば十分なので1ベイでよくて、"初心者向け"をうたうHDL-TAの方が少し安いけど、読み書きは速いに越したことはないのでこっちに。

いまのところ先代と変わらず不満なく使えている。しいていえば起動・停止時のビープ音がうるさいかなあ。節電のために指定時刻に電源をオン・オフする機能があるんだけど、夜中にピーっと鳴られても困るので、結局つけっぱにすることにした。事務所とか向けの機能なのかも。


asyncを使わずに並行処理をやる方法はないのか

2023-09-13
Tech

メモです。

なぜasyncな関数と普通の関数は互換性がないのか

(more...)

Shiika開発日記: LLVM 12から16に上げた

2023-08-15
Tech

ShiikaはずっとLLVM 12というわりと古いバージョンを使っていたのだけど、さすがにそろそろ上げるか〜ということで16に上げた。

一番でかい変更は、LLVM 15からOpaque pointer typeがデフォルトになったこと。つまりi8*%Object*みたいな「◯◯へのポインタ」型が、pointee typeがなくなって全部ただのptrになった。

これによってコード生成がシンプルになる…のはそうなのだが、変なLLVM IRを吐いてしまったときにclangでチェックされずに実行時にSEGVすることになるので、どうも不安な気持ちだ。ともあれとりあえず既存のテストが通る状態にはできたのでマージした。



Shiika進捗(2022年)

2022-12-25
Tech

こんばんわ。本記事は言語実装のカレンダー | Advent Calendar 2022 - Qiitaの24日目の記事です。

Shiikaは私が作っているRuby風の文法をもつ静的型付け言語です。静的言語はだいたい性能を重視した設計になっていることが多くて、動的言語は書きやすさを重視した設計が多いのですが、「静的だけど書きやすさ重視の設計」にすることで、静的なエラーチェックと書きやすさを両立したいと考えています。「Rubyっぽい手触りの静的言語」を目指しています。

2022年の主な進捗

  • パターンマッチ
    • enumに対し、match x when Some(y) ... とかでパターンマッチできるようになりました。これがないと始まらないよね。
  • Module
    • RubyのModule(Rustでいうとtraitみたいな)を実装しました。実現方法はSwiftのwitness tableというやつを参考にしました。
(more...)


Posts

(more...)

Articles

(more...)

Category

Ads

About

About the author