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
RubyJS at rubyconf.tw
Search
hasclass
December 07, 2012
Programming
2
730
RubyJS at rubyconf.tw
lightning talk
hasclass
December 07, 2012
Tweet
Share
More Decks by hasclass
See All by hasclass
RubyJS
hasclass
1
230
Other Decks in Programming
See All in Programming
CSC307 Lecture 02
javiergs
PRO
1
740
Cap'n Webについて
yusukebe
0
160
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
230
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
5
1.5k
Cell-Based Architecture
larchanjo
0
150
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
150
Basic Architectures
denyspoltorak
0
150
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
230
Go コードベースの構成と AI コンテキスト定義
andpad
0
150
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
440
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
4.8k
Featured
See All Featured
The Language of Interfaces
destraynor
162
26k
A designer walks into a library…
pauljervisheath
210
24k
Building AI with AI
inesmontani
PRO
1
600
Testing 201, or: Great Expectations
jmmastey
46
7.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Discover your Explorer Soul
emna__ayadi
2
1k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
860
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Building Adaptive Systems
keathley
44
2.9k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
81
Typedesign – Prime Four
hannesfritz
42
2.9k
The Curse of the Amulet
leimatthew05
0
6.6k
Transcript
RubyJS alpha www.rubyjs.org twi5er.com/hasclass
50 slides in 5 minutes
None
None
A port of Ruby core-‐lib to JS • String,
Regexp, MatchData • Array, Enumerable, Enumerator • Numeric (Integer/Fixnum, Float) • Range • Time, Hash coming soon
JS Methods Array jjjjjjjjjjjjj Enumerable Fixnum Float jjjj Integer
Kernel Matchdata Numeric Range Regexp jj String jjjjjjjjjjjjj
RubyJS Methods Array jjjjjjjjjjjjj................................. ............................ Enumerable .............................................. Fixnum ...........................
Float jjjj.............................. Integer .................... Kernel ... Matchdata ..................... Numeric ....................... Range ...................... Regexp jj...................... String jjjjjjjjjjjjj................................ ...........................
Compliant to Ruby No surprises.. Rubinius Rubyspecs ported
to JS
str = "a"
str = R("a”) #=> R.String
str = R("a") str.capitalize() #=> R.String #=> A
str = R("a") str.capitalize() .upto('C') #=> R.Enumerator
str = R("a") str.capitalize() .upto('C’) .each_cons(2, function (a,b) {
R.puts("#{a} to the #{b}") }) # A to the B # B to the C
str = R("a") str.capitalize() .upto('C’) .to_a() #=> R.Array #=>
[A, B, C]
str = R("a") str.capitalize() .upto('C’) .to_a() .join(', ') #=>
R.String #=> ’A, B, C'
str = R("a") str.capitalize() .upto('C’) .to_a() .join(', ') .ljust(10,
‘-’) #=> R.String #=> ’A, B, C---'
str = R("a") str.capitalize() .upto('C’) .to_a() .join(', ') .ljust(10,
‘-’) .to_native(); #=> string #=> ’A, B, C---'
RubyJS objects are wrappers Around naMve JS objects
Wrapper class RubyJS.Fixnum @include RubyJS.Comparable constructor: (__native__) ->
@__native__ = __native__; #=> new R.Fixnum(2)
Wrapper class RubyJS.Fixnum @include RubyJS.Comparable constructor: (@__native__) ->
odd: -> @__native__ % 2 != 0
Wrapper class RubyJS.Fixnum @include RubyJS.Comparable constructor: (@__native__) ->
odd: -> @__native__ % 2 != 0 next: -> new R.Fixnum(@__native__ + 1)
PorMng Ruby Code to JS
Ruby arr = %w(looks feels acts) arr.map {|w|
w.capitalize } .join(", ") .concat(" like Ruby") .center(35, '-') '---Looks, Feels, Acts like Ruby---’
RubyJS arr = R.w('looks feels acts')
RubyJS arr = R.w('looks feels acts') arr.map
{|w| w.capitalize }
RubyJS arr = R.w('looks feels acts') arr.map((w)
-> w.capitalize() )
RubyJS arr = R.w('looks feels acts') arr.map((w)
-> w.capitalize() ) .join(", ") .concat(" like Ruby") .center(35, '-') '---Looks, Feels, Acts like Ruby---’
Ruby arr = %w(looks feels acts) arr.map
{|w| w.capitalize } .join(", ") .concat(" like Ruby") .center(35, '-’) '---Looks, Feels, Acts like Ruby---’
RubyJS arr = R.w('looks feels acts') arr.map((w)
-> w.capitalize() ) .join(", ") .concat(" like Ruby") .center(35, '-') '---Looks, Feels, Acts like Ruby---’
Symbol#to_proc arr = R.w('looks feels acts') arr.map(
R.proc('capitalize’) ) .join(", ") .concat(" like Ruby") .center(35, '-')
Symbol#to_proc arr = R.w('looks feels acts') arr.map(
R.proc(’ljust’, 35) ) .join(", ") .concat(" like Ruby") .center(35, '-')
But I can do with library x, y ,z
arr = ['looks', 'feels', 'acts']; str = _.map(arr, (w)
-> S(w).capitalize().s; ).join(', ') str += ' like Ruby’; S(str).pad(15, '-');
RubyJS arr = R.w('looks feels acts') arr.map((w)
-> w.capitalize() ) .join(", ") .concat(" like Ruby") .center(35, '-') '---Looks, Feels, Acts like Ruby---’
Benefits
One dependency <script src="/es5shims.js"/> <script src="/underscore-1.3.min.js"/> <script src="/stringjs-0.9.9.js"/> <script
src="/momentjs-1.5.1.js"/> <script src="/custom_functions.js"/>
One dependency <script src="/es5shims.js"/> <script src="/underscore-1.3.min.js"/> <script src="/stringjs-0.9.9.js"/> <script
src="/momentjs-1.5.1.js"/> <script src="/custom_functions.js"/> <script src="/ruby.js">
One API _.map([], (w) -> ) _.chain(arr).(...).value() S("foo").capitalize().s
moment().format('L')
One API R( [1] ).map().to_native() R( [2] ).map().reject().to_native()
R("foo").capitalize().to_native() R(new Date(…)).strftime(“%y-%m-%d”)
One chain arr = ['looks', 'feels', 'acts'] str =
_.map(arr, (w) -> S(w).capitalize().s ).join(', ’) str += " not like Ruby” S(str).pad(str, 35, '-').s
One chain arr = R.w('looks feels acts') arr.map((w)
-> w.capitalize() ) .join(", ") .concat(" like Ruby") .center(35, '-')
One documentaMon
One documentaMon
20 kbytes minified and gzipped
It scales
Dual-‐license • AGPL • Commercial license
Booh
Booh
Should I open source it?
None
DO IT
RubyJS is now MIT License
Happy hacking
Roadmap • Move from CoffeeScript to JavaScript •
RubyJS corelib – Time, Hash, Date • RubyJS corelib-‐lite – remove some rubyisms – simplify
RubyJS.org twi5er.com/hasclass