Отличие ObjectIcon от классического Icon

ObjectIcon совместим с исходным кодом классического Icon, однако есть несколько важных отличий между этими двумя языками программирования.

Вот наиболее существенные отличия ObjectIcon от его предшественника:

  • Новые операторы и ключевые слова: class, const, defer, final, import, package, private, protected, public, readable.
  • Несколько новых встроенных функций: cast(), is(), classof(), keyof(), ucs(), uchar(), text(). Также ObjectIcon имеет несколько меньше встроенных функций, поскольку большая часть функциональности реализована в классах.
  • Несколько новых ключевых слов, среди которых &why — строковая переменная, содержащая причину отказа (очень похоже на переменную errno из языка программирования C). &yes и &no являются типовыми значениями для флагов в состоянии включено/выключено, и соответственно равны 1 и &null. Опять же, большая часть ключевых слов Icon доступна в классах.
  • I/O полностью переписан, в частности, встроенных функций (write, read и подобные) нет, как и встроенного типа file. I/O реализован в классах из модуля io.
  • Большинство встроенных графических примитивов Icon были перенесены в новый модуль graphics. В частности, окно представляется в форме класса Window, взамен встроенному в Icon типу file. Большинство ключевых слов Icon, относящихся к графике,в ObjectIcon просто не существует.
  • Математические функции представлены как статические методы класса util.Math и не являются встроенными. Константы &pi, &e и &phi в ObjectIcon отсутствуют, но имеются их эквиваленты в классе util.Math.
  • Функция set() создает символьное множество и добавляет каждый параметр, передаваемый в функцию, в новое символьное множество. В Icon эта функция принимает список и добавляет его члены в новое символьное множество.
  • Преобразование и управление runtime error, использующее &error в ObjectIcon отсутствует. Вместо этого, runtime error может быть перехвачено с помощью ковыражения с использованием ключевого слова &handler.
  • Для типа record функция type() возвращает не имя типа записи, а »record». Для получения имени типа записи можно использовать метод Constructor.get_name(), вызванного для данного экземпляра record.
  • Для вызова PDCO используется вызов ковыражений, как индивидуальных параметров, вместо их сборки в единый список аргументов. Таким образом синтаксис proc{expr1, expr2, …} эквивалентен proc(create expr1, create expr2, …).
  • Ковыражения имеют несколько иную семантику. Кроме того, в Icon ковыражения создают большую нагрузку, в то время как в ObjectIcon они менее требовательны к ресурсам.
  • В Icon необъявленные идентификаторы вызывают предупреждения транслятора, в ObjectIcon они вызывают ошибку.
  • В Icon глобальные переменные, представляющие функции, функции, процедуры и записи, могут быть присвоены во время выполнения. В ObjectIcon, они являются константами и не могут быть изменены.
  • Для списков встроенная функция insert(x,i,o) имеет параметр i, в случае равенства которого нулю или *x+1, работающая также как и put(x,o). В Icon это выражение просто дает fail.
  • Разный формат ucode — вы не можете слинковать код ObjectIcon и Icon.
  • Разные имена исполняемых файлов: icont и iconx — в Icon, oit и oix в ObjectIcon.
  • Разные переменные среды. Icon использует IPATH и LPATH,а ObjectIcon — OIPATH и OLPATH. Кроме того, эти переменные используют тот же синтаксис, что и переменные среды рабочей платформы.
  • IPL. Большая часть IPL доступна и в ObjectIcon, однако IPL разделена на модули. Технически, это значит, что вместо инструкции link options теперь используется инструкция import ipl.options.

Информация взята из официальной вики проекта ObjectIcon, переведена специально для блога.

Добавить комментарий