yhara.jp

Recent Posts

Shiika進捗(2024)

2024-12-24
Tech

このエントリは言語実装 - Qiita Advent Calendar 2024 - Qiitaの24日目の記事です。

Shiikaとは

Shiikaは私が作っている、Ruby風の文法をもつ静的型付け言語です。

昨年まででInteger/String/Arrayなどの基本的なところは実装したのですが、そのあとIO機能を実装するところで、これは先に並行性のサポートについてちゃんと考えておかないとなと気付き、今年はその作業をしていました。

(たとえば後から並行性のサポートを無理やり入れたため、Fileのreadとread_asyncが両方あって使い分けないといけない…みたいなことは避けたいなという話です。

(more...)

ファミコンで動くRubyをつくりました

2024-12-24
Tech

このエントリは言語実装 - Qiita Advent Calendar 2024 - Qiitaの10日目の記事です。

最近やってた「ファミコン上で動作するRuby」ですが、シンプルなゲームが実装できるとこまでできたのでいったんv0.1.0としました。

https://github.com/yhara/nesruby

ゲームは先日のRubyWorld Conference 2024の弊社ブースで展示していたものです。JSNESを使ってgithub pagesにもアップロードしておきました。

https://yhara.github.io/nesruby/

(more...)


mruby/ruby: mruby VMをRubyで実装してみた

2024-12-01
Tech

このエントリはmrubyファミリ (組み込み向け軽量Ruby) Advent Calendar 2024の1日目の記事です。

近年、mruby bytecodeを利用していろんな環境でRubyを動かす試みがみられます。ふつうRuby処理系を自分で実装するとすれば

ソースコードのパース→命令列への変換→VMでの実行

という3段階になるわけですが、mruby bytecodeを使えば前段はmrbcコマンドがやってくれるので、後段であるVM+ランタイムの実装だけでRubyプログラムを動かすことができ、だいぶ楽になります。

とはいえ…

(more...)

Rustのjiff crateを眺めてみた

2024-08-09
Tech

これ。

https://github.com/BurntSushi/jiff

Rustの日時ライブラリはchrono(とchrono-tz)が有名だが、新しく日時ライブラリを作った理由が

https://github.com/BurntSushi/jiff/blob/master/DESIGN.md

に詳しく書かれていて面白かった。

一番違うのはタイムゾーンデータの扱いで、jiffはOSがデータベースを持っていれば自動でそれを見て、なければバイナリに同梱したものを参照する。IANAのタイムゾーン情報は年に数回くらい更新されるそうなので、そのたびにバイナリを再コンパイルしてリリースし直すのは確かに筋が悪いかも。


DXOpal 1.6.0をリリースしました

2024-07-09
Tech

久しぶりにDXOpalに手を入れて1.6.0をリリースしました。

新機能

  • 音声再生時、.play(true)でループ再生するようになりました。
  • <div id="dxopal-loading">というタグがあるとき、画像や音声ファイルの読み込み状況をそこに表示するようにしました。読み込みが終わると消えます(display: none)。

使い方

こちらをどうぞ。


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...)

Posts

(more...)

Articles

(more...)

Category

Ads

About

About the author