You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
こんにちは、フルタイムRubyコミッタとして働いてる遠藤(@mametter)です。 Ruby 3 は「静的型解析」を備えることが目標の 1 つになっています。遠藤が開発してる TypeProf は Ruby 3 の静的型解析エコシステムの中の 1 ツールです。しかし Ruby 3 の静的解析というと、RBS、TypeProf、Steep、Sorbet などいろいろなツール名が出てきてよくわからない、という声を何回か聞いたので、かんたんにまとめておきます。 3 行まとめ RBS:Ruby の型情報を扱う言語。Ruby 3 にバンドルされる。 TypeProf:型注釈のない Ruby コードを型解析するツール。Ruby 3 にバンドルされる。 Steep/Sorbet:Ruby で静的型付けのプログラミングができるツール。 詳しくはそれぞれ以下で解説します。 RBS とは RBS は、Rub
Sorbet is 100% compatible with Ruby. It type checks normal method definitions, and introduces backwards-compatible syntax for method signatures. Explicit method signatures make Sorbet useful for anyone reading the code too (not just the author). Type annotations serve as a tool for understanding long after they're written. Sorbet is designed to be useful, not burdensome. Explicit annotations are r
タイトルは釣りです。Ruby に盲目的に惚れている迂生には Ruby の痘痕(あばた)はエクボです。 それはともかく。 メソッド名の別名がありすぎ 「あなたは map 派? それとも collect 派?」っていう問いがまず嫌い。 いや,別名にも意義があるとは思うんだけど,記憶の負担が大きい。 自分では map しか使わなくても,他人のコード読むんだったら collect を知っていなくちゃならない。 しばらく前に reduce っていうメソッド見て,そんなのあったっけ?と思ったら inject の別名だった。 map/collect と inject/reduce の名前とその背景にある発想については,Rubyist Magazine に良い記事がある: そうかと思えば,Array#delete_if と Array#reject! みたいに,働きは基本的に同じだけど,削除が行われなかっ
! ? # % & | + - * / ^ ' . , < > = ~ $ @ _ {} [] () " : ` \ ; ! !true not 演算子。演算子式/notを参照。 3 != 5 「等しくない」比較演算子。演算子式/notを参照。 def xxx! 「!」はメソッド名の一部です。慣用的に、 同名の(! の無い)メソッドに比べてより破壊的な作用をもつメソッド(例: tr と tr!)で使われます。 /xxx/ !~ yyy 正規表現のメソッド =~ の否定。マッチが失敗したらtrueを返します。 ? ?a リテラル/文字列リテラル。長さ 1 の文字列。 def xx? この場合の「?」はメソッド名の一部分です。 慣用的に、真偽値を返すタイプのメソッドを示すために使われます。 xx ? yy : zz 演算子式/条件演算子。三項演算子とも呼ばれます。if xx then yy e
Rubyでファイルに対するMIME型の自動判別を行うには、次のライブラリが便利です。 MIME::Types shared-mime-info これらの違いは判別方法にあります。MIME::Typesは、IANAに登録されているMIME型情報を元に、ファイルの拡張子から判別を行なうので、拡張子が付いていないものに対しては無力です。一方shared-mime-infoは、freedesktop.orgの提供するMIMEデータベースを使い、拡張子とファイル内容の両面から判別することが出来ます。よって、拡張子が付いているとは限らない環境や付いている拡張子が信用できない場合、shared-mime-infoを使うしかありません。 なお、どちらも pure ruby であり、また gem を使って簡単にインストールすることが出来ます。 gem install mime-types gem insta
2020/12/27追記 https://www.ruby-lang.org/ja/news/2020/12/25/ruby-3-0-0-released/ => Ruby3.0.0にRBSとTypeProfと用いた静的解析に対するソリューションが提供されました。 今後はこちらのエコシステムをガンガン盛り上げていきましょう💪 あいさつ P.S. 12/11 HaskellからRubypeにgemを変更しました こんにちは. 寒さが一段と厳しくなってきた事もありまして心を温めるGemを作りました. Rubyの振る舞いを汚染する事無く型保証の恩恵をゆるふわ受けられるgemです (型をつけるとか型保証という言葉をこの文脈ではメソッドの引数返り値のクラスを実行時にチェックするという意味で使っている.) 得体の知れないGemで抵抗感があるかもしれませんが、コード自体は50行以下の薄いGemなので気
この記事を書き上げるには、相当長い時間がかかりました。本来は今年の年明け、 Rubyの死 やデイヴィッド・ハイネマイヤー・ハンソンの TDDは死んだ がアップされて騒ぎになる前に投稿するつもりだったのです。昨年末に書いたツイートを見てください。 > Rubyにはもう飽き飽きした。理由はいろいろあるが、特にその副作用と、ステータスが可変なせいで大量のユニットテストを書かされるのにはウンザリだ。 @abevoelker Rubyの開発に関しては、大勢の人が心のどこかで何かおかしい、何かが欠けていると思っているようですが、たいていの人は責める対象を間違っています。Rubyで書いたアプリがとんでもない代物になったって? それはあなたがきちんとテストコードを書かなかったか、テスト駆動開発(TDD)の指針に則って開発しなかったからです。もしくは、正しいデザインパターンに切り分けるための知識が不足してい
はじめに 本文書は、Rubyによりコーディングを行う際の規約について述べる。 実際のプロジェクトに適用する際には、このコーディング規約をカスタ マイズして用いることを推奨する。 ソースコードの整形 インデント プログラムを読みやすくするため、インデントを適宜行う。インデント 幅は2とする。また、インデントにはスペースのみを使用し、タブは使用 しない。(環境によりタブ幅が異なるため。) 例: if x > 0 if y > 0 puts "x > 0 && y > 0" end end 一行の桁数 一行の桁数は最大80桁までとする。 空行 複数のクラスの区切には空行を挿入する。 例: class Foo ... end class Bar ... end 誤った例: class Foo ... end class Bar ... end また、クラス内の各構成要素の区切にも空行を挿入する。
先日Rubyビジネス推進評議会主催の第3回Rubyビジネスフォーラムが大阪で開催されました。 Ruby言語開発者、まつもとゆきひろさんが、『インターネットが変えるソフトウェアとビジネス。Rubyを例として』と題した基調講演を行いまいした。 その内容を紹介します。 計算機としてのコンピューター IBMの初代社長トーマス・ジョン・ワトソンの有名な言葉に、「コンピューターは全世界で5台くらいしか売れないと思う」と言ったとされています。 その数字は当時の計算技師の人数とENIACの計算性能から導かれた数でした。 ところが、今ではその数百万倍の処理能力をもつコンピューターが何億台もあります。 去年だけでPC出荷台数は3億台。スマートフォンとタブレットはそれを超える出荷がされています。 コンピューターは計算機としてのみ使われているわけではありません。 インターネットとの接続 今日、大阪まで松江から飛行
Rubyで微積分や統計解析を快適に扱うDSL作ったヨ!↓ github バグ報告を頂ければ24時間以内に直します. このDSLで一番大事にしたのは、 微積分や極限、対数や三角関数などを紙上で数学をする感覚と同じ感覚で取り扱える事. わざわざRubyでやる必要、あったの...?(;゜0゜) 僕がこのDSLをRubyで作ったのにはいくつか訳があります. Rubyが好き MATLABが苦手 Rubyが好き mathmaticaが苦手 Rubyが好き pythonが苦手 Rubyが好き ... とにかくRubyが好きです. 少しマジレスすると僕の大好きなRubyは数学色が薄いのが少し悲しかったのです. (蛇足ですが、この想いからrubyのMatrixクラスにシコシコcommit してます. ex. https://github.com/ruby/ruby/pull/568 Matrixを成長させ組
さっきの記事の続き。なんと相互再帰ですらできてしまった。 @tail_recursive def even(n): if n == 0: return True else: return odd(n-1) @tail_recursive def odd(n): if n == 0: return False else: return even(n-1) print even(10000) さっきと同様、@tail_recursiveというデコレータをつけていなければスタックオーバーフローになる。上みたいにちゃんと付けてれば、難無くTrueが返ってくる。小一時間この仕組みについて悩んでみたけど、たしかになってる。CONTINUEがクラス属性じゃなくてインスタンス属性になってるおかげで。ものすごいクラスじゃないか、これ。
webrubyはWebブラウザ上で動作するmrubyです。 mrubyは組み込み用として開発されたミニマムなRuby実行環境ですが、ミニマム故に使いどころが色々とありそうです。今回はなんとWebブラウザ上で動作するmruby、webrubyを紹介します。 WebGLを使うデモ。 結構ぐりぐりと動きます。 FPSも53とあって滑らかです。 こちらはirbです。コードを書いてその場で実行して結果を得られます。 確かにちゃんと記述できます。 普通にmrubyです。 以前に紹介したJsMrubyの場合は機能拡張としてインストールされるものでしたが、webrubyの場合はemscriptenを使ってmrubyのソースコードをJavaScriptに変換しているのが特徴です。まだまだおもちゃレベルとのことですが、今後発展すると面白いプロジェクトになりそうです。 webrubyはJavaScript製のオ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く