Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
みなさーん、プログラマの石川某くんはいつもデスマにはまっていていつJITの勉強しているんだろと思ったことはありませんか?その秘密は、mruby-meta-circular。Cも機械語も使いません。だから、忙しい某君にもできるのです。サンプルCoDeを無料で送ります。続きはWebで というわけで(どういうわけだ(定番の突っ込み))、mrubyとmrubyのVMであるRITE VMの命令だけでTracing JITの仕組みを解説しようと思います。 mrubyのJITと基本的な構造は大体同じです。 インタープリタ 初めにベースになるVMを見てみましょう。おそらく世の中で2番目にたくさん作られているプログラム、フィボナッチ級数それだけが動くよう注意深く命令セットが選ばれています。これから先、このVMをFibVMと呼びます。また、mrubyのVMはRITE VMです。 この2つを区別することが非常に
コードの大部分をC言語で記述していることが見て取れます。 また、CRubyのIO実装を移植しているため、各種環境への移植のための多数の ifdef が混じったコードとなっていたり、mrubyの想定利用場面では実装されていなくとも不自由しない機能までコードとして存在するために見通しが悪い、といった課題がある状況でした。 Note: io.c などを見て頂ければ分かりますが、CRubyの実装では FILE 構造体の中にアクセスする必要があるため、OSやライブラリ、コンパイラに合わせた拡張が必要になっています。 mruby本体は C99 の範囲内で移植性を維持することを目指しています。その拡張ライブラリであるmruby-io も、可能な範囲で移植性を保つべきでしょう。 iij/mruby-io の実装コンセプト mrubyのIO実装を行った時期には、mrubyのモジュール機構であるmrbgemは
#include "mruby.h" #include "mruby/string.h" #include "mruby/dump.h" static void p(mrb_state *mrb, mrb_value obj) { obj = mrb_funcall(mrb, obj, "inspect", 0); fwrite(RSTRING_PTR(obj), RSTRING_LEN(obj), 1, stdout); putc('\n', stdout); } int main() { mrb_state* mrb; mrb_value val, val2; struct RClass *c_time; mrb = mrb_open(); val = mrb_funcall(mrb, mrb_obj_value(mrb_module_get(mrb, "Time")), "gm",
mrubyにおける並列・平行処理 mrubyには、標準で提供されるプロセスやスレッドは無いようです。そもそもmrubyは組込み向けに開発されている訳で、OSの機能としてのプロセスやスレッドを利用する事を前提にしないのは当然っちゃ当然ですね。 ただしmrbgemsには幾つか有用なライブラリが提供されていて、それらを使わせて貰えばコルーチンや非同期I/Oが実現できます。 コルーチン(Fiber) mrubyにおいてもRuby1.9で導入されたFiberがmrbgemsとして提供されています。Fiber、僕はRubyでも直接使った事がないのであまり知らないのですが、mrubyでは有力な平行処理の選択肢の一つとなりますのでここらで勉強します... Fiberはスレッドとは違い、明示的に切り替えない限りコンテキストは切り替わりません。 つまり一度に走る処理は常に一つであり、コンテキスト切り替えのタイ
これは,mruby advent calendar 2013の6日目の記事です. ネタですが,Herokuでテキストを返すだけのHTTPサーバを構築してみます. 手順ですが,ローカルでビルドしてサーバを動かしてみてから,その手順をbuildpackに移植しています.今回書いたコードは,mruby-buildpackとmruby-test-serverにpushしてあるので,必要でしたら参照してください. ちなみに,node.jsをよく引き合いにだすのは,今回はmruby-uvを使っているからと,わたしがnode.jsでしかherokuにdeployしたことがないからです. まず,ローカルでの動作確認ですが,mruby-uvとmruby-httpの使い方の確認からはじめて,自前のbuild_config.rbでビルドして,mrubyでサンプルを元に書いたスクリプトを動かすといった流れでした.
目次 ごあいさつ 必要なもの Raspberry Piとハードウェアの準備 各種ツールのインストール プロジェクトを作成する Raspberry Piで実行する JTAGを使ってデバッグする ごあいさつ こんにちは、yamanekkoです。この記事はmruby Advent Calendar 2013の23日目のエントリになります。 本記事では、Raspberry Pi で、あえてLinuxはもちろんRTOS等も使わずに(いわゆるbare metal環境で)mrubyでLチカをしてみます。JTAGとEclipseを使用することにより、GDBを視覚的に使ってデバッグしながら開発することができます。 私たちはふだんはMac OS Xを使用しています。なのでスライド等で公開している情報はMacに偏りがちなのですが、今回はRubyConf 2013で発表したネタをWindowsで試してみました。
mrubyをビルドする 本記事では、mrubyのビルド方法について説明します。 mrubyのビルドは、Rakeをベースとした独自のビルドシステムを使っています。 これは主にmrbgemsとクロスビルドの為です。当初はmakeを使っていたのですがmrbgems対応の為にC言語で別コマンドを作るなど無理が出てきたので、2013/1にRakeベースの物に差し替えました。 その際、Matzからの注文が @masuidrive @mattn_jp ビルドにRuby(CRuby)を使ってもいいですが、当面1.8/1.9両対応、かつRakeを使わないという条件を付けます。mrubyのためにいろいろインストール要求するのは避けたいので — Yukihiro Matsumoto (@yukihiro_matz) December 12, 2012 というモノだったので、Rakeの古いバージョンを元にRake
mruby Stable版V1.3.0(2017.7.4)はこちらからダウンロード出来ます。 リリースノートはこちらから mrubyをインストールするにあたり以下のソフトウェアがインストールされていることを ご確認ください ・bison http://www.gnu.org/software/bison/ ・Ruby v2.0以上 mruby Stable版 v1.3.0 Linux/Mac版 ・mruby Stable版v1.3.0 Linux/Mac mruby Stable版 v1.3.0 Windows版 Windows版のインストールには上記の必要ソフトウェアの他にCコンパイラーが必要です。 ・mruby Stable版 v1.3.0 Windows版 Linux/Mac/Windows安定版で評価済外部mrbgemsリスト 〇: 動作OK ●:ビルドOK ただしユニット
When I try to cross-compile MRuby for Windows on Linux Mint 17.2 using MinGW I get a lot of messages like the ones bellow and compilation fails. /home/d/projects/mrubyscript/mruby/build/win32/lib/libmruby.a(codedump.o):codedump.c:(.text+0x5a): undefined reference to _putchar' /home/d/projects/mrubyscript/mruby/build/win32/lib/libmruby.a(codedump.o):codedump.c:(.text+0x120): undefined reference to_
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く