- 1995 Ruby 0.95 fj.sourcesで公開
- 1996/12 Ruby 1.0
- 1999 最初の書籍
- 2000〜2002 書籍が色々出る
- 2001 初の英文書籍 RubyConf
- 2005 Railsが広まる
===
- 1973 プログラミングを始める BASIC シャープ製ポケコン
- 1980 Pascalの本を読む 言語愛
- 1982 Lispの本
- 1983 OOP
- 1984 Smalltalk
- 1988 C Emacs
- 1989 CLOS(Common Lisp Object System)
- 1999 cmailを開発・メンテ(最初のフリーソフトウェア)
- 1991 OOP C(クラスライブラリみたいなの)
- 1993 Ruby
- 思考の表現
- より良い思考
- 思考のガイド
- 言語設計は思考設計
- 言語設計は自由
- 言語実装は楽しい
- 言語実装はコンピュータ科学の総合芸術
- データ構造
- パフォーマンス
- 最適化
- 困難
- 「まだ言語が要るのか?」
- 「どうせ広まらない」
- 「時間のムダ」
- 「たしかにそうかも(自分自身のネガティブさ)」
- 諦めかけた
- 私は言語が好きだ
- 言語設計を始めた
- 雑多なアイディアに基づいて
- 例:逆逆ポーランド記法 → 単なるポーランド記法だったw
- 例:Classic(クラスっぽいC) → 黒歴史
- 例:オブジェクト志向シェル → 構想倒れ
- Ruby
- 1993-1994 一人で開発
- 障害:モチベーションの維持
- 「Hello World」に半年
- GCに2ヶ月 - 関係ないところで落ちるからデバッグが大変!
- 1994/12 αリリース
- 1995/12 0.95 リリース
- Ruby=Lisp+Smalltalk+Perl+C
- Ruby is-a Lisp
- データモデル Mix-in S式なし
- Ruby is-a Smalltalk
- クラスライブラリ Method missing
- Ruby is-a Perl
- 文字列操作 正規表現 配列操作
- Ruby is-a C
- 演算子 UNIX文化
- 雑多なアイディアに基づいて
- 開発の秘訣
- 全く新しいものを追求しない
- 1つずつ進歩する
- 組み合わせる
- よく知っている(or 好きな)ものを
- 自分が使いたいものを作る
- 作品を愛する
- 長く続ける
#####新しいものを始める時に、みんな反対する 「うまく行くはずない」
#####心配するのをやめて、言語を作りましょう!
- 関数型言語
- ドメイン特化言語(DSL)
- ミニ言語
- トイ言語
- 言語設計で良いプログラマに
- 言語を基本抽象に
- 言語はプログラミングの本質だから
頑張ってます!
出ます!
なにかオープンソースの小さめなものから見はじめるといいよ! Lispとか構文解析がちっちゃいのでいい。
窓際だった頃につくりました! あと、仕事中にRubyの開発をして通勤中に仕事の開発をしてました!
頑張ります。Refinementsは死なない!
- Clojure
- Erlang
- Fortless
===
@crigor EngineYard
AWS EC2, EBS EBS snapshot
使うたびに作る。終わったら消しちゃえばその分しか料金がかからない
Chef
- App
- Web Server(Nginx)
- App Server(Unicorn, PHP, FPM)
- template(database.yml memcache.yml)
- jsonファイルから差し込める
本番のebsボリュームのsnapshotを取って、それをステージングを作る際にattachする
VMを上げる。ローカルにはインストールしないので、複数バージョンを共存させたりしなくて済む。
- VirtualBox
- Vagrant
boxはAMIみたいなもの。vagrantにchefを走らせて全部用意する。
vagrantはホストマシンのdirectoryをマウントしてくれるので、ローカルにあるのと同じ感覚でエディタで編集できる。
- Officialのを使う
- 誰かが作ったのを使う
- 自分で作る
Debian chefインストール済み・ほかはなし
同じ環境を本番・ステージング・開発に使えるよ!
===
Laurent Sansonetti, Shizuo Fujita/HipByte
- iOS / OS X 開発に使えるツールチェイン
- Rubyの方言(ない機能・追加した機能もある)
- RubyランタイムとObjectiveCランタイムの融合
- Rubyの静的コンパイラ(直接Intel/ARM機械語へ)
- ラッパー/ライブラリエコシステムのプラットフォーム
- 商業プロダクト
- たくさん
- Basecamp iPhone app
好きなエディタで作れるよ!
- Sublimt
- TextMate
- RubyMine IDE
パッケージマネージャー
- 実演
- Objective-C runtime上に実装
- RubyCocoaみたいなbridgeではない
- RubyMotionのclass, methods, objectはそのままObjective-Cのclass, methods, object
- Ruby<=>Objective-Cでデータの変換なく互いに呼び出し可能
- RubyMotion VM
- GVLがない(Global VM Lockか?)
- GCD
- Appleが提供する機能
- CPUコア数に応じてスレッドが生成される
- コンパイラ
- Ruby -> AST -> LLVM IR -> Assembly -> Machine Code
- マシンコードに変換 → フラームワークのリンク → ipaアーカイブの作成
### まとめ
- Objective-C runtimeと結びついている
- 静的コンパイル
===
@tom_enebo @headius
- 2.1には機能でRubyに追いつくよ
- 性能
- JVM自体が進歩してる
- JRuby自体も進歩してる!
JRuby / JVM / OS
- 正しく動く
- 最適化
- JVMに直す点を指摘
- 直るまでまつ
- 2へ
すごく速い!red/black treeベンチマークでRuby2.0の1/20、Rubiniusの1/5
でもJVM開発は遅い…
- 外部Java API変更
- 内部の大変更
- 新しいランタイム(IR)
2014年!多分…
- 定数伝搬
- IR 実行時オーバーヘッドを削減
- 最適化後の中間コードをキャッシュして再利用
- 直接ポインタ
- 実装が困難
- FFI
- MRI, JRuby, Rubiniusで動くようメンテされている
- XNI
- 実験的なC API代替実装
- 並行実行ライブラリ
- 実装間で互換性のある標準方法が必要
- 並行実行
- 最適化
- Security
- 仕様
- Communication
- ロード時間が遅い
- C extension対応が弱い
===
@hsbt / asakusa.rb, paperboy&co
ruby-lang.org
- githubに来たpull requestの取り込み
- http://ci.hstb.org/
- ruby-lang.orgのroot権限
- いろんな人に権限付与
- メーリングリストへのメンバー追加・削除
- rubyist.netのroot権限
- Rubyのバージョンを上げた(1.8.7 -> 2.0.0)
Radiant CMS → Jekyllへ!
- ruby-langのroot権限・Rubyのコミット権をもらいました
- PullRequestしてね
- Rubyを楽しもう!
===
ささださん
スライド http://rvm.jp/t.pdf
- Ruby 2.1スケジュール
- 内部の新機能
- キーワード引数
- Refinements
- Module#prepend
- m17nの修正
- Ruby 2.0で導入された機能の改良
- オブジェクト割り当ての性能解析がしやすく
- 世代別GC
- ライトバリアで保護したもの・されていないものを扱う
- C extへの互換性の問題が(多分)ない
- マーク&スイープ
- C拡張に親切
- 全部やったら無駄だよ
- 若いObjectが早く死ぬから
- 世代別にわけ、若いのにGCを先にやる
- old/new
- ライトバリア
- oldがnewを参照することを検出
- Remember Set
- ライトバリア
- 既存のC-extに挿入しなきゃいけない
- 3rd partyのものには手が出せない。
そこで!
-
オブジェクトを2つに分ける
- Shady: WB保護されない
- Sunny: WBで保護された
-
作成時に分ける
-
SunnyはShadyになりうる。逆はない
-
マーク時間が短くなる
-
スイープ時間は変わらず
-
WBのせいで実行時間が少し遅くなる
######利点
- WBに保護されないオブジェクトが存在できる
- 少しずつWB対応することでパフォーマンスを改善できる
######問題点
- 死んでるのに生きてると誤判定されるオブジェクトが増える
- WBを適切に挿入できていないとバグになる
- スイープの時間は変わらない
######将来の改良点
- Major GCの回数の調整
- classをsunnyに
- 「sunny」って用語は変
- インラインメソッドキャッシュの改良
- 同じ内容のStringを共有
===
@sikachu
- みんな使ってるgemをアップデートしないから
- 最新バージョンで動く != 古いバージョンで動く
- semver
- 守らない人がいる
uninstall and reinstall
まずい方法
- 時間がかかる
- 複数バージョンを同時にテストできない
- 依存性の問題
- スペースの無駄
- 開発に参加するのにruby managerが必要
- bootstrap scriptみたいなのが必要
Gemfileを分ける
- メンテが大変
- 繰り返し依存性を指定しなきゃいけない
もっといい方法があるはず!
一つのファイルで複数バージョンの依存性を管理し、bundlerのための環境を自動でつくる
paperclipのTravisCIでも使ってる!
Promocode: RUBYKAIGI
===
@hasclass
- Rubyにはメソッドがたくさんある
- JSにはそんなには多くない
- underscore.js
- wrapper object
- メソッドチェーン呼び出しでJS型に戻す
- native classを拡張
- String
- Array
- Hash
- Range
- Time
- Regexp
- Fixnum
- Float
- JS型でしか動かないよ
- 戻り値は全部RubyJS型だよ
- blockの引数はJS型だよ
- 名前と別名に注意
- Base, helpers
- メソッドの実装(RubyJS-Lite)
- chain可能(RubyJS-Chaining)
- RubySpecJS
JSネイティブ型をRubyJS型で置き換える!
- Fast
- Small
- 単一ライブラリ
- 拡張可能
- 魔法をつかってない