4 ms·
I agree that the comparison is unfair - but I think the larger point is that there are many simple bits of Ruby that can copy/paste to Crystal with an immediate
by shay_ker 6y ago
I agree that the comparison is unfair - but I think the larger point is that there are many simple bits of Ruby that can copy/paste to Crystal with an immediate performance boost. In fact, it'd be interesting to slowly re-write a Ruby codebase into Crystal.
Of course, harder than it sounds, lots of specifics to figure out.
- suzuki 6y agoYou are absolutely right. I have written Scheme interpreters in both languages. Compare https://github.com/nukata/little-scheme-in-ruby/blob/v0.3.0/scm.rb#L35-L55 https://github.com/nukata/little-scheme-in-ruby/blob/v0.3.0/... # Cons cell class Cell include Enumerable attr_reader :car attr_accessor :cdr def initialize(car, cdr) @car = car @cdr = cdr end # Yield car, cadr, caddr and so on, à la for-each in Scheme. def each j = self begin yield j.car j = j.cdr end while Cell === j j.nil? or raise ImproperListException, j end end # Cell and https://github.com/nukata/little-scheme-in-crystal/blob/v0.2.0/scm.cr#L127-L147 https://github.com/nukata/little-scheme-in-crystal/blob/v0.2... # Cons cell class Cell < Obj include Enumerable(Val) getter car : Val # Head part of the cell property cdr : Val # Tail part of the cell def initialize(@car : Val, @cdr : Val) end # Yield car, cadr, caddr and so on, à la for-each in Scheme. def each j = self loop { yield j.as(Cell).car j = j.as(Cell).cdr break unless Cell === j } raise ImproperListException.new(j) unless j.nil? end end # Cell and they will make the point clear. Ruby and Crystal are different languages, but you can translate your code from Ruby to Crystal line by line fairly easily. For the performance boost, see https://github.com/nukata/little-scheme/tree/v1.3.0#performance https://github.com/nukata/little-scheme/tree/v1.3.0#performa... which shows times to solve 6-Queens on a meta-circular Scheme as follows: * Crystal 0.34.0: crystal build --release scm.cr: 2.15 sec. * Crystal 0.34.0: crystal scm.cr: 9.88 sec. * Ruby 2.3.7: ruby scm.rb: 84.80 sec. Compiled (and complex enough) Crystal code runs 39 times faster than the equivalent Ruby code in this case.
- badrequest 6y agoThank you for the relevant example!