Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
talk about IO
Search
usa
November 08, 2015
Programming
4
1.8k
talk about IO
大江戸Ruby会議05 基調講演「あいおーのはなし」
usa
November 08, 2015
Tweet
Share
More Decks by usa
See All by usa
Rubyの安定版を保守する意義 / Why we maintain stable versions of Ruby?
unak
0
100
WindowsにおけるRubyのエンコーディングの話 Ruby3版/Ruby's encoding on Windows at Ruby3
unak
0
360
PIXIV TECH FES. short session / What kind of contribution to OSS is really pleased?
unak
0
2k
Internal of the image processing required on the developing of web applications
unak
5
4.9k
Schrödinger's branch, or Ruby is dead every year
unak
0
690
Other Decks in Programming
See All in Programming
混沌とした例外処理とエラー監視に秩序をもたらす
morihirok
13
2.1k
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
420
Alba: Why, How and What's So Interesting
okuramasafumi
0
200
「とりあえず動く」コードはよい、「読みやすい」コードはもっとよい / Code that 'just works' is good, but code that is 'readable' is even better.
mkmk884
6
1.4k
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
cohalz
2
2.6k
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
8
1.9k
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
440
shadcn/uiを使ってReactでの開発を加速させよう!
lef237
0
290
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
7
1.4k
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
930
Azure AI Foundryのご紹介
qt_luigi
1
160
Fibonacci Function Gallery - Part 2
philipschwarz
PRO
0
210
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
For a Future-Friendly Web
brad_frost
176
9.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
Six Lessons from altMBA
skipperchong
27
3.6k
Git: the NoSQL Database
bkeepers
PRO
427
64k
4 Signs Your Business is Dying
shpigford
182
22k
Scaling GitHub
holman
459
140k
Producing Creativity
orderedlist
PRO
343
39k
Transcript
西暦2015年 時に、
自 己 紹介 、
なかむら(う) CRuby Committer Windows版メンテナ 安定版(2.1,2.0.0)メンテナ
なかむら(う) CRuby Committer usa @unak
None
基調講演
あいおーの は な し
None
https:/staff.aist.go.jp/tanaka- akira/pub/stdio-considered-harmful-lc2005- paper.pdf
None
Ruby 1.8までのI/O → C stdioベース fopen, fread, fwrite, etc… ファイルポインタ
FILE *
Ruby 1.8までのI/O → C stdioベース Ruby 1.9以降のI/O →POSIX I/Oベース
Ruby 1.8までのI/O → C stdioベース Ruby 1.9以降のI/O →POSIX I/Oベース open,
read, write, etc… ファイルディスクリプタ int
1. スレッドのread待ち 2. errnoをクリアするstdio実装 3. ungetc 4. 双方向ストリーム 5. 読み込み・書き込みの切替え
6. nonblocking writeにおけるデータ消失 7. nonblocking IO#readの動作 8. readpartialの提案・実装 9. Solarisの256個制限 10.EOFフラグ
Ruby m17n I/Oに関しては: • ファイルオープン時のエンコーディング 指定 • 入力データへのエンコーディング情報の 付与 •
必要時の入出力データのエンコーディン グ自動変換
現在のRuby I/Oのまとめ OS (POSIX I/O) Ruby class IO IO#read IO#write
… transcode エンコーディング変換 各Ruby Script おまえら \ (^o^)/
本当に?
OS (POSIX I/O) Portableだと 思い込んでいた? いつから
Rubyの 暗黒面へ ようこそ
W i n d o w s という O Sがあってな
OS (POSIX I/O) Ruby class IO IO#read IO#write … transcode
エンコーディング変換 各Ruby Script おまえら \ (^o^)/ モドキ OS (Win32 API)
Rubyインタプリタが期待する POSIX I/O #とは 全てのI/Oがファイルディスクリプタで 抽象化されていて 大抵のAPI(システムコール)はどのI/O でも共通に利用できて どのプラットフォームでもほぼ確実に 同じコードで利用できる
Windowsにおける POSIX I/Oモドキの場合 socketは完全に別扱いになっていて 対象外 ファイルはともかく、パイプや コンソールだと挙動不審な面がある 必要な関数がいくつも欠けていて 実用上問題がある
そもそも Windowsに POSIX I/Oを 期待する方が おかしい
RubyのI/O が 間違っている
OS (POSIX I/O) Ruby class IO IO#read IO#write … transcode
エンコーディング変換 各Ruby Script おまえら \ (^o^)/ モドキ OS (Win32 API) 独自実装で代替
やってられ る か !
usaは激怒した。 必ず、かの邪智暴虐の RubyのI/Oを 正さねばならぬと 決意した。
ぼくのかんがえた さいきょうの あいおー じっそうあん
PerlのI/O実装 Perl functions read,write,… PerlIO API PerlIO_read,PerlIO_write,… PerlIO_funcs PerlIOUnix_read,PerlIOUnix_write,… OS
(POSIX I/O)
PerlのI/O実装 Perl functions read,write,… PerlIO API PerlIO_read,PerlIO_write,… PerlIO_funcs PerlIOWin32_read,PerlIOWin32_write,… OS
(Win32 API)
PerlIO は すばらしい
パクろう
提案 RubyIO(仮称)の導入 io.c内で直接OSやCライブラリのI/O関数を 呼ぶのをやめ、RubyIO APIを呼ぶ。 各IOオブジェクトが、そのI/O種別に応じた プリミティブ関数セットを保持できるように。 テキストモードはRubyIOの階層の一つとして この仕組みの中で実装を用意。
テキストモード 問 題 ネイティブスレッドが導入されたとき、 別スレッドのI/Oをキャンセルさせる必要が あることから、read関数を新規に再実装。 テキストモードの実装がツラかったので、 m17nの変換機能を利用して、改行文字の 変換を行うようにした。 「遅い」という理由で総スカンを食らい、
結局、テキストモード時はPOSIX I/Oモドキのreadを 呼ぶように……
提案するだけなら 猿 でもできる
実装して ナンボ
なので、 実装してみた かったけど 間に合わず
目標 次(2.3)の次のRuby(2.4? 3.0?)への 導入を目指す 2016年前半中にはtrunkに入れたい 鋭意実装中(やる気が続くとは 言ってない)
ぼ く は よ う や く の ぼ り
は じ め た ば か り だ か ら な こ の は て し な く 遠 い Ruby I/O 坂 を よ …
ありがとう
今度こそ本当に