Submit Search
Upload
mruby を C# に 組み込んでみる
•
3 likes
•
2,750 views
R
Ryosuke Akiyama
Follow
川崎Ruby会議01で発表した資料です。 mruby を C# に組み込んだ話をしました。
Read less
Read more
Software
Report
Share
Report
Share
1 of 33
Download Now
Download to read offline
Recommended
軽量Ruby『mruby』について
軽量Ruby『mruby』について
Ryosuke MATSUMOTO
Ruby東京プレゼン 資料
Ruby東京プレゼン 資料
Kazuaki Tanaka
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
Kazuaki Tanaka
mruby/c機能紹介20160329
mruby/c機能紹介20160329
shimane-itoc
mrubyでETロボコンに出よう
mrubyでETロボコンに出よう
yamanekko
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
Takuya Azumi
Customizing cargo for cross compiling
Customizing cargo for cross compiling
emakryo
Cargo makeを使ってみた話
Cargo makeを使ってみた話
emakryo
More Related Content
What's hot
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
KiyotomoHiroyasu
Rustで3D graphics programming
Rustで3D graphics programming
KiyotomoHiroyasu
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
Takehiko YOSHIDA
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
Kazuhiko Kato
Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)
Takashi Sogabe
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2
Kuniaki Igarashi
Rustのテストやエコシステム
Rustのテストやエコシステム
KiyotomoHiroyasu
Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記
Yoshiyuki Nakamura
mruby IoTプラットフォーム
mruby IoTプラットフォーム
Hiromasa Ishii
C#で速度を極めるいろは
C#で速度を極めるいろは
Core Concept Technologies
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
PyCharm入門
PyCharm入門
Yuki Nagai
Feature StoreをRustで実装した話
Feature StoreをRustで実装した話
emakryo
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
Yuya Rin
最速C# 7.x
最速C# 7.x
Yamamoto Reki
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
openrtm
hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計
Shinnosuke Tokuda
NuxtでChrome拡張作ってみた
NuxtでChrome拡張作ってみた
kyoheichida
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
Yoshifumi Kawai
Nuxt+TypeScript+Class構文のはなし
Nuxt+TypeScript+Class構文のはなし
kyoheichida
What's hot
(20)
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
Rustで3D graphics programming
Rustで3D graphics programming
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)
RubyKaigi Lightning Talks TwYM episode2
RubyKaigi Lightning Talks TwYM episode2
Rustのテストやエコシステム
Rustのテストやエコシステム
Pythonおじさんのweb2py挑戦記
Pythonおじさんのweb2py挑戦記
mruby IoTプラットフォーム
mruby IoTプラットフォーム
C#で速度を極めるいろは
C#で速度を極めるいろは
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
PyCharm入門
PyCharm入門
Feature StoreをRustで実装した話
Feature StoreをRustで実装した話
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
最速C# 7.x
最速C# 7.x
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計
NuxtでChrome拡張作ってみた
NuxtでChrome拡張作ってみた
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
Nuxt+TypeScript+Class構文のはなし
Nuxt+TypeScript+Class構文のはなし
Similar to mruby を C# に 組み込んでみる
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
simotin13 Miyazaki
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
Shuto Suzuki
Mrubyの始め方
Mrubyの始め方
Masaki Muranaka
Using or not using magic onion
Using or not using magic onion
Goichi Shinohara
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Takashi Sogabe
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
m ishizaki
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
Myfirst buildpack session_mgmt_20161201
Myfirst buildpack session_mgmt_20161201
Tomohiro Ichimura
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
shigeki_ohtsu
MobiRubyでiOSアプリをつくろう
MobiRubyでiOSアプリをつくろう
Junya Murabe
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
Tomoki Maeda
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなし
yamanekko
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
tamtam180
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
tamtam180
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
Takuya Mukohira
Hello Ruby
Hello Ruby
Takahiro KUREBAYASHI
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
Let's play with Goldfish
Let's play with Goldfish
Tetsuyuki Kobayashi
Similar to mruby を C# に 組み込んでみる
(20)
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
Mrubyの始め方
Mrubyの始め方
Using or not using magic onion
Using or not using magic onion
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Myfirst buildpack session_mgmt_20161201
Myfirst buildpack session_mgmt_20161201
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
MobiRubyでiOSアプリをつくろう
MobiRubyでiOSアプリをつくろう
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなし
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
Hello Ruby
Hello Ruby
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Let's play with Goldfish
Let's play with Goldfish
mruby を C# に 組み込んでみる
1.
mruby を C#
に 組み込んでみる 2016/08/20 川崎Ruby会議01 秋山 亮介
2.
自己紹介 名前 : 秋山
亮介 お仕事 : 業界向けパッケージソフトウェアを作ってる会社で 設計したりコード書いたり 好きな言語 : Ruby、Golang、C# Kawasaki.rb : 初めて参加して1年半くらい経ちました Twitter, GitHub : @kechako
3.
今日お話しすること ● C# って? ●
mruby って? ● C# に mruby 組み込むってどうやるの? ● まとめ
4.
C# って?
5.
C# とは ● マイクロソフトが開発したプログラミング言語 ●
共通中間言語(CIL)にコンパイルされ、共通言語ランタイム(CLR)上で実行される ● この辺の仕様が共通言語基盤(CLI) ● CLR は JIT コンパイラによってネイティブコードに変換しつつプログラムを実行する ● 実装としては .NET Framework、Mono、.NET Core ● 開発環境は Microsoft Visual Studio など ● 現在、C# のバージョンは 6.0 ● C# の名前の由来は「C++++」らしい
6.
C# のバージョン ● C#
1.0 (2002年) ● C# 1.1 (2003年) ● C# 2.0 (2005年) ○ ジェネリック、イテレーター、匿名メソッド、 Nullable... ● C# 3.0 (2007年) ○ LINQ、ラムダ式、暗黙的片付け、拡張メソッド ... ● C# 4.0 (2010年) ○ dynamic、オプション引数、名前付き引数、( Task)... ● C# 5.0 (2012年) ○ 非同期メソッド(async、await)... ● C# 6.0 (2015年) ○ オープンソース化、null 条件演算子、nameof 演算子、その他いろいろたくさん機能追加 ...
7.
C# で Hello,
World using System; namespace Hello { class Program { static void Main(string[] args) { Console. WriteLine("Hello, World!" ); } } }
8.
ところで
9.
Rubyist の皆さんはダックタイピング したいですよね?
10.
C# でもできます!
11.
C# で Duck
Typing using System; namespace DuckTyping { class Ruby { public void Hello() { Console.WriteLine("Hello, Ruby!"); } } class CSharp { public void Hello() { Console.WriteLine("Hello, CSharp!"); } }
12.
C# で Duck
Typing class Program { static void Hello(dynamic lang) { lang.Hello(); } static void Main(string[] args) { Hello(new Ruby()); Hello(new CSharp()); } } } // => Hello, Ruby! // => Hello, CSharp!
13.
C# の実行環境 Windows Linux
OS X Microsoft .NET Framework ✔ Mono ✔ ✔ ✔ .NET Core ✔ ✔ ✔
14.
.NET Core ● 2016/06/27
.NET Core 1.0 リリース! ● オープンソース、マルチプラットフォームの .NET Framework 実装 ● Windows のほか、Linux、OS X でも動作 ● Web フレームワークとして、ASP.NET Core
15.
mruby って?
16.
mruby とは ● mruby
は ISO 規格の一部にしがった Ruby の軽量な実装 ● 必要最小限のクラス、メソッドしか定義されていない ○ mrbgem として拡張可能 ○ mruby に組み込まれる ● 組み込み機器や、アプリケーションへの埋め込みを想定している ● 組み込み機器を想定しているだけあって、使用メモリが少ない ● mruby は、Ruby のコードをバイトコードに変換し、mrubyVM 上で逐次実行 ● C言語で書かれている
17.
mruby で Hello
World #include "mruby.h" #include "mruby/compile.h" int main(void) { mrb_state *mrb = mrb_open(); mrb_load_string(mrb, "puts 'Hello, World!'"); mrb_close(mrb); }
18.
mruby に機能追加するために ● モジュール定義 ○
mrb_define_module ● モジュール関数を定義 ○ mrb_define_module_function ● クラスを定義 ○ mrb_define_class、mrb_define_class_under ● インスタンスメソッドを定義 ○ mrb_define_method ● クラスメソッドを定義 ○ mrb_define_class_method
19.
C# に mruby
組み込むってどうやるの?
20.
そもそもなんでそんなこととやろうと思ったのか ● これまでの人生で一番コードを書いたのは C# ●
その C# と Ruby を絡めてみたかった ○ IronRuby なんてものもありましたが ○ 最終リリースが2011年 ● 実行時に Ruby で簡単な制御を入れたり、コンフィグを Ruby で書いたり かっとなってやった
21.
C# に mruby
組み込むってどうやるの? C# mruby (C Library)
22.
C# に mruby
組み込むってどうやるの? C# mruby (C Library) C++/CLI
23.
C++/CLI ってなんなのさー!?
24.
C++/CLI とは ● CLI
上で動作するプログラムを作るために C++ を拡張した言語 ● C++ の上位互換 ● ビルドされたライブラリは、C# からそのまま参照可能 ● C のヘッダーファイルを include して、普通に使える ● 当然、スタティックリンクライブラリをリンクできる ● .NET の参照型はハンドルで保持する ○ List<String^>^ list = gcnew List<String^>(); ● マネージドとアンマネージドの2つの世界を繋ぐためにいろいろとおまじないが必要 ● 現状、Windows でしか使えないようです
25.
つまり
26.
mruby を C++/CLI でラップして C#
から呼び出す
27.
C++/CLI C# mruby DLL DLL
28.
実際にやったこと(CSharp モジュール) ● C#
のクラスを、Ruby のコードから呼び出せるようにするためのあれこれ ● アセンブリ(DLL)のロード ○ あるDLLに実装されているクラスなどを使うには、アセンブリをロードする必要がある ○ アセンブリ厳密名または DLLのフルパスを指定してアセンブリをロードする ● C# のクラスを Ruby のクラスとして mruby に定義する ○ クラスのフルネーム( Namespace + クラス名)から、クラスの型情報を取得 ○ 型情報からメソッドやプロパティなどの情報を取得できる ○ 型情報からクラスのインスタンスを生成できる ○ メソッドやプロパティーの情報と生成されたインスタンスを組み合わせてメソッドをコールできる ○ これらを C++/CLI で mruby に登録する ● mruby で(mruby が埋め込まれた .NET アプリケーション)で Ruby のコードを実 行
29.
まとめ
30.
まとめ ● C++/CLI を絡めれば、mruby
以外も C# と C言語の世界をつなげられる ● mruby から C# のクラスにアクセスする部分がリフレクションで実現しているので、 パフォーマンスは期待しないほうが良さそう ● Ruby と C# の型の相互変換が悩ましい ● ほんとはデモ見せたかったんです…… ○ いつか Kawasaki.rb で…… ● 今回一番苦労したのは C# でも mruby でもなく C++/CLI。 ● C 言語が多少読めてかければ、mruby はそれなりに動かせる ○ あくまでもそれなりにです
31.
ところで、Windows 以外はどうなの?
32.
Windows 以外でどうするか ● .NET
Core には残念ながら C++/CLI がないっぽいです ● C の共有ライブラリーであれば、.NET Core からもコールできるっぽい ○ ごめんなさい、試してません。 ● mruby であれば、共有ライブラリーとしてビルドして、各関数を呼び出す的な ● 構造体の定義を C# 側でやるとか、つらい未来しか待っていない予感
33.
ご清聴ありがとうございました
Download Now