News for hackers. Stuff that matters.
Re:Ruby vs. Crystal Performance by hosh on Friday June 05, 2020 @05:54PM (#23434475)
However, JS does not treat everything as an object as pervasively as Ruby does. A JS object and a JS integer are two different abstract data types. A Ruby number literal "1" is treated as an object of the Integer class. There are no separate abstract data type other than an object. All operators for an Integer can be overriden (in runtime), or perhaps, a specific object's methods can be overridden. Now granted, the runtime cheats and implements certain things in C ... but those can be overriden during runtime ...

If you want to find out more about the limits of what can be done to optimize Ruby, check out the Truffle project. That came out of someone's PhD dissertation on novel methods for doing JIT optimization for Ruby. It is sufficiently difficult and novel to warrant awarding a PhD for. Last time I heard, Truffle still could not run Rails.

Re:Ruby vs. Crystal Performance by gavinray on Friday June 05, 2020 @09:29PM (#23435993)
A JS integer is actually an instance of the "Number" object, you can to a small degree alter fundamental behavior even with primitive types
Re:Ruby vs. Crystal Performance by jiofih on Saturday June 06, 2020 @10:39AM (#23439487)
No it is not. It is a primitive, this difference is well defined in the ECMAScript spec. Same for strings. An instanceof String is strictly not the same as a string primitive (and there are runtime consequences).
Re:Ruby vs. Crystal Performance by ulucs on Saturday June 06, 2020 @10:40AM (#23439499)
You need to enclose numbers to access the prototype: 1.toString is undefined, whereas (1).toString() is "1"
Re:Ruby vs. Crystal Performance by hosh on Friday June 05, 2020 @11:23PM (#23436553)
I stand corrected.