RubyHammer: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 21:
* Отсутствие стадии [[w:компилятор|компиляции]]
Простое и быстрое программирование:
* Не надо объявлять переменныетипы переменных
* Переменные динамически [[w:типизация|типизированы]]
* Простой и последовательный синтаксис
* Автоматическое управление [[w:Оперативная память|оперативной памятью]].
Объектно-ориентированное программирование:
* Всё есть [[w:Экземпляр (программирование)|объект]]. Даже имя класса есть экземпляр класса <code>Class</code>
* [[w:Класс (программирование)|Классы]], [[w:Метод|методы]], [[w:Наследование (программирование)|наследование]], [[w:Полиморфизм в языках программирования|полиморфизм]], [[w:Инкапсуляция (программирование)|инкапсуляция]] и т. д.
* [[w:Примесь (программирование)|Примеси]] (mixins) при помощи модулей (возможность расширить класс без наследования)
* [[w:Одиночка (шаблон проектирования)|Методы-одиночки]]
* Некоторые ОО паттерны реализованы как макросы (Singleton, Struct, и так далее).
* [[w:Примесь (программирование)|Примеси]] при помощи модулей (возможность расширить класс без наследования)
* Итераторы и [[w:Блок (программирование)|блоки]]
* Широкие возможности метапрограммирования
Множество идей из других языков, часто не только ОО:
* Lisp
* Smalltalk
* CLU
* Python
* Perl
{|
|Удобства:
* Неограниченный диапазон значений целых чисел.
* Модель обработки [[w:исключение (программирование)|исключений]].
* ВсеМультипарадигменность: все операторы возвращают значения, даже управляющие структуры.
* Динамическая загрузка и исполнение исходного кода.
* Очень гибкий синтаксис, возможность создавать мощные domain-specific languages.
* Механизм перехвата исключений
* Поддержка [[w:поток (программирование)|потоков]]; как собственных, так и систем семейства Unix
* Очень простые средства языка позволяют использование метапрограммирования.
* Объекты могут иметь специфичные для них singleton methods (ничего общего с паттерном Singleton не имеет).
|-
|Недостатки:
* Неуправляемость некоторых процессов (таких, как выделение памяти), невозможностьНевозможность задания низкоуровневых структур данных или подпрограмм
* Невозможность компиляции и, сопутствующейкак ейследствие, усложнение [[w:Оптимизация (вычислительная техника)|оптимизации]] программы (хотя все новые реализации Ruby, включая YARV, используют байткод в виртуальной машине).
** Открытость исходного кода даже в готовой программе <small>(есть [http://exerb.sourceforge.jp/index.en.html средство упаковки исходного кода в .exe-файл] под Windows)</small>
* Следствие двух первых недостатков — весьма низкая скорость запуска и выполнения программ