Submit Search
mruby を C# に 組み込んでみる
3 likes
2,780 views
R
Ryosuke Akiyama
川崎Ruby会議01で発表した資料です。 mruby を C# に組み込んだ話をしました。
Software
Read more
1 of 33
Download now
Download to read offline
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
32
33
More Related Content
PDF
軽量Ruby『mruby』について
Ryosuke MATSUMOTO
PDF
Ruby東京プレゼン 資料
Kazuaki Tanaka
PDF
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
Kazuaki Tanaka
PPTX
mruby/c機能紹介20160329
shimane-itoc
PDF
mrubyでETロボコンに出よう
yamanekko
PDF
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
Takuya Azumi
PDF
Customizing cargo for cross compiling
emakryo
PDF
Cargo makeを使ってみた話
emakryo
軽量Ruby『mruby』について
Ryosuke MATSUMOTO
Ruby東京プレゼン 資料
Kazuaki Tanaka
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
Kazuaki Tanaka
mruby/c機能紹介20160329
shimane-itoc
mrubyでETロボコンに出よう
yamanekko
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
Takuya Azumi
Customizing cargo for cross compiling
emakryo
Cargo makeを使ってみた話
emakryo
What's hot
(20)
PPTX
RustによるGPUプログラミング環境
KiyotomoHiroyasu
PPTX
Rustで3D graphics programming
KiyotomoHiroyasu
PDF
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
Takehiko YOSHIDA
PDF
Rubyとプログラミング言語の潮流
Kazuhiko Kato
PDF
Tokyo ruby kaigi 10 (sogabe)
Takashi Sogabe
PDF
RubyKaigi Lightning Talks TwYM episode2
Kuniaki Igarashi
PPTX
Rustのテストやエコシステム
KiyotomoHiroyasu
PDF
Pythonおじさんのweb2py挑戦記
Yoshiyuki Nakamura
PPTX
mruby IoTプラットフォーム
Hiromasa Ishii
PPTX
C#で速度を極めるいろは
Core Concept Technologies
PDF
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
PDF
PyCharm入門
Yuki Nagai
PDF
Feature StoreをRustで実装した話
emakryo
PDF
Rubyで創るOpenFlowネットワーク - LLまつり
Yuya Rin
PPTX
最速C# 7.x
Yamamoto Reki
PDF
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
openrtm
PDF
hooks riverpod + state notifier + freezed でのドメイン駆動設計
Shinnosuke Tokuda
PDF
NuxtでChrome拡張作ってみた
kyoheichida
PDF
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
Yoshifumi Kawai
PDF
Nuxt+TypeScript+Class構文のはなし
kyoheichida
RustによるGPUプログラミング環境
KiyotomoHiroyasu
Rustで3D graphics programming
KiyotomoHiroyasu
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
Takehiko YOSHIDA
Rubyとプログラミング言語の潮流
Kazuhiko Kato
Tokyo ruby kaigi 10 (sogabe)
Takashi Sogabe
RubyKaigi Lightning Talks TwYM episode2
Kuniaki Igarashi
Rustのテストやエコシステム
KiyotomoHiroyasu
Pythonおじさんのweb2py挑戦記
Yoshiyuki Nakamura
mruby IoTプラットフォーム
Hiromasa Ishii
C#で速度を極めるいろは
Core Concept Technologies
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
PyCharm入門
Yuki Nagai
Feature StoreをRustで実装した話
emakryo
Rubyで創るOpenFlowネットワーク - LLまつり
Yuya Rin
最速C# 7.x
Yamamoto Reki
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
openrtm
hooks riverpod + state notifier + freezed でのドメイン駆動設計
Shinnosuke Tokuda
NuxtでChrome拡張作ってみた
kyoheichida
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
Yoshifumi Kawai
Nuxt+TypeScript+Class構文のはなし
kyoheichida
Ad
Similar to mruby を C# に 組み込んでみる
(20)
PDF
RubyからC#を扱う
107steps
PPTX
C#とRubyをつなぐ
107steps
PPTX
Ruby と C# をつなぐ
107steps
PDF
ET2017資料: 開発言語mruby・mruby/cが開く新たなIoTプラットフォーム
shimane-itoc
PDF
mrubyでゲームを書いてみた
Yousuke Kuroda
PDF
Hello Ruby
Takahiro KUREBAYASHI
PPT
Mrubyの始め方
Masaki Muranaka
PDF
Tokyurubykaigi05
yamanekko
PDF
ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発
shimane-itoc
PDF
C#への招待
Yusuke Matsushita
PDF
MobiRubyでiOSアプリをつくろう
Junya Murabe
PPTX
The evolution of c#
leverages_event
PDF
「mruby/c」の利用期待分野~M2Mでの利用~160726
shimane-itoc
PDF
Yapc2012ltthon
Junya Murabe
PDF
C# から Ruby に乗り換えた
Hideaki Miyake
PDF
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
PDF
RubyConfの話の続きのおはなし
yamanekko
PDF
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
Yoshihisa Ozaki
PDF
Cross Platform Make
Tatsumi Naganuma
PPTX
.NET Compiler Platform
信之 岩永
RubyからC#を扱う
107steps
C#とRubyをつなぐ
107steps
Ruby と C# をつなぐ
107steps
ET2017資料: 開発言語mruby・mruby/cが開く新たなIoTプラットフォーム
shimane-itoc
mrubyでゲームを書いてみた
Yousuke Kuroda
Hello Ruby
Takahiro KUREBAYASHI
Mrubyの始め方
Masaki Muranaka
Tokyurubykaigi05
yamanekko
ET West 2017資料:mruby/c、mrubyで実現される効率的なIoT開発
shimane-itoc
C#への招待
Yusuke Matsushita
MobiRubyでiOSアプリをつくろう
Junya Murabe
The evolution of c#
leverages_event
「mruby/c」の利用期待分野~M2Mでの利用~160726
shimane-itoc
Yapc2012ltthon
Junya Murabe
C# から Ruby に乗り換えた
Hideaki Miyake
Roslynで体験してみるC#スクリプト #cs_fukuoka
Yuta Matsumura
RubyConfの話の続きのおはなし
yamanekko
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
Yoshihisa Ozaki
Cross Platform Make
Tatsumi Naganuma
.NET Compiler Platform
信之 岩永
Ad
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