글

라벨이 macruby인 게시물 표시

Ruby는 얼마나 좋아졌을까

Ruby는 2.0 preview1 버전이 발표되었습니다. 근래 Scala를 공부했는데 특징중에 Java에 비해 크게 속도가 떨어지지 않고 객체지향과 함수형 언어를 지향한다는 것을 보고 각종 ruby와 scala를 한번 비교해 보았습니다. 여러가지 검사를 시행해야 정확하겠지만 단순히 모 사이트에 나와 있는 문제를 푸는 프로그램을 작성해 보았습니다. Fibonacci 수열중에 4000000보다 작은 값들 중 짝수값들의 합을 구하는 것입니다. 먼저 Ruby 소스. INFINITY = 1.0/0 MAX = 4000000 def fib(n) case n when 1..2 then n else fib(n-1) + fib(n-2) end end # ruby 1.9.3, jruby 1.7.0, macruby 0.12 n = 1 sum = 0 while (c = fib(n)) 다음은 scala 소스 입니다. 그리 잘 만들었다고 생각되지는 않지만 방식은 대충 같습니다. object App { def fibSumUnder(m:Int) = { def fib(n:Int):Int = if (n = m) sum else if (fibResult % 2 == 0) fibSumUnder0(n+1, sum+fibResult) else fibSumUnder0(n+1, sum) } fibSumUnder0(1, 0) } def main(args:Array[String]) = { print(fibSumUnder(4000000)) } } App.main(args) Ruby는 rvm을 사용해서 ruby 1.9.3p125, ruby 2.0.0dev, jruby 1.7.0, macruby 0.12을 설치해서 사용했고, scala는 2.9.2입니다. 프로그램 실행시간은 다음과 같은 방식으로 2번 측정해서 빠른 값을 얻었습니다. $ time ruby fib_test.rb $ time scala fib_test.scala 결과는 다음과 같습니다....

Ruby, MacRuby의 차이점 / 확장점

MacRuby : The Definitive Guide에서 참조 Objective C의 @selector가 메소드 이름 뒤에 :을 붙인 문자열로 바뀜 button.action = 'say_hello:' Objective C의 k로 시작하는 상수들이 (ruby의 상수는 대문자로 시작하므로) K로 시작 is... 함수는 ...? 형식으로 사용가능 isSpeaking vs. speaking? set... 함수는 . 형식으로 사용가능 object.setFoo = bar vs. object.foo = bar objectForKey와 setObject:forKey는 []형식으로 사용가능 keyedObject.setObject('bar', :forKey=>'foo') vs. object['foo'] = bar 문자열을 NSData로 변환 하는 to_data 함수 추가 object를 property list로 변환하는 to_plist 함수 추가 [1, 'two', {'three'=>3}, true, false].to_plist outlet은 attr_accessor를 생성하면 interface builder가 outlet으로 인식 attr_accessor :button String, Array, Hash, Integer, Float, Time은 각각 NS(Mutable)String, NS(Mutable)Array, NS(Mutable)Dictionary, NSNumber, NSNumber, NSDate와 완전 호환되며 objective C 메소드나 ruby 메소드 아무것이나 사용가능 ruby object는 대부분 mutable이나 인자를 전달하면 mutable이 immutable로 바뀔 수 있다 -> mutable한 object를 원하면 mutableCopy 메소드 호출, 반대의 경우 copy 메소드 호출 Set, Enumerator, Date는 o...