Краткая сводка особенностей языка программирования Кантор и его будущего компилятора.
Выделенные курсивом пункты будут раскрыты позже.
Что есть в языке Кантор
- Вывод типов, лямбды, замыкания и частичное применение функций.
- Переменные и процедуры.
- Классы и пространства имен — вложенные друг в друга классы.
- Множественное наследование от взаимно-абстрактных классов.
- Обобщения («дженерики», шаблоны) — параметризированные классы.
-
Абстрагирование операций — обобщенная альтернатива перегрузки операций.
- Прототипирование и копирование объектов — оператор new from.
- Исключения и их обработка.
- Декларативный импорт внешних функций, следующих соглашениям вызова cdecl, fastcall, mcall, optlink, pascal, register, safecall, stdcall, syscall, thiscall.
- Декларативный импорт интерфейсов OLE/COM/ActiveX.
-
Вики-разметка — легкая и независимая от целевой среды абстракция форматированного текста.
Чего нет в языке Кантор
- Функций и классов, которых нельзя объявить синтаксически.
- Неявных умолчаний. Значительная часть возможных умолчаний абстрагирована и разрешена архитектурно, все прочие умолчания явно заданы в настройках или равны null.
- Неинициализированных переменных.
- Встроенных функций.
- Встроенных типов. Единственный тип — class, слова «класс» и «тип» — синонимы.
- Деления типов на простые и все остальные, упаковки и распаковки значений (boxing и unboxing).
- Конструкторов и деструкторов.
- Сборки мусора. Кантор — язык системного программирования.
- Указателей и ссылочных типов. При объявлении ссылки ключевое слово ref всегда задается явно.
- Ключевого слова begin. Блочные операторы всегда допускают несколько вложенных операторов, разделенных точкой с запятой и завершаются обязательным end. В некоторых случаях число идущих друг за другом end сокращается из-за синтаксического совмещения блоков.
- Операторов цикла. Вместо циклов — корекурсивные итеративные выражения с охраной.
- Ключевого слова try.
- Необрабатываемых исключений.
- Меток и оператора goto.
- Монад. Вместо монад — полноценные процедуры.
- Макроопределений, условных символов, препроцессора и директив компилятора. Вместо них — обобщения с операторами if и case.
- Включаемых файлов, директив экспорта и импорта. Классы адресуются полными именами, далее действуют области видимости public и protected.
- Понятия файла и консоли, а также встроенных в язык операторов или функций ввода-вывода.
Чем Кантор отличается от других языков
- Константы, переменные, процедуры, функции, методы, свойства, лямбды и замыкания — это функции. В Канторе только одна вычислимая сущность — функция.
- Классы, интерфейсы, пространства имен, примеси, типажи и обобщения — это классы. В Канторе только одна агрегирующая сущность — класс.
- Класс — тоже функция, поэтому допустимы перегруженные классы, обобщения-кортежи и частичное применение обобщений.
- Структуры (записи), перечислимые типы, множества, списки, строки, статические и динамические массивы — это классы. Они объявляются как классы, допускают наследование и обобщение.
- Строки — это не массивы байтов или слов, а классы, инкапсулирующие все действия по хранению и обработке строковых данных. Путем обобщения описаны строки из последовательностей байт, коротких и длинных слов, с наборами символов на основе кодовых страниц, UTF-8, UTF-16 и UTF-32, с прямым и обратным порядком байт.
- Оператор if — синтаксический сахар оператора case.
- Блочный new.
- Объектная алгебра.
- Адресная арифметика реализована как небезопасное расширение некоторых классов и предназначена для импорта кода на других языках. Включается ключом командной строки, по умолчанию отключена.
- Вызов функций с потерей результата реализован для совместимости с API ОС и задается явно — ключевым словом void.
Чем отличается компилятор (среда) Кантора
- Объектный код первичен и обратим. Исходный текст — временное состояние, в которое код переводится для чтения и правки человеком.
-
Кантор — язык с бесконечным числом синтаксисов. В разной степени проработки имеется около 12 синтаксисов — 6 с английскими ключевыми словами и 6 — с русскими.
- Совокупность кода является объектно-ориентированной базой данных, между объектами которой соблюдаются отношения наследования, полиморфизма и агрегации, отслеживаются равноправные ссылки.
- Входной язык служит
не только
для написания программ и библиотек, но еще и для файлов проектов, форм и конфигураций, — всё это пишется на Канторе.
- Имеется API для подключения предметно-ориентированных языков (DSL) в виде модулей (плагинов) к компилятору.
- Все предупреждения (warnings) трактуются как ошибки и останавливают компиляцию — режим строгой проверки синтаксиса (warnings as errors) включен по умолчанию. В целях отладки его можно временно отключить ключом командной строки.
Пример для подражания
Квалификация программиста на языке Кантор обратно пропорциональна числу переменных в его коде.
См. также
> Чего нет в языке Кантор:
ОтветитьУдалить> Монад. При наличии полноценных алгоритмов они без надобности.
Вы сказали, что в нём есть лямбды. А есть лямбды — есть и монады, хотите вы того или нет.
Почему Кантор? Звучит ненадёжно.
«Теоретико-множественный подход, получивший широкое развитие в конце XIX века, позволил возвести математику на прочном, и, казалось, надежном фундаменте — канторовой теории множеств. Развитие канторовой теории множеств привело к возможности выразить в терминах этой теории все основные математические понятия. Возможность построения математики на теоретико-множественном фундаменте Гильберт охарактеризовал как «рай для математиков», а уже построенную на этой основе часть математики называл «симфонией бесконечного». Однако восторги сменились шоковым состоянием, когда была обнаружена противоречивость данного подхода.»
Строить город на болоте тоже выглядело ненадежно, однако ж культурная столица получилась.
УдалитьЯ думаю над пересмотром некоторых определений и терминов. Кое-что уже устарело или не нравится самому. Страницы из правой колонки редактируются по мере продвижения проекта.
Константы, переменные, процедуры, функции, методы, свойства, лямбды и замыкания — это функции. В Канторе только одна вычислимая сущность — функция.
УдалитьКласс — тоже функция, поэтому допустимы перегруженные классы, обобщения-кортежи и частичное применение обобщений.
не плохо неплохо )