Ruby
はじめに Ruby 3.0 Advent Calendar 2020 3日目の記事になります。昨日は、【Ruby 3.0 Advent Calendar 2020】Ruby3.0に投げたPull Request【2日目】です。gamelinks007.hatenablog.com今日はRuby 2.7から対応されている一部メソッドがRubyで実装されている…
はじめに Ruby 3.0 Advent Calendar 2020 2日目の記事になります。昨日は、【Ruby 3.0 Advent Calendar 2020】Ruby に右代入がやってくる【1日目】です。 secret-garden.hatenablog.com右代入、このまま何事もなく入るといいなぁ……この記事では、僕が投げたP…
はじめに 少し前にFediverseのTLで「別業種とかからプログラマーになった話があるとよさそう」と盛り上がってた。 僕自身は社会人になってからプログラマーとして仕事してるので、その辺の経験とか経緯を記事にしてみると需要がありそうかなと思い、書いてみ…
はじめに とある勉強会で以前聞いた「JavaScriptのimportとexportみたいなのがRubyで出来ないか?」という話をもとにRubyでやってみた記事です。 実際のコード module Klass @@klasses = {} def export(*klasses) klasses.each{ @@klasses[_1.to_s.to_sym] =…
はじめに この記事はRuby3で導入される並列・並行処理のための新機能Ractorに興味のある方向けの記事になります。 簡単なRactorを使ったサンプルコードを解説しつつ、理解を深めることができるように書いてみました(ほとんど未来の僕へ向けた記事になってい…
結論 以下のようなコードが動くようになります。 n = int 42 # => 42が代入される f = int 4.2 # => TypeError! やったこと 以下のようにKernelモジュールにモンキーパッチします module Kernel module_function def int(var = 0) if var.is_a?(Integer) var…
結論 Ractorで以下のコードを動くようにしてみました。 r = Ractor.new do v1, v2 = Ractor.recv puts v1 puts v2 puts v1.class puts v2.class end r.send(1, 2) r.take # => 1 # => 2 # => Integer # => Integer Ractorって? Ruby3で導入される並行・並列…
はじめに Hamada.rbでCRubyのFloatクラスをbuiltinで書き直してみた記事です。どちらかといえば作業ログな内容です。 builtinとは? 過去にいくつか記事にしているので詳細はそちらを見て頂ければと思いますgamelinks007.hatenablog.com gamelinks007.hatena…
はじめに この記事はHamada.rbでruby-type-profilerを試した時のアレコレをまとめたものです。 使用している環境としては WSL2(Ubuntu 18.04) で使用したRubyはruby 3.0.0dev (2020-09-07T04:29:42Z master 17a27060a7) [x86_64-linux]です。 ruby-type-prof…
Ruby Issue Tracking System で見つけたチケットのバグを調べたときのあれこれをまとめたものです。ちなみに、調べたチケットはこれbugs.ruby-lang.org簡単に言うとruby-profでコードの挙動を追うと意図したものと異なっているみたい 挙動が違う箇所 Ruby 2.…
結論 builtinで複数のRubyコードを使うことができるようになる話。ようはRubyでRubyを高速化するのがよりやりやすくなる話。以前書いたこの記事をもっと深堀りしたものなので、もっとソフトな話を読みたい方はこちらを読んでいただければと思います。gamelin…
結論 ブロックを渡されているかどうかをチェックして真偽値を返すKernel#iterator?をdeprecatedにしようぜという話 Kernel#iterator? Kernel#iterator?はブロックが渡されているかどうかをチェックできるメソッドです。 def check if iterator? puts "Block …
はじめに 昨日書いた記事の続編です。gamelinks007.hatenablog.comDockerを使い、るりまの開発環境(+プレビュー環境)を作ってみました。 環境構築 以下のDockerfileをまず作成します。 FROM ruby:latest WORKDIR /home COPY ./ ./ RUN gem install bundler:1…
結論 以下のDockerfileでビルド環境はできる FROM ruby:latest WORKDIR /home COPY ./ ./ RUN gem install bundler:1.17.2 bitclust-core bitclust-dev refe2 rack きっかけ 今日参加したTama.rbでるりまのビルド環境が構築し辛いという話を聞いたのがきっか…
結論 複数のクラスを実装しているRuby内部のCコードでbuiltinをいくつか組み合わせるとビルドできなくなる。 RubyでRubyを実装する 最近のRubyは「Ruby自体をRubyで実装することで高速化できる」という場面がある。その辺の詳しいことは以前記事にまとめたの…
結論 Ruby 2.7で以下のコードがSEGVする。 p **1 以下のコミットでmasterでは修正済み。github.comただ、まだバックポートはされていない模様。ちなみにバグ報告のチケットとしてはこちらbugs.ruby-lang.org Ruby 2.7でのSEGV Ruby 2.7では以下のコードでSEG…
結論 RubyでRubyを高速化できるかもしれない話です。 半分は調べた内容のメモ用で書いてます。 どういうこと? 現在開発中のRubyでは一部の実装をRubyで書くことができるようになっています。(ちなみに、Ruby 2.7ではいくつかのメソッドがRuby(とC)で実装さ…
結論 Ruby 2.7ではこのコードでSEGVする模様(WSL2 上の Ubuntu 18.04で確認) [1, 2, 3, 4].map{ _1 **3 } やりたかったこと Ruby 2.7から導入された numbered parameter を使って配列内の数値を3乗したものを作ろうとした。 が、SEGVが起きてしまった。 sh@M…
Hamada.rbがそろそろ一周年を迎えるので、やりはじめたきっかけとかまとめとこうと思い、つらつらと書いてみました。 Hamada.rbって? 島根県浜田市にある地域.rbです。多分、島根県西部では唯一の地域.rb。 hamadarb.connpass.com また島根県西部のIT系コミ…
右代入 masterに現在導入されているシンタックスで、その名の通り左から右へと値を代入することができる。例えばこんな感じのコードが書ける。 :hoge => temp # temp に:hoge が代入される Railsなどでメソッドチェーンがかなり長くなった時とかに便利そうと…
はじめに Array#minimaxというメソッドがRuby 2.4から導入されていて、そのメソッドの実装を読んでいた時に思いついたArray#both_endメソッドの実用例についてつらつらと書いてみた記事。 なので、実際にRubyにそういうメソッドがあるわけではない。 実装 /*…
はじめに この記事は俺GW頑張ったというGWアドベントカレンダーの5月1日の記事です。 プログラミング言語Rubyにテストの修正やbuiltin対応などでパッチを投げてきた時の知見などを振りかえってみたかったので書いてみた。 やったこと テスト修正関連 そもそ…
はじめに この記事は以前書いた以下の記事で紹介したbuiltinを使ってFloat(arg, exception: true)というメソッドを再定義してみた記事になります。 gamelinks007.hatenablog.com やっていることは前回の記事とおおよそ同じです。前回と異なる点は、特定のク…
はじめに タイトルにもあるようにRubyのbuiltin(正式名称を知らないので呼び出し方法から拝借)というものを使ってRuby自体をRuby(とC)で実装してみた話です。 内容としてはRuby自体の実装に興味のある方向けの話になります。 builtinって? builtinとはRub…
はじめに この記事は、俺今年頑張ったAdvent Calendar 2019 の13日目の記事です。 タイトル通り、一年間で作ってきたリポジトリを振り返っていこうと思います。なお、GitHubで公開しているもののみに限定しています。 リポジトリ数 今年一年で作ったリポジト…
はじめに この記事は「Ruby Advent Calendar 2019」の8日目の記事です。 C++でのRuby拡張実装について、つらつらと書いている記事になります。 内容としてはTataraというRubyで型を使えるライブラリを作ってみたで紹介した自作Ruby拡張を作るにあたって得たC…
HanamiというRubyのWebフレームワーク向けにBlumaってCSSライブラリのラッパーgemを作ってみた github.com 使い方は簡単で、Gemfileにhenami-blumaを追加するだけ。 あとは、<%= stylesheet 'bluma' %>のように使いたいテンプレートで呼び出すだけ 実装にあ…
はじめに たまたま東京に行っているときだったので、Ruby Hack Challenge Holiday というRuby自体のコードをHackしてみようというイベントに参加してきた! connpass.com Ruby Hack Challenge Holidayって? Rubyのコミッター(Ruby自体の開発をされている人…
はじめに この記事は、さくらのクラウドでスタートアップスクリプトを使用してMastodonインスタンスを設置した人向けのTipsです knowledge.sakura.ad.jp 経緯 いつものようにmaster追従しようと思い、やっていたらエラーを吐かれたのが事の発端 どうもGLIBCX…
はじめに AmazonDashボタンで「にゃーん」って呟けるようにしたときのアレコレをもとに、Mastodonインスタンスをスナック感覚で爆破できないか試したものになります gamelinks007.hatenablog.com なお、記事を参考にして実際に爆破するかは自己責任にてお願…