XL (язык программирования): различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м checkwiki fixes (1, 2, 9, 17, 22, 26, 38, 48, 50, 52, 54, 64, 65, 66, 76, 81, 86, 88, 89, 101)
(не показано 16 промежуточных версий 16 участников)
Строка 1: Строка 1:
{{Значения|XL}}
{{Плохой перевод}}
{{Плохой перевод}}
{{rq|check|style|wikify}}
{{rq|check|style|wikify}}

{{Значения|XL}}
{{Карточка языка программирования
{{Карточка языка программирования
|name = XL
|name = XL
Строка 9: Строка 10:
|class =
|class =
|year = 2000
|year = 2000
|designer = [[Christophe de Dinechin]]
|developer = [[Christophe de Dinechin]]
|latest_release_version = 0.1
|latest_release_version = 0.1
|latest_release_date = 2010
|latest_release_date = 2010
Строка 18: Строка 17:
|implementations =
|implementations =
|dialects =
|dialects =
|influenced_by = [[Ada]], [[C++]]
|influenced_by = [[Ада (язык программирования)|Ada]], [[C++]]
|license = [[GPLv2]]
|license = [[GPLv2]]
|website = [http://xlr.sf.net]
|website = http://xlr.sf.net
|operating_system = [[Unix-like]]
|operating_system = [[Unix-like]]
}}
}}


'''XL''' — основа расширяемого языка eXtensible Language. Это язык программирования, разработанный для поддержки концептуального программирования.
'''XL''' — основа расширяемого языка eXtensible Language. Это [[язык программирования]], разработанный для поддержки [[Концептуальное программирование|концептуального программирования]].

__TOC__
== Описание ==
XL предоставляет программно расширяемый синтаксис и семантику.
XL предоставляет программно расширяемый [[Синтаксис (программирование)|синтаксис]] и [[Семантика (программирование)|семантику]]. [[Плагин]]ы компилятора могут быть использованы для добавления новых возможностей в язык. Базовый набор плагинов реализован согласно стандартным императивным языкам. Программисты могут написать собственные [[плагин]]ы для реализации специфических задач, таких как работа с другими [[Система счисления|системами счисления]], что позже может быть просто встроено в язык.
Плагины компилятора могут быть использованы для добавления новых возможностей в язык.
Базовый набор плагинов реализован согласно стандартным императивным языкам.
Программисты могут написать собственные плагины для реализации специфических задач, таких как работа с другими системами счисления, что позже может быть просто встроено в язык.
<!-- перевод изменил с дословного, имхо другой пример программирования лучше в этом контексте -->


== Язык ==
== Язык ==
В XL определено три уровня абстракции:
В XL определено три уровня абстракции:
* XL0 определяет как исходный текст должен преобразовываться в [[структурное дерево]]
* XL0 определяет как исходный текст должен преобразовываться в [https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%28%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%29?wprov=sfla1 структурное дерево].
* XL1 определяет основу языка с возможностями сравнимыми с [[C++]]
* XL1 определяет основу языка с возможностями сравнимыми с [[C++]].
* XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы.
* XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы.


XL не имеет ни [[примитивный тип|примитивных типов]], ни зарезервированных слов.
XL не имеет ни [[примитивный тип|примитивных типов]], ни зарезервированных слов.
Все используемые операторы и типы данных, как то: целые числа или оператор сложения, объявлены в стандартной библиотеке (XL2). XL1 является переносимым для выполнения в разных средах и платформах. А вот в XL2 такой гарантии уже нет: если конкретный процессор не поддерживает умножения чисел с плавающей точкой, то описание соответствующего оператора в стандартной библиотеке может быть пропущено и использование такого умножения может закончиться ошибкой во время компиляции.
Все используемые операторы и типы данных, такие как целые числа или оператор сложения, объявлены в стандартной библиотеке (XL2). XL1 является переносимым для выполнения в разных средах и платформах, однако если конкретный процессор не поддерживает умножения чисел с плавающей точкой, то описание соответствующего оператора в стандартной библиотеке может быть пропущено и использование такого умножения может закончиться ошибкой во время компиляции.


Пример программы [[Hello World]] в XL выглядит следующим образом:
Пример программы [[Hello World]] в XL выглядит следующим образом:
Строка 45: Строка 41:
use XL.TEXT_IO
use XL.TEXT_IO
WriteLn "Hello World"
WriteLn "Hello World"
Альтернативным написанием в стиле, более пригодном для широко масштабируемых программ, в виде:

Альтернативным написанием в стиле, более пригодном для широко масштабируемых программ, будет так:

import IO = XL.TEXT_IO
import IO = XL.TEXT_IO
IO.WriteLn "Hello World"
IO.WriteLn "Hello World"
Пример программы, вычисляющей [[факториал]] чисел от 1 до 20:<syntaxhighlight>
0! is 1
N! is N * (N-1)!
for I in 1..20 loop
print I!
</syntaxhighlight>


== Синтаксис ==
== Синтаксис ==
Синтаксис определён на уровне XL0. Этап компиляции XL0 может быть сконфигурирован используя синтаксис описательного файла, в котором определено как представляется текст и назначен приоритет операций.
[[Синтаксис (программирование)|Синтаксис]] определён на уровне XL0. Этап компиляции XL0 может быть сконфигурирован используя специальный описательный [[файл]], в котором определено как представляется текст и назначен приоритет операций.
Базовый синтаксический файл определяет общие математические нотации, например «+» для сложения, которые обычно приняты в порядке операций.
Базовый синтаксический файл определяет общие математические нотации, например «+» для сложения, которые обычно приняты в порядке операций.


Структурное дерево содержит 7 типов узлов: 4 конечных узла типов (целое, вещественное, текст и символ) и 3 внутренних узла типов (инфиксный, префикс и блок).
Структурное дерево содержит 7 типов узлов: 4 конечных узла типов (целое, вещественное, текст и символ) и 3 внутренних узла типов (инфиксный, префикс и блок).


* ''целый (integer)'' узел представляет собой целый литерал, такой как <code>2</code>. Знак <code>#</code> может быть использован для указания основания числа отличного от 10, например <code>2#1001</code> — число 1001 в двоичной системе счисления. Для удобочитаемости можно использовать знак «_» нижнее подчёркивание: <code>1_000_000</code>.
* ''целый (integer)'' узел представляет собой целый литерал, такой как <code>2</code>. Знак <code>#</code> может быть использован для указания основания числа отличного от 10, например <code>2#1001</code> — число 1001 в двоичной системе счисления. Для удобочитаемости можно использовать знак «_» нижнее подчёркивание: <code>1_000_000</code>.

* ''вещественный (real)'' узел представляет собой не слитные числа, как например <code>2.5</code>. Нотации основы и разделителей могут быть использованы как и для целых узлов, например <code>16#F.FFF#E-10</code>.
* ''вещественный (real)'' узел представляет собой не слитные числа, как например <code>2.5</code>. Нотации основы и разделителей могут быть использованы как и для целых узлов, например <code>16#F.FFF#E-10</code>.

* ''текстовый (text)'' узел представляет текстовое содержимое. Они обычно заключаются в одинарные или двойные кавычки, например <code>"Слава КПСС!"</code> или <code>'Ё'</code>. В то же время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого.
* ''текстовый (text)'' узел представляет текстовое содержимое. Они обычно заключаются в одинарные или двойные кавычки, например <code>"Слава КПСС!"</code> или <code>'Ё'</code>. В то же время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого.
* ''символьный (symbol)'' узел представляет имена или операторы. Имена — это последовательность букв или цифр начинающееся с буквы. Например: <code>Пётр1</code>. В уровне XL0 учитывается регистр букв, но XL1 игнорирует регистр и символы нижнего подчёркивания, так что <code>ИванСусанин</code> <code>иван_сусанин</code> являются равнозначными именами.

* ''инфиксные (infix)'' узлы представляются двумя узлами, связанными инфиксным символом. Например: <code>A+1</code> или <code>2 and 3</code>.
* ''символьный (symbol)'' узел представляет имена или операторы. Имена — это последовательность букв или цифр начинающееся с буквы. Например: <code>Пётр1</code>. В уровне XL0 учитывается регистр букв, но XL1 игнорирует регистр и символы нижнего подчёркивания, так что <code>ИванСусанин</code> <code>иван_сусанин</code> являются равнозначными именами.

* ''инфиксные (infix)'' узлы представляются двумя узлами связанными инфиксным символом. Например: <code>A+1</code> или <code>2 and 3</code>.

* ''префиксные (prefix)'' узлы представляются двумя последовательными узлами. Например: <code>Write "Слава КПСС!"</code>. Их так же используют для постфиксной записи: <code>3!</code> или <code>Open?</code>.
* ''префиксные (prefix)'' узлы представляются двумя последовательными узлами. Например: <code>Write "Слава КПСС!"</code>. Их так же используют для постфиксной записи: <code>3!</code> или <code>Open?</code>.

* ''блочные (block)'' узлы представляются как узел заключённый в группированные символы, как например <code>(A)</code>, <code>[Index]</code>. Отступ непосредственно представлен блочным узлом.
* ''блочные (block)'' узлы представляются как узел заключённый в группированные символы, как например <code>(A)</code>, <code>[Index]</code>. Отступ непосредственно представлен блочным узлом.


Строка 85: Строка 79:
* [http://xlr.sf.net Страничка разработки на SourceForge]
* [http://xlr.sf.net Страничка разработки на SourceForge]
* [http://mozart-dev.sf.net Исторически сайт разработки]
* [http://mozart-dev.sf.net Исторически сайт разработки]
* [http://www.byte.com/documents/s=7784/byt1070853295820/1208_heller.html Статья в Byte]
* [https://web.archive.org/web/20080106165715/http://www.byte.com/documents/s=7784/byt1070853295820/1208_heller.html Статья в Byte]
* [http://www.ddj.com/java/184404696 Статья в журнале «Dr Dobbs Journal»]
* [http://www.ddj.com/java/184404696 Статья в журнале «Dr Dobbs Journal»]
* [http://xlr.sourceforge.net/Concept%20Programming%20Presentation.pdf Слайды о XL и концептном программировании]
* [http://xlr.sourceforge.net/Concept%20Programming%20Presentation.pdf Слайды о XL и концептном программировании]

Версия от 13:11, 13 сентября 2024

XL
Класс языка мультипарадигменный: императивный
Появился в 2000
Автор Кристоф Де Динечин[вд]
Разработчик Кристоф Де Динечин[вд]
Выпуск 0.1 (2010)
Тестовая версия 2-27-2010
Система типов строгая
Испытал влияние Ada, C++
Лицензия GPLv2
Сайт xlr.sf.net
ОС Unix-подобная операционная система

XL — основа расширяемого языка eXtensible Language. Это язык программирования, разработанный для поддержки концептуального программирования.

Описание

XL предоставляет программно расширяемый синтаксис и семантику. Плагины компилятора могут быть использованы для добавления новых возможностей в язык. Базовый набор плагинов реализован согласно стандартным императивным языкам. Программисты могут написать собственные плагины для реализации специфических задач, таких как работа с другими системами счисления, что позже может быть просто встроено в язык.

Язык

В XL определено три уровня абстракции:

  • XL0 определяет как исходный текст должен преобразовываться в структурное дерево.
  • XL1 определяет основу языка с возможностями сравнимыми с C++.
  • XL2 определяет стандартную библиотеку, включающую основные типы данных и операторы.

XL не имеет ни примитивных типов, ни зарезервированных слов. Все используемые операторы и типы данных, такие как целые числа или оператор сложения, объявлены в стандартной библиотеке (XL2). XL1 является переносимым для выполнения в разных средах и платформах, однако если конкретный процессор не поддерживает умножения чисел с плавающей точкой, то описание соответствующего оператора в стандартной библиотеке может быть пропущено и использование такого умножения может закончиться ошибкой во время компиляции.

Пример программы Hello World в XL выглядит следующим образом:

 use XL.TEXT_IO
 WriteLn "Hello World"

Альтернативным написанием в стиле, более пригодном для широко масштабируемых программ, в виде:

 import IO = XL.TEXT_IO
 IO.WriteLn "Hello World"

Пример программы, вычисляющей факториал чисел от 1 до 20:

0! is 1
N! is N * (N-1)!
for I in 1..20 loop
    print I!

Синтаксис

Синтаксис определён на уровне XL0. Этап компиляции XL0 может быть сконфигурирован используя специальный описательный файл, в котором определено как представляется текст и назначен приоритет операций. Базовый синтаксический файл определяет общие математические нотации, например «+» для сложения, которые обычно приняты в порядке операций.

Структурное дерево содержит 7 типов узлов: 4 конечных узла типов (целое, вещественное, текст и символ) и 3 внутренних узла типов (инфиксный, префикс и блок).

  • целый (integer) узел представляет собой целый литерал, такой как 2. Знак # может быть использован для указания основания числа отличного от 10, например 2#1001 — число 1001 в двоичной системе счисления. Для удобочитаемости можно использовать знак «_» нижнее подчёркивание: 1_000_000.
  • вещественный (real) узел представляет собой не слитные числа, как например 2.5. Нотации основы и разделителей могут быть использованы как и для целых узлов, например 16#F.FFF#E-10.
  • текстовый (text) узел представляет текстовое содержимое. Они обычно заключаются в одинарные или двойные кавычки, например "Слава КПСС!" или 'Ё'. В то же время с помощью синтаксического файла можно добавить другие разделители, включая разделители для многострочного текстового содержимого.
  • символьный (symbol) узел представляет имена или операторы. Имена — это последовательность букв или цифр начинающееся с буквы. Например: Пётр1. В уровне XL0 учитывается регистр букв, но XL1 игнорирует регистр и символы нижнего подчёркивания, так что ИванСусанин иван_сусанин являются равнозначными именами.
  • инфиксные (infix) узлы представляются двумя узлами, связанными инфиксным символом. Например: A+1 или 2 and 3.
  • префиксные (prefix) узлы представляются двумя последовательными узлами. Например: Write "Слава КПСС!". Их так же используют для постфиксной записи: 3! или Open?.
  • блочные (block) узлы представляются как узел заключённый в группированные символы, как например (A), [Index]. Отступ непосредственно представлен блочным узлом.

Со стандартным синтаксическим файлом, ниже следующее является правильным XL0, независимым от любой семантики.

A = B + "Hello"

После обработки это будет выглядеть как:

infix("=",
      symbol("A"),
      infix("+",
            symbol("B"), text("Hello")))

Ссылки