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
技術的な話は全くないので、Qiitaの中の人に消されなくもなさそうですが、うれしかったので。 初めてのPR。そしてマージ 今回、アドベントカレンダーのネタ探しとして、自作mrbgemのエラーをとる作業 をしていたんですが、その中でmruby本体のマクロのタイポを見つけました。修正前のコードでも何の問題もなく動く(何故動くのかわかりませんが)のでこの修正は何にも寄与しないPRですが、これがmrubyへの初めてのPRになります。PRを送ってからその日のうちにマージされたスピード感が半端ないです。 ただ、単純な誤字の指摘。みたいなものなので、あまり達成感はないというか。そういうワガママな気持ちはありました。 2回目のPR。テスト実行時の表示フォーマットの修正 だれかWIndowsでmrubyのテストを実行して、mruby-socketの通らないテストを直す(またはスキップする)修正を行ってくれる
今年度の下半期に放送大学に入学したのでそれっぽい話でもしようかと思い考えたりしてました。 結果、学徒として論文でもいくつか読んでみようかと思い4本ほど読んでみたのでそれについて軽く書いてみます。 ちなみに放送大学に入ってから気がついたのですが、大学生の特権として大学で一括して契約しているおかげでIEEEなど登録しないと読めない論文などが読み放題で今回とても役に立ちました。 1本目: mruby -- Rapid Software Development for Embedded Systems 九州に引っ越すきっかけを作ってくださった大学の先生の論文です。 mrubyの基本アーキテクチャなどの解説が主体で、ある程度の内部構造も把握した上で入門したい方におすすめしたい論文でした。 スクリプト言語による開発効率の向上 スクリプト言語でありながらコンパイルできる特性 逐次(incremental
まあ、VMをぶん回すようなプログラムだと、大体5~10倍くらいの速度が出るようです。文字列処理やIOなどCで書かれたライブラリを多用すると速度の差は縮まるでしょう。 ##内部構造 mrubyのJITはTracing JITです。Tracing JITそのものはググってください。mrubyのVMのバイトコード命令をフェッチして命令毎の処理に分岐するところで制御を乗っ取って実行回数をカウントします。実行回数がある閾値になったら機械語を生成し、次にこの命令を実行したら生成した機械語を呼び出します。 概要をつかむのは名古屋Ruby会議03で発表させてもらったスライドがいいと思います https://www.slideshare.net/miura1729/mrubyjit 内部構造の詳細はこちらを見てください あなとみー おぶ mrubyのJIT (その1) このあと、連続していてその13まであり
#include <stdio.h> #include <mruby.h> #include <mruby/compile.h> #include <mruby/string.h> #include <mruby/array.h> #include <mruby/hash.h> int main( void ){ mrb_state* mrb = mrb_open(); if ( NULL != mrb ){ mrbc_context* cxt = mrbc_context_new( mrb ); mrb_value value; mrb_load_string_cxt( mrb, "def debug( var ); p var; end", cxt ); // TODO mrbc_context_free( mrb, cxt ); cxt = NULL; mrb_close( mrb
matsumoto-rさんのngx_mrubyで最初のHTTPSアクセス時に自動で証明書を設定可能にするFastCertificateの提案とPoCを参考に、Let's EncryptからSSL証明書を自動取得する仕組みを内包した nginx-fastcertificate を実現するDockerコンテナとdocker-compose設定例を作ってみました。 全体像 使い方 以下のような yaml ファイルを用意します。 version: '3' services: nginx: image: quay.io/akiray03/nginx-fastcertificate ports: - '80:80' - '443:443' volumes: - ./logs:/usr/local/nginx/logs links: - redis:redis environment: NGINX_WO
私が管理しているサーバー上で動く、管理用のツールだったりバッチ処理だったりがいくつかあります。 課題 Rubyで書きたい Ruby on Rails で開発しているチームで運用しているサーバーなので、おのずとそういったツールも Ruby で作られる事が多いです。1 処理にもよりますが、シェルスクリプトではなく慣れている Ruby で書きたいのです。 Rubyのインストールが必要 Rubyで書きたいとなるとサーバーに Ruby のインストールが必要になります。 Ruby on Railsのアプリが稼働しているサーバーなら、当然 Ruby もインストールされているのですが、そうでないサーバーもあります。OS のパッケージマネージャーで入る Ruby は古いことも多いので rbenv など使ってインストールすることになります。2 シェルスクリプトのツールを使う場合と比べるとインストール直後のサー
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 本記事は ETロボコン Advent Calendar の23日目の記事です。 はじめに 同じタイトルで記事を書き始めて3度目になりました。 これを書くにあたって過去の記事を振り返ってみました。2014年版はまだ何も情報が公開されていなかった時期でもあり、競馬の予想みたいなことを書いてますが、2015年版の内容からあまり変化はないようです。 なので今年は書かなくてもいいかなとも思ったのですが、去年とあるイベントで参加者の方からmrubyは情報が少なくて困っていると聞きましたので、今年私が見聞きした話を書いてみることにします。何かのお役に
この記事は mruby advent calendar の 9 日目の記事です。 諸事情により大幅に公開が遅れて大変申し訳ありません。 mruby は軽量かつ柔軟な言語であるため、 Web サーバや Linux コンテナの設定用言語として用いられたり、 あるいは、サーバの構成を記述する DSL として用いられる等の、 いわゆるシステムプログラミングの領域で使用される例をよく見かけます。 しかし、従来、システムプログラミングを行うためには、 C 言語などの難解な言語を記述する必要があり、 これは mruby でシステムプログラミングをする際も例外ではありませんでした。 一方で、近年ではシステムプログラミングを行うための言語として、 Go や Rust といった、実用的ないしは、言語処理系の研究成果を集積したような言語が台頭してきています。 そこで、本稿では、まだまだ発展途上でありますが、Ru
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く