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
GR-SAKURAにmrubyを移植しているのですが、Rubyに関してそれほど詳しくないので、バイナリをどう扱えばいいのか分かりませんでした。 例えば、Cなどでよくある write関数(write(int handle, void *buf, unsigned n))などを実現したいとき、mrubyではどのように扱えばいいのか? mrubyに詳しい方に聞いてみたところ分かりました。 mrubyは文字列でバイナリも扱える そう、mrubyは文字列でバイナリも扱えました。結局、Luaと同じでした。 例えば、0x10 0x20 0x30 0xD0 0xE0 0xF0というバイナリデータを作りたいときは以下のように書けます。 bin = 0x10.chr + 0x20.chr + 0x30.chr + 0xd0.chr + 0xe0.chr + 0xf0.chr たとえ、文字列に0が含まれていても
<< 2013/07/ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1. mrubyのmrb_gc_arena_save()/mrb_gc_arena_restore()の使い方 >> _ mrubyのmrb_gc_arena_save()/mrb_gc_arena_restore()の使い方 Twitterで質問を受けたので、 mrubyのmrb_gc_arena_save()/mrb_gc_arena_restore()の使い方 という解説を行った。が、1つ140文字のTwitterでの解説にはどうしても無理があるので、 こっちでまとめることにする。 まずは、Twitterの発言*1はこんな感じ。 arenaの目的。利用中のオブジェクトはGCに回収されないよう保護
This articles was published on 2013-07-04 [June 2013] mruby news What happened on the mruby front in June 2013? Test Refactoring The mruby internal test system was till now quite simple. Every assertion was checked based on the return value. Due to that the test code contained a lot of helper variables and binary concatenations to validate the proper test results. After we have introduced many mor
第2回 Windowsランタイム・コンポーネントの作成とmrubyのコンパイル:連載:Windowsランタイム・コンポーネントによるコードの再利用(1/3 ページ) 連載目次 前回は、Windowsランタイム・コンポーネントの概要、Windowsストア・アプリの開発言語と実行環境、Windowsストア・アプリで既存のコードを再利用するための基本方針について話をした。 今回は、最初にC#でWindowsランタイム・コンポーネントを作成する場合の要点について説明する。この説明で、WindowsランタイムがどのようにABI(アプリケーション・バイナリ・インターフェイス)を実現するか理解できると思う。ここではVisual Studio 2012の利用にまでは踏み込まないが、いずれにしても、Windowsストア・アプリ用.NETを利用するWindowsランタイム・コンポーネントの作成は比較的容易なた
第3回 CライブラリのWindowsランタイム・コンポーネント化戦略:連載:Windowsランタイム・コンポーネントによるコードの再利用(1/5 ページ) 既存のC/C++プログラムをWindowsランタイム・コンポーネント化する際に取れる戦略と、それぞれの特徴や、メリット/デメリットを考察する。 連載目次 前回は、Windowsランタイム・コンポーネントを作成するうえで注意すべき点について考えた後、C#で簡単なWindowsランタイム・コンポーネントを作成し、それを実際に利用してみた。その後、本連載でWindowsランタイム・コンポーネント化するmrubyをコンパイルしてみた。今回は、既存のC/C++プログラムをWindowsランタイム・コンポーネント化する際に取れる戦略と、それぞれの特徴、メリット、デメリットなどを検討してみよう。 既存のC/C++プログラムをWindowsランタイム・
販売終了 「組込向け」との触れ込みで登場したmruby。Ruby設計者であり、mrubyの主要開発者である、まつもとゆきひろ氏が自らそのすべてを解説します(日経Linux2012年10月号から2013年3月号までの連載を最新情報に修正して掲載)。 関連サイト出版社による関連ページが公開されています。 日経Linux内容紹介日本発のオブジェクト指向言語「Ruby」。近年、Webアプリケーションを開発する言語として広く利用されています。 これまでのRuby は「アプリケーションはRubyで開発する。不足する機能はCなどで拡張ライブラリを開発して、Rubyに追加する」というアーキテクチャーを仮定しています。しかし、それでは組込ソフトウエアによくある「アプリケーションはC/C++で開発する。柔軟性・生産性が必要な部分だけをRubyに任せたい」というアーキテクチャーとは相いれません。アプリケーション
mrubyのGitHubからソースを適宜とってきて使っているのだが、2013/5/26あたりのソースから手持ちのアプリが動かなくなって、しばらく(2週間くらい)原因がわからず悶々として過ごす。 とりあえず、回避策を教えていただいたので備忘録として残しておく。 ※2013/6/10時点の状況 ■現象 ・C言語からの呼び出し処理 mrb_funcall(mrb_gn, mrb_top_self(mrb_gn), “mainLoop”, 0); ・mrubyのメソッド def mainLoop() $vpad.update() $theScreen.update() $theScreen.render() end 上記のソースで、mrubyのmainLoopメソッドを繰り返し呼ぶと、47回目の呼び出し時に例外が発生するという問題が発生。 ■途中経過 $theScreen.render()の中身は
さて、いきなりマニアックな話題で。 最近は仕事で Tizen というモバイル OS 向けの Native プログラムを C++ で書いてたりします。 コンパイラは -std=c++0x オプションを受け付けてくれたりするので多少は現代的なプログラミングができているのでその点は楽しいです。 しかし、Tizen プラットフォームのコードはちょっと古くさい規約で書かれている(たとえばテンプレートとか例外は使用していないし、イベントハンドラとかの書き方は古き良き Java っぽい)ので、文字列処理とか I/O がからむ処理とかはかなり面倒、非同期処理にいたっては、(ry なわけです。 そんなときにはやっぱり Ruby が懐かしくなるわけですね。 Tizen はかなり Pure な Linux 環境という印象なので、Ruby(CRuby)も動いちゃいそうな気はしますが、TPK(Tizen のパッケー
_ WindowsRTでmruby 5月くらいにWebメディアにWindows Store Appの実装方法の1つについて記事を書く予定ですが、その予告編ということで。 Visual Studio 2012には、ARM用のVC++クロスコンパイラが付属しているので、それを利用するとARMデバイス(SurfaceRT以外にあるのかどうか知らないけど)用のネイティブコードのプログラムを生成できます。 でも、Jail Breakしたデバイスでなければそのままでは動かせません。 ではARM用にクロスコンパイルしたプログラムをどう利用するかというと、Windows Store Appには、そうやって作成したネイティブコードのバイナリを利用するための方法が用意されているので、それを使います。ちなみに、上記の予定記事ではそれについて書くわけです。 もちろん、Windows Store Appで利用するた
2013年4月18日木曜日 mrubyのGCの仕組みを調べた 時刻: 0:09 動機 LuaのAPIは、Lua内部で扱われる値に関してスタック上であれこれ操作出来るだけで、値自体を直接取得したり作成することはできない。値を取り出したいときはスタック上のある場所にある値の型を調べて、その型の値を取り出すAPIを呼び出す、という具合になっている。この場合、処理系で扱う値はすべて処理系側で管理されているので、ガベージコレクト(GC)できるのもわからんでもない。 しかしmrubyのAPIではスクリプト内部で扱う値をmrb_valueとしてC言語側に直接取り出せる。この場合処理系の管理を逃れてしまうことはないのか。またCの関数でmrubyのオブジェクトを作成した瞬間にGCが走った場合に、まだmrubyで管理している変数からの参照がなくて、解放されてしまったりしないのか。 大昔の事しか知らないけど
CA CA::B CAddrinfo CArgumentError CArray CBase CBasicSocket CBinTest_MrubyBinDebugger MCRubyExtension MComparable CComplex CComplexLikeNumeric CCustomExp CDerived CEOFError MEnumerable CEnumerator CEnumerator::Chain CEnumerator::Generator CEnumerator::Lazy CEnumerator::Yielder MErrno CFile MFile::Constants CFile::FileError CFile::NoFileError CFile::PermissionError CFile::UnableToStat CFixnum MFloa
昨年の3月から開発を始めたMobiRubyは、まだ開発途中で多くの方々に使って頂ける状態ではないにも関わらず、福岡Ruby大賞のポストPC賞と、日本OSS奨励賞を頂くことが出来ました。多くの方が応援してくださった事で、受賞できたのだと思います。ありがとうございます! 当初の予定より時間は掛かっていますが開発は順調に進んでおり、ObjCとCocoaを使えれば何とかiOSのアプリを書けるようになりました。開発をこのまま進め、ObjCやCocoaの知識がなくてもRubyを使って、気軽にiOSやAndroidのアプリ構築を行えるツールにしたいと考えています。 MobiRubyは私の趣味であり、RubyでiOS/Androidのアプリが書ければ幸せだなぁというプロジェクトですが、それと同時に海外でも多くの人に使われ、自分の名刺代わりになるプロジェクトにしようという気持ちもあります。 しかし、世の中に
2013年3月12日火曜日 mrubyでカスタムアロケータを指定 時刻: 17:10 mrubyで標準のmalloc/freeじゃなく、アプリ側で用意したメモリアロケータを指定してみる。mrubyの初期化をmrb_open()じゃなくてmrb_open_allocf()にして、引数にアロケータの関数とその関数に渡すユーザデータを与えて呼び出すことで、アプリ側でメモリ管理ができる。 アロケータは typedef void* (*mrb_allocf) (struct mrb_state *mrb, void*, size_t, void *ud); という型の関数で、サイズが0なら解放、0より大きい場合ポインタがNULLなら新規確保、NULLじゃなければ以前確保していた領域をリサイズした結果のポインタを返すことで、アプリ側で任意のメモリ管理ができる。デフォルトだと以下の様なアロケータになっ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く