Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Kouhei Sutou
1,814 views
アプリケーションへのRubyインタープリターの組み込み
milter managerとGroongaを例にして、アプリケーションへのCRubyの組み込み・mrubyの組み込みの実装について説明します。
Read more
2
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 55
2
/ 55
3
/ 55
4
/ 55
5
/ 55
6
/ 55
7
/ 55
8
/ 55
9
/ 55
10
/ 55
11
/ 55
12
/ 55
13
/ 55
14
/ 55
15
/ 55
16
/ 55
17
/ 55
18
/ 55
19
/ 55
20
/ 55
21
/ 55
22
/ 55
23
/ 55
24
/ 55
25
/ 55
26
/ 55
27
/ 55
28
/ 55
29
/ 55
30
/ 55
31
/ 55
32
/ 55
33
/ 55
34
/ 55
35
/ 55
36
/ 55
37
/ 55
38
/ 55
39
/ 55
40
/ 55
41
/ 55
42
/ 55
43
/ 55
44
/ 55
45
/ 55
46
/ 55
47
/ 55
48
/ 55
49
/ 55
50
/ 55
51
/ 55
52
/ 55
53
/ 55
54
/ 55
55
/ 55
More Related Content
PPTX
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
by
NTT DATA Technology & Innovation
PDF
LIFULLの全社アプリケーション実行基盤 KEEL について
by
LIFULL Co., Ltd.
PDF
Kubernetesクラスタバージョンアップを支える技術
by
LIFULL Co., Ltd.
PDF
Swaggerを利用した新規サービス開発
by
recotech
PDF
APIMeetup 20170329_ichimura
by
Tomohiro Ichimura
PDF
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
by
Takuya Iwatsuka
PPTX
SCM, CI and Maven Repo
by
Hideaki Ishijima
PDF
Apolloを使って、React-Reduxの世界にGraphQLを持ち込む
by
chuck h
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
by
NTT DATA Technology & Innovation
LIFULLの全社アプリケーション実行基盤 KEEL について
by
LIFULL Co., Ltd.
Kubernetesクラスタバージョンアップを支える技術
by
LIFULL Co., Ltd.
Swaggerを利用した新規サービス開発
by
recotech
APIMeetup 20170329_ichimura
by
Tomohiro Ichimura
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
by
Takuya Iwatsuka
SCM, CI and Maven Repo
by
Hideaki Ishijima
Apolloを使って、React-Reduxの世界にGraphQLを持ち込む
by
chuck h
What's hot
PPTX
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
by
gree_tech
PDF
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
by
Toshiaki Maki
PDF
Spring native について
by
Takamasa Mitsuji
PDF
Responsableを使ったadr実装
by
Kenjiro Kubota
PDF
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
by
whywaita
PDF
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
by
Toshiaki Maki
PDF
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
by
Takayoshi Tanaka
PDF
Deno を aws fargate で動かす
by
虎の穴 開発室
PPTX
Wagby on Cloud Foundry
by
Tomohiro Ichimura
PDF
GraphQL with React
by
Taketoshi 青野健利
PPTX
Jenkins X on GKE & Rancher2.0 on ORACLE Cloud
by
cyberblack28 Ichikawa
PPTX
Spring I/O 2015 報告
by
Takuya Iwatsuka
PDF
Scalaでもgae
by
Masaki Toyoshima
PDF
LaravelでAPI定義を管理する
by
Kenjiro Kubota
PDF
SpringOne 2016 報告 Reactive APIの設計・実装・使用
by
Takuya Iwatsuka
PPTX
祝 top-level project Apache Geode
by
Tomohiro Ichimura
PPTX
5分でわかる Capabilities と Privilege + KubeCon Recap
by
Masaya Aoyama
PDF
Spring social の基礎
by
Takuya Iwatsuka
PDF
Scala on gae
by
Masaki Toyoshima
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
by
gree_tech
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
by
Toshiaki Maki
Spring native について
by
Takamasa Mitsuji
Responsableを使ったadr実装
by
Kenjiro Kubota
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
by
whywaita
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
by
Toshiaki Maki
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
by
Takayoshi Tanaka
Deno を aws fargate で動かす
by
虎の穴 開発室
Wagby on Cloud Foundry
by
Tomohiro Ichimura
GraphQL with React
by
Taketoshi 青野健利
Jenkins X on GKE & Rancher2.0 on ORACLE Cloud
by
cyberblack28 Ichikawa
Spring I/O 2015 報告
by
Takuya Iwatsuka
Scalaでもgae
by
Masaki Toyoshima
LaravelでAPI定義を管理する
by
Kenjiro Kubota
SpringOne 2016 報告 Reactive APIの設計・実装・使用
by
Takuya Iwatsuka
祝 top-level project Apache Geode
by
Tomohiro Ichimura
5分でわかる Capabilities と Privilege + KubeCon Recap
by
Masaya Aoyama
Spring social の基礎
by
Takuya Iwatsuka
Scala on gae
by
Masaki Toyoshima
Viewers also liked
PDF
Apache ArrowのRubyバインディングをGObject Introspectionで
by
Kouhei Sutou
PDF
PGroonga – Make PostgreSQL fast full text search platform for all languages!
by
Kouhei Sutou
PDF
Mroonga・PGroonga導入方法
by
Kouhei Sutou
PDF
MySQL 5.7 InnoDB 日本語全文検索(その2)
by
yoyamasaki
PDF
初心者向けMroonga・PGroonga情報
by
Kouhei Sutou
PPTX
I need a flourishing business model v2.0 (comments remove, pk original text)(1)
by
Patricia Kambitsch
PDF
Certificate_6
by
Nelson Viegas
PDF
Mroonga最新情報2016
by
Kouhei Sutou
PDF
Groonga族2016
by
Kouhei Sutou
PDF
EFFICIENT TRUSTED CLOUD STORAGE USING PARALLEL CLOUD COMPUTING
by
International Journal of Technical Research & Application
PDF
Introducing mroonga 20111129
by
Kentoku
PDF
marketing_cloud_fundamentals
by
Petr Cikan
PDF
Information about the SSL Certificate
by
CheapSSLUSA
PPTX
Photography Introduction
by
jackoregan1996
PDF
Mroonga unsupported feature_20111129
by
Kentoku
PDF
Certificate_2
by
Nelson Viegas
DOCX
Mercadotecnia electronica.html
by
MIGUEL ALVAREZ
PPTX
Visita de estudo ao pavilhão do conhecimento 24 nov_2015
by
anabelaac
PDF
Seller survay0001
by
Jerry Smektala
PDF
Adam at Comunicaciones Hoy
by
Adam Datacenter
Apache ArrowのRubyバインディングをGObject Introspectionで
by
Kouhei Sutou
PGroonga – Make PostgreSQL fast full text search platform for all languages!
by
Kouhei Sutou
Mroonga・PGroonga導入方法
by
Kouhei Sutou
MySQL 5.7 InnoDB 日本語全文検索(その2)
by
yoyamasaki
初心者向けMroonga・PGroonga情報
by
Kouhei Sutou
I need a flourishing business model v2.0 (comments remove, pk original text)(1)
by
Patricia Kambitsch
Certificate_6
by
Nelson Viegas
Mroonga最新情報2016
by
Kouhei Sutou
Groonga族2016
by
Kouhei Sutou
EFFICIENT TRUSTED CLOUD STORAGE USING PARALLEL CLOUD COMPUTING
by
International Journal of Technical Research & Application
Introducing mroonga 20111129
by
Kentoku
marketing_cloud_fundamentals
by
Petr Cikan
Information about the SSL Certificate
by
CheapSSLUSA
Photography Introduction
by
jackoregan1996
Mroonga unsupported feature_20111129
by
Kentoku
Certificate_2
by
Nelson Viegas
Mercadotecnia electronica.html
by
MIGUEL ALVAREZ
Visita de estudo ao pavilhão do conhecimento 24 nov_2015
by
anabelaac
Seller survay0001
by
Jerry Smektala
Adam at Comunicaciones Hoy
by
Adam Datacenter
Similar to アプリケーションへのRubyインタープリターの組み込み
PDF
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
by
Takuya Azumi
PDF
Ruby でつくる型付き Ruby
by
mametter
PDF
軽量Ruby『mruby』について
by
Ryosuke MATSUMOTO
PDF
マニアックなRuby 2.7新機能紹介
by
mametter
PDF
桐島、Rubyやめるってよ
by
Narihiro Nakamura
PDF
プログラマー
by
Kouhei Sutou
PDF
Rubyを使った分散全文検索ミドルウェア
by
Kouhei Sutou
PDF
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
by
Kazuaki Tanaka
PDF
Ruby開発が教えてくれたこと
by
yukihiro_matz
PDF
組込み向けRuby処理系mrubyの可能性
by
Salesforce Developers Japan
PDF
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
by
Koichi Sasada
PDF
Rubyによる本気のGC
by
Narihiro Nakamura
PDF
Ruby紹介
by
Masahiro Tomita
PDF
RubyKaigi Lightning Talks TwYM episode2
by
Kuniaki Igarashi
PDF
Ruby 2.6 Update
by
Kazuhiro Nishiyama
PDF
Ruby2.0 Getting Started
by
Yuki Teraoka
PDF
Ruby 2.5
by
Masahiro Tomita
PDF
メタメタプログラミングRuby
by
emasaka
PDF
Summary of Ruby
by
Tamotsu Furuya
PDF
ET2017資料: 開発言語mruby・mruby/cが開く新たなIoTプラットフォーム
by
shimane-itoc
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
by
Takuya Azumi
Ruby でつくる型付き Ruby
by
mametter
軽量Ruby『mruby』について
by
Ryosuke MATSUMOTO
マニアックなRuby 2.7新機能紹介
by
mametter
桐島、Rubyやめるってよ
by
Narihiro Nakamura
プログラマー
by
Kouhei Sutou
Rubyを使った分散全文検索ミドルウェア
by
Kouhei Sutou
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
by
Kazuaki Tanaka
Ruby開発が教えてくれたこと
by
yukihiro_matz
組込み向けRuby処理系mrubyの可能性
by
Salesforce Developers Japan
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
by
Koichi Sasada
Rubyによる本気のGC
by
Narihiro Nakamura
Ruby紹介
by
Masahiro Tomita
RubyKaigi Lightning Talks TwYM episode2
by
Kuniaki Igarashi
Ruby 2.6 Update
by
Kazuhiro Nishiyama
Ruby2.0 Getting Started
by
Yuki Teraoka
Ruby 2.5
by
Masahiro Tomita
メタメタプログラミングRuby
by
emasaka
Summary of Ruby
by
Tamotsu Furuya
ET2017資料: 開発言語mruby・mruby/cが開く新たなIoTプラットフォーム
by
shimane-itoc
More from Kouhei Sutou
PDF
Rubyと仕事と自由なソフトウェア
by
Kouhei Sutou
PDF
MySQL 8.0でMroonga
by
Kouhei Sutou
PDF
My way with Ruby
by
Kouhei Sutou
PDF
Redmine検索の未来像
by
Kouhei Sutou
PDF
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
by
Kouhei Sutou
PDF
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
by
Kouhei Sutou
PDF
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
by
Kouhei Sutou
PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
by
Kouhei Sutou
PDF
Apache Arrow
by
Kouhei Sutou
PDF
Better CSV processing with Ruby 2.6
by
Kouhei Sutou
PDF
MariaDBとMroongaで作る全言語対応超高速全文検索システム
by
Kouhei Sutou
PDF
PGroonga 2 – Make PostgreSQL rich full text search system backend!
by
Kouhei Sutou
PDF
Apache Arrowフォーマットはなぜ速いのか
by
Kouhei Sutou
PDF
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
by
Kouhei Sutou
PDF
Apache Arrow - A cross-language development platform for in-memory data
by
Kouhei Sutou
PDF
Apache Arrow 2019
by
Kouhei Sutou
PDF
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
by
Kouhei Sutou
PDF
Red Data Tools
by
Kouhei Sutou
PDF
Apache Arrow
by
Kouhei Sutou
PDF
Apache Arrow 1.0 - A cross-language development platform for in-memory data
by
Kouhei Sutou
Rubyと仕事と自由なソフトウェア
by
Kouhei Sutou
MySQL 8.0でMroonga
by
Kouhei Sutou
My way with Ruby
by
Kouhei Sutou
Redmine検索の未来像
by
Kouhei Sutou
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
by
Kouhei Sutou
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
by
Kouhei Sutou
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
by
Kouhei Sutou
Apache Arrow - データ処理ツールの次世代プラットフォーム
by
Kouhei Sutou
Apache Arrow
by
Kouhei Sutou
Better CSV processing with Ruby 2.6
by
Kouhei Sutou
MariaDBとMroongaで作る全言語対応超高速全文検索システム
by
Kouhei Sutou
PGroonga 2 – Make PostgreSQL rich full text search system backend!
by
Kouhei Sutou
Apache Arrowフォーマットはなぜ速いのか
by
Kouhei Sutou
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
by
Kouhei Sutou
Apache Arrow - A cross-language development platform for in-memory data
by
Kouhei Sutou
Apache Arrow 2019
by
Kouhei Sutou
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
by
Kouhei Sutou
Red Data Tools
by
Kouhei Sutou
Apache Arrow
by
Kouhei Sutou
Apache Arrow 1.0 - A cross-language development platform for in-memory data
by
Kouhei Sutou
アプリケーションへのRubyインタープリターの組み込み
1.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 Embed Ruby アプリケーションへの Rubyインタープリターの組み込み 須藤功平 株式会社クリアコード 東京Ruby会議11 2016-05-28
2.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 Speaker's award Continuous development award
3.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 受賞者 cedlemo Continuous development award
4.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 受賞理由 2015年1月から継続的に Ruby-GNOME2の開発に 参加しているから 一発すごい改善をした人よりも 地味でも継続的に改善している人を評価したい Continuous development award cedlemo
5.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 宣伝 OSS Gate
6.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 OSS Gate OSS開発に 参加する人を 増やす取り組み
7.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 背景 OSS利用は当たり前になった →OSS利用者増加✓ ✓ 開発参加者も増えるといいな →OSS増加✓ ✓ OSS Gate
8.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 OSS開発参加 すごい改善じゃなくていい✓ バグレポートとかでいい typo見つけました!とかでもいい✓ サンプルを更新とかでもいい✓ ✓ OSS Gate
9.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 OSS Gate参加の動機 人それぞれでいい OSS Gate
10.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 私の動機 ユーザーが自由に使える ソフトウェアが増えるといいな ✓ 自由に使える例: コードを読んで学習できる✓ 今日聞いた話の実装を確認できる!✓ ✓ OSS Gate
11.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 興味ある? 興味?(重要:動機不問) OSS開発に参加したい!✓ OSS開発参加者を増やしたい!✓ ✓ 5階でワークショップ開催中 説明や見学は私に一声かけて✓ ✓ OSS Gate
12.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 本題 Rubyの組み込み (CアプリケーションへのRubyインタープリターの組み込み)
13.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 動機 柔軟な記述力が欲しい✓ Cの速さが欲しい✓ Ruby以外の言語とも連携したい Pythonも組み込む✓ ✓ なんかカッコいい✓ Rubyの組み込み
14.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 別の実現方法 拡張ライブラリー Rubyの組み込み
15.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 組み込みと拡張ライブラリー C Ruby Ruby C Ruby組み込み 拡張 ライブラリー Rubyの組み込み
16.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 拡張ライブラリー 実現可能: 柔軟な記述力が欲しい✓ Cの速さが欲しい✓ ✓ 実現不可能: Ruby以外の言語とも連携したい✓ なんかカッコいい感✓ ✓ Rubyの組み込み
17.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 実現方法の選び方 基本は拡張ライブラリー✓ すでにあるアプリなら組み込み✓ 選びたい方があるならそっち✓ Rubyの組み込み
18.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 組み込みを選ぶ時の注意 それなりの覚悟が必要 利用例があまりない 問題遭遇確率が高い✓ ✓ 問題遭遇時: 自分でソースを読んで調べる✓ 詳しい人に相談 ささださん<できればサポートを強化したい ✓ ✓ Rubyの組み込み
19.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 組み込み方を紹介 実例 milter manager Since 2008
20.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 milter manager メール サーバー milter manager メール フィルター メール フィルター メール フィルターmilter Ruby milterを管理するmilter サーバープロセス
21.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 Ruby組み込みの実装 初期化✓ fork対応✓ イベントループとシグナル✓ milter managerへのRubyの組み込み
22.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 初期化:GC関連 { /* スタックの底を設定 */ /* GC時にCのローカル変数に代入されている Rubyのオブジェクトをマークするため */ RUBY_INIT_STACK; /* ... */ } milter managerへのRubyの組み込み
23.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 スタックとマーク対象 { RUBY_INIT_STACK; /* ... */ { VALUE object = rb_ary_new(); /* マーク対象 */ } } { VALUE object = rb_ary_new(); /* マーク対象外 */ } milter managerへのRubyの組み込み
24.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 確認例 #define MARKED_P(object) rb_objspace_marked_object_p(object) { RUBY_INIT_STACK; { VALUE object = rb_ary_new(); /* GC.start(immediate_sweep: false) */ printf("%dn", MARKED_P(object)); /* => 1 */ } } { VALUE object = rb_ary_new(); /* GC.start(immediate_sweep: false) */ printf("%dn", MARKED_P(object)); /* => 0 */ } スライドのリポジトリー:examples/gc.c
25.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 GC関連の注意 { RUBY_INIT_STACK; /* Rubyのオブジェクトを触る Cのコードはこのブロック内でだけ使うこと */ /* Cからのコールバックで Rubyのコードを呼び出すときは注意 */ } milter managerへのRubyの組み込み
26.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 初期化:シグナル関連 { RUBY_INIT_STACK; /* シグナルハンドラーを保存 */ ruby_init(); /* Rubyがシグナルハンドラーを登録 */ /* シグナルハンドラーを復帰 */ /* シグナルはアプリで処理したいから */ } milter managerへのRubyの組み込み
27.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 シグナル復帰例 { /* 他のシグナルも同様に復帰 */ void (*sigint_handler)(int); sigint_handler = signal(SIGINT, SIG_DFL); ruby_init(); signal(SIGINT, sigint_handler); } milter managerへのRubyの組み込み
28.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 初期化:引数の処理 { /* ...ruby_init()... */ static char *argv_raw[] = {"milter-manager", "-e;"}; int argc; char **argv; argc = sizeof(argv_raw) / sizeof(char *); argv = argv_raw; ruby_incpush(/* ... */); /* $LOAD_PATHの設定 */ /* 中でいろいろ初期化するのでダミーの引数で呼ぶ */ ruby_process_options(argc, argv); } milter managerへのRubyの組み込み
29.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 初期化:アプリの初期化 { /* ...ruby_process_options()... */ /* require中に例外が発生してもここで止める */ /* ここで止めないと例外を受け取る人がいなくて クラッシュ */ rb_protect(/* rb_require("milter/manager") */); } milter managerへのRubyの組み込み
30.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 milter managerとRuby 組み込み処理系の1つ Pythonも使えるようにしたかった 結局Ruby必須でPython対応はしなかった ✓ ✓ 起動後にdlopen()で動的にsoを 読み込んで組み込み ✓ milter managerへのRubyの組み込み
31.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 起動時に動的に組み込み milter manager Ruby milter manager Ruby 起動前 起動 起動後 milter manager Ruby dlopen() milter managerへのRubyの組み込み
32.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 起動時にso読んで組み込み { /* ↓GC用 */ RUBY_INIT_STACK; /* 動的にsoを読んで初期化関数を呼ぶ */ /* dlopen(); init = dlsym(); init(); ←の中でruby_init();とか */ /* アプリの処理 */ } milter managerへのRubyの組み込み
33.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 RUBY_INIT_STACK!? { /* ↓アプリ側で呼ぶの!? */ RUBY_INIT_STACK; /* 動的にsoを読んで初期化関数を呼ぶ */ /* dlopen(); init = dlsym(); init(); ←の中でruby_init();とか */ /* アプリの処理 */ } milter managerへのRubyの組み込み
34.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 アプリにーlruby… milter manager Ruby milter manager Ruby 起動前 起動 起動後 milter manager Ruby dlopen() -lruby カッコわるい。。。 milter managerへのRubyの組み込み
35.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 Ruby組み込み時の意気込み 本体に組み込む✓ 動的に組み込もうとしない✓
36.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 Ruby組み込みの実装 初期化✓ fork対応✓ イベントループとシグナル✓ milter managerへのRubyの組み込み
37.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 milter manager利用例 大学・企業 ユーザー数:数百〜数万人✓ ✓ プロバイダー ユーザー数:数千〜数十万人✓ ✓ それなりの性能が必要 milter managerへのRubyの組み込み
38.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 性能向上方法 CPU マルチプロセス1択✓ ✓ 通信・多同時接続 いろいろ✓ ✓ milter managerへのRubyの組み込み
39.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 マルチプロセス マスタープロセス listen()a. fork()b. ✓ ワーカープロセス accept()a. ↑したクライアントの処理b. ✓ milter managerへのRubyの組み込み
40.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 Ruby組み込みとfork() fork()すると ワーカープロセスがクラッシュ プロセス終了時とか✓ ✓ ヒント:fork()とスレッド✓ milter managerへのRubyの組み込み
41.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 fork()とスレッド 混ぜるな危険✓ Rubyはスレッドを動かしている 例:タイマースレッド✓ ✓ fork時にスレッドのケアが必要✓ milter managerへのRubyの組み込み
42.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 スレッドのケア VALUE rb_pid; /* タイマースレッドの後始末とか した上でfork */ rb_pid = rb_funcall(rb_mKernel, rb_intern("fork"), 0); return NUM2INT(rb_pid); milter managerへのRubyの組み込み
43.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 Ruby組み込みの実装 初期化✓ fork対応✓ イベントループとシグナル✓ milter managerへのRubyの組み込み
44.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 イベントループとシグナル 気にしなくてよい アプリがシグナルを処理するから✓ ✓ 拡張ライブラリーなら対応必要 イベントループ中にシグナル発生✓ →すぐにイベントループを抜ける✓ ✓ milter managerへのRubyの組み込み
45.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 Rubyの組み込みのまとめ Rubyを組み込む実装方法を紹介✓ 動的組み込みは諦めろ✓ fork時はRubyのforkを使う✓ Rubyの組み込み
46.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 mrubyの組み込み 実例 Groonga Since 2013
47.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 Groongaとmruby Groonga 全文検索エンジン(mruby組み込み)✓ 高速に検索結果を返し続けたい✓ リソース消費は波がない方がよい 例:いらなくなったメモリーはすぐに解放 ✓ ✓ mrubyの組み込み
48.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 リソース消費 時間 メモリー使用量 こっちが望ましい mrubyの組み込み
49.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 メモリー管理 Groonga 必要なときに確保✓ いらなくなったら解放✓ ✓ mruby GC✓ メモリーが足りなくなったら解放✓ ✓ mrubyの組み込み
50.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 GroongaとmrubyのGC mrubyのGCにGroongaのリソース 管理を任せない リソース管理: mrubyのオブジェクトのsweep時に Groongaのリソースを解放 ✓ ✓ mrubyの組み込み
51.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 mrubyのGCとリソース mrubyのGC Groongaリソースのサイズを知らない✓ 適切なタイミングでsweepできない✓ RubyのGCも同じ✓ ✓ mrubyの組み込み
52.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 実例1: 明示的な解放 # 検索 result = table.search(condition) begin output_result(result) # 出力 ensure result.close # 明示的な解放 end mrubyの組み込み
53.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 実例2: 所有権を渡さない /* Groonga側でリソース確保 */ expr = grn_expr_create(/* ... */); /* mrubyのオブジェクトとしてラップ */ mrb_expr = grn_mrb_value_from_grn_obj(mrb, expr); /* mruby側は参照して処理する */ mrb_size = mrb_funcall(mrb, mrb_expr, "estimate_size", 1, mrb_table); /* Groonga側でリソース解放 */ grn_expr_close(expr); mrubyの組み込み
54.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 mruby組み込みのまとめ GCに任せないという選択 使用メモリー量を安定させるため✓ 安定した性能を出すため✓ ✓ mrubyの組み込み
55.
Embed Ruby -
アプリケーションへのRubyインタープリターの組み込み Powered by Rabbit 2.1.9 まとめ Rubyの組み込み ガッツリ連携するつもりで設計 拡張ライブラリーで十分じゃないかよく検討すること ✓ ✓ mrubyの組み込み アプリの大事な事を忘れないで設計✓ ✓ OSS Gateもよろしく✓
Download