2024-12-24
Techこのエントリは言語実装 - Qiita Advent Calendar 2024 - Qiitaの24日目の記事です。
Shiikaとは
Shiikaは私が作っている、Ruby風の文法をもつ静的型付け言語です。
昨年まででInteger/String/Arrayなどの基本的なところは実装したのですが、そのあとIO機能を実装するところで、これは先に並行性のサポートについてちゃんと考えておかないとなと気付き、今年はその作業をしていました。
(たとえば後から並行性のサポートを無理やり入れたため、Fileのreadとread_asyncが両方あって使い分けないといけない…みたいなことは避けたいなという話です。
2024-12-24
Tech2024-12-17
Tech2024-12-01
Techこのエントリはmrubyファミリ (組み込み向け軽量Ruby) Advent Calendar 2024の1日目の記事です。
近年、mruby bytecodeを利用していろんな環境でRubyを動かす試みがみられます。ふつうRuby処理系を自分で実装するとすれば
ソースコードのパース→命令列への変換→VMでの実行
という3段階になるわけですが、mruby bytecodeを使えば前段はmrbcコマンドがやってくれるので、後段であるVM+ランタイムの実装だけでRubyプログラムを動かすことができ、だいぶ楽になります。
とはいえ…
2024-08-09
Tech2024-07-09
Tech久しぶりにDXOpalに手を入れて1.6.0をリリースしました。
新機能
- 音声再生時、
.play(true)
でループ再生するようになりました。
<div id="dxopal-loading">
というタグがあるとき、画像や音声ファイルの読み込み状況をそこに表示するようにしました。読み込みが終わると消えます(display: none)。
使い方
こちらをどうぞ。
2023-12-03
Tech2023-11-08
TechSchemeの話。
Gaucheでsyntax-rulesとer-macro-transformerを試してたんだけど、少し挙動が違う点に気づいた。(Gaucheを使ったのは、単に両方を実装している処理系として最初に思いついたため)
まず、以下のように定数thePiを提供するpi.scmがあるとする。
(define-module pi
(export thePi)
(begin
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">
2023-10-26
TechNASを買い替えたので先代から中身をコピーしたのだけど、改めて思ったのがどうでもいいファイルの多さだ。昔はマシンを捨てるときに何があとで必要になるかよくわかってなかったので、ユーザディレクトリを丸ごとバックアップしたりしてたのだけど、そのせいでrubyのインストールファイル(だいたい1.8.x)があちこちに点在している。
NASは故障に備えて定期的に普通のHDDにsyncしているのだけど、こういう細かいファイルが大量にあるせいで、毎回無駄に時間がかかっている。ということで、Rubyスクリプトを書いて「ファイル数が多いディレクトリ」を調べてみた。
TH = 1000
$stdout.sync = true
def count(dir)
n = 0
Dir.each_child(dir) do |child|