Ruby for Java
Слышал, что Sun дала дорогу языку Ruby для своей платформы Java. Я слышал о нём поверхностно, может кто уже пользовался? Что это за зверь такой?
Возможности Ruby
* Имеет лаконичный и простой синтаксис, частично разработанный под влиянием Ада и Эйфель.
* Позволяет обрабатывать исключения в стиле Java и Python.
* Позволяет переопределять операторы, которые на самом деле являются методами.
* Полностью объектно-ориентированный язык программирования. Все данные в Руби являются объектами в понимании SmallTalk. Например, число «1» — это экземпляр класса Fixnum. Также поддерживается добавление методов в класс и даже в конкретный экземпляр во время выполнения программы.
* Не поддерживает множественное наследование, но вместо него может использоваться концепция «примесей», основанная в данном языке на механизме модулей.
* Содержит автоматический сборщик мусора. Он работает для всех объектов Руби, в том числе для внешних библиотек.
* Создавать расширения для Руби на Си очень просто частично из-за сборщика мусора, частично из-за несложного и удобного API.
* Поддерживает замыкания с полной привязкой к переменным.
* Поддерживает блоки кода (код заключается в { … } или do … end). Блоки могут использоваться в методах или преобразовываться в замыкания.
* Целые переменные в Руби автоматически конвертируются между типами Fixnum (32-разрядные) и Bignum (больше 32 разрядов) в зависимости от их значения, что позволяет производить целочисленные математические расчёты с бесконечной точностью.
* Не требует объявления переменных. Язык использует простые соглашения для обозначения области видимости. Пример: просто var — локальная переменная, @var — переменная экземпляра (член или поле объекта класса), @@var — переменная класса, $var — глобальная переменная. Таким образом нет необходимости использовать какой-либо специальный синтаксис (например, self.имя_переменной для Python) для доступа к переменным экземпляра.
* В Руби непосредственно в языке реализованы многие шаблоны проектирования, так, например «одиночка» (singleton) может быть (хотя и не обязан) реализован добавлением необходимых методов к одному конкретному объекту.
* Может динамически загружать расширения, если это позволяет операционная система.
* Имеет независимую от ОС поддержку многопоточности.
* Перенесён на множество платформ. Он разрабатывался на Linux, но работает на многих версиях Unix, DOS, Windows 95/98/Me/NT/2000/XP, Mac OS, BeOS, OS/2, и т. д.
(C) Гугл.
ИМХО: единственный плюс - "бесконечная точность". Переходить на него пока что не имеет смысла.
На счёт бесконечной точности - в Java есть BigInteger, да и к тому же эта возможность эмулируется программно и реализовать алгоритмы сложения, умножения, деления больших чисел несложно. А то, что даже простые типы и их экземпляры - тоже классы (приведён пример про число 1 - что это тоже экземпляр), такое и в C# есть.
Я имею в виду, что если в Яве объявить int, а потом выйти за его диапазон, то он автоматически не приведется к BigInteger.