J (язык программирования): различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
Bezik (обсуждение | вклад) м откат правок 185.17.201.10 (обс) к версии РоманСузи |
|||
Строка 6: | Строка 6: | ||
|year = 1990 |
|year = 1990 |
||
|latest_release_version = J701 |
|latest_release_version = J701 |
||
|latest_release_date = [[10 января]] [[2011]] |
|latest_release_date = [[10 января]] [[2011]] |
||
|designer = [[Айверсон, Кеннет Юджин|Кеннет Айверсон]] и [[Хуэй, Роджер|Роджер Хуэй]] |
|||
|typing = динамическая |
|||
|implementations = |
|||
|dialects = |
|||
|influenced_by = [[АПЛ (язык программирования)|АПЛ]], [[FP]], [[FL]] |
|||
|influenced = [[K (язык программирования)|K]] |
|||
}} |
|||
{{другие значения|J (значения)}} |
|||
: ''Не путать с [[Visual J++|J++]] или [[J Sharp|J#]].'' |
|||
'''J''' — функциональный векторный [[язык программирования]] ([[Массивное программирование]]). Диалект [[АПЛ (язык программирования)|АПЛ]]. |
|||
В отличие от [[АПЛ (язык программирования)|АПЛ]] не требует специальной раскладки клавиатуры для ввода математических символов, поскольку использует символы [[ASCII]]. |
|||
Язык программирования J был разработан в начале 1990-х [[Айверсон, Кеннет Юджин|Кеннетом Айверсоном]] и {{не переведено|есть=:en:Roger Hui|надо=Хуэй, Роджер|текст=Роджером Хуэем (Roger Hui)}} как синтез [[APL (язык программирования)|APL]] (также разработанного Айверсоном) и языков функционального уровня {{не переведено|есть=:en:FP (programming language)|надо=FP (язык программирования)|текст=FP}} и {{не переведено|есть=:en:FL (programming language)|надо=FL (язык программирования)|текст=FL}}, разработанных [[Бэкус, Джон|Бэкусом]]. |
|||
Основные его черты — это ориентированность на [[MIMD]] инструкции, [[функциональное программирование|функциональный подход]] ([[Переменная (программирование)|переменные]] исключены вообще, вместо них действует механизм переименований и [[комбинатор]]ы). |
|||
Язык J сочетает в себе несколько идей и [[парадигма программирования|парадигм]]. Он, в числе прочего, сильно ориентирован на обработку данных. J — чисто функциональный язык. Единственными способами передачи значения является получение его как результата вызова функции и передача его функции в качестве параметра. |
|||
Единственный из разработанных полноценный интерпретатор J являлся в 1994—2010 гг. несвободным, однако после выхода седьмой версии, 6 марта 2011 г., его исходные коды были открыты под лицензией GPL3<ref>[http://old.nabble.com/J-Source-GPL-p31045068s24193.html J Source GPL]</ref>. |
|||
== Понятия языка == |
== Понятия языка == |
||
Для описания элементов программирования, J использует набор слов, относящийся к [[Английский язык#Грамматика|грамматике английского языка]]. |
|||
Для опиинам языка С. |
|||
Эта терминология не такая странная, как может показаться на первый взгляд. «Глагол» используется в смысле, соответствующем «функции» или «оператору» в [[Си (язык программирования)|C]]. |
|||
Соответствие терминов языка J терминам языка С. |
|||
{| class="standard" |
{| class="standard" |
||
! Термин языка J || Термин языка C |
! Термин языка J || Термин языка C |
||
Строка 21: | Строка 43: | ||
|- |
|- |
||
| Глагол-связка |
| Глагол-связка |
||
| [[Присваивание]] |
|||
⚫ | |||
|- |
|||
⚫ | |||
| Знак препинания |
|||
| Разделитель |
|||
|- |
|||
| Наречие |
|||
| (#define macro) |
|||
|- |
|||
| Союз |
|||
| (#define macro) |
|||
|} |
|} |
||
⚫ | |||
Главные части речи это существительное, глагол, наречие и союз. Все имена, которые будет создавать программист и все имена, определенные в языке J (за исключением глаголов-связок (=. и =:) и знаков препинания), будут относиться к одной из главных частей речи. Сущность ({{lang-en|entity}}) это объект, тип которого — одна из главных частей речи. Другими словами, сущность это наречие, существительное глагол или союз. Сущности может быть дано имя, но большинство из них имени не имеют и возникают посреди выполнения выражения и исчезают сразу после, в точности как промежуточные результаты вычисления выражения на языке С. |
|||
Существительное содержит данные, глагол производит действие над одним или двумя существительными с тем, чтобы получить в результате существительное. Наречие производит действие над глаголом или существительным, получая результатом сущность, союз оперирует над двумя существительными или глаголами, и имеет результатом сущность. Наречия и союзы называются модификаторами. В С модификаторы можно представить в качестве макроса препроцессора, который принимает имена функции и содержит код вызывающий код функции. |
|||
⚫ | Знаки препинания в языке J состоят из символов () ' и символа конца строки, а также ограничителя NB. и нескольких специальных слов, таких как if. и case. Больше символов пунктуации в языке J нет. Даже символы [ ] , . " ; { } являются глаголами, а скобки [ ] и { } независимы и используются по одной, а не парами. |
||
== Синтаксис == |
== Синтаксис == |
||
Исполняемой единицей языка J является предложение, которое соответствует предложению в языке C. Ограничителями предложения языка J являются [[символ конца строки]] (LF) и управляющие слова, такие как if. Предложение включает все символы между разделителями, а поскольку символ LF |
Исполняемой единицей языка J является предложение, которое соответствует предложению в языке C. Ограничителями предложения языка J являются [[символ конца строки]] (LF) и управляющие слова, такие как if. Предложение включает все символы между разделителями, а поскольку символ LF является разделителем, предложения J должны вписываться в одну строку. Способов разнести предложение на две строки нет. |
||
Все комментарии начинаются с <code>NB</code>. и заканчиваются концом строки. Комментарий в процессе выполнения предложения игнорируется. |
|||
В языке J выделяются такие типы [[Лексема (информатика)|лексем]]: |
|||
# [[Существительное]] |
|||
# [[Глагол]] |
# [[Глагол]] |
||
# [[Наречие]] |
# [[Наречие]] |
||
Строка 33: | Строка 74: | ||
Отношения между лексемами и |
Отношения между лексемами и частями речи иллюстрирует диаграмма на рис. — лексемы языка J и части речи. |
||
[[Файл:J lexem rus.png]] |
|||
Слова в предложении языка J делятся на [[идентификатор]]ы, примитивы, числа, знаки пунктуации и символьные константы. Разделяют слова пробелы и символ табуляции. У символов «.» и «: » особое значение. |
|||
Имена (идентификаторы) в языке J подобны таковым в языке C. Они начинаются с буквы латинского алфавита, допускают нижнее подчёркивание, различают регистр и состоят только из алфавитно-цифровых символов и символа нижнего подчёркивания. Имена, заканчивающиеся на символ подчеркивания и содержащие в себе два символа подчёркивания обрабатываются особым образом, это связано с понятием локали. |
|||
Графические символы ASCII (например «+») называются примитивами или операторами. |
Графические символы ASCII (например «+») называются примитивами или операторами. |
||
Строка 44: | Строка 90: | ||
[[Приоритет операции|Таблицы приоритетов]] действий в языке J нет. Все глаголы языка J имеют одинаковый приоритет и правую [[ассоциативность]]. Для определения порядка можно использовать скобки. Круглые скобки в языке J понимаются в точности как в математике. |
[[Приоритет операции|Таблицы приоритетов]] действий в языке J нет. Все глаголы языка J имеют одинаковый приоритет и правую [[ассоциативность]]. Для определения порядка можно использовать скобки. Круглые скобки в языке J понимаются в точности как в математике. |
||
* |
|||
В случае, когда у глагола слева есть существительное, он вычисляется как диадный. Если его нет, глагол вычисляется как монадный с одним лишь правым операндом. Нужно знать часть речи символа, чтобы понять порядок вычисления, например в предложении |
|||
result =. name1 verb2 5 |
|||
нужно знать, является ли <code>name1</code> глаголом или существительным. В случае, когда он глагол, порядок вычисления <code>name1(verb2(5))</code>, а если он существительное, <code>verb2</code> — диадный и результат <code>(name1 verb2 5)</code>. |
|||
Все союзы и наречия имеют более высокий приоритет по сравнению с глаголами и левую [[ассоциативность]]. |
|||
=== Существительные со скобками === |
|||
В языке J несколько рядом стоящих чисел воспринимаются как одномерный массив. В случае, когда имеются в виду несколько раздельных существительных, следует использовать скобки. |
|||
=== Грамматика === |
|||
J позволяет построение нескольких синтаксических деревьев для одной и той же строки кода. То есть описания языка не полны, отсутствует исчерпывающая спецификация. Язык J [[Контекстно-зависимая грамматика|контекстно-зависимый]], и стандартные средства для его описания (например, грамматика в [[Форма Бэкуса — Наура|форме Бэкуса-Науэра]]) не подходят. Понятие [[Абстрактное синтаксическое дерево|абстрактного синтаксического дерева]] даже теряет своё значение, так как оно корректно лишь в области контекстно-свободных языков. |
|||
== См. также == |
|||
* [[АПЛ (язык программирования)|АПЛ]] |
|||
* [[Perl]] |
|||
== Примечания == |
|||
{{примечания}} |
|||
== Ссылки == |
|||
* [http://www.jsoftware.com/ Домашняя страничка]{{ref-en}} (в том числе [http://www.jsoftware.com/jwiki/Начало Вики-справка]) |
|||
* [http://dr-klm.livejournal.com/42312.html Описание] |
|||
* [http://old.dvfu.ru/forum/thread.php?threadid=2033 Обсуждение применимости языка в научных вычислениях] |
* [http://old.dvfu.ru/forum/thread.php?threadid=2033 Обсуждение применимости языка в научных вычислениях] |
||
Версия от 07:57, 10 марта 2014
Эту статью необходимо исправить в соответствии с правилом Википедии об оформлении статей. |
J | |
---|---|
Семантика | функциональный |
Класс языка | язык функционального программирования, динамический язык программирования, function-level language[вд], векторный язык программирования[вд], tacit programming language[вд], объектно-ориентированный, мультипарадигмальный и интерпретируемый |
Тип исполнения | интерпретатор |
Появился в | 1990 |
Автор | Кеннет Айверсон и Роджер Хуэй |
Разработчик | Кеннет Айверсон[1] и Роджер Хаи[вд][1] |
Расширение файлов |
.ijs |
Выпуск | J701 (10 января 2011) |
Система типов | динамическая |
Испытал влияние | АПЛ, FP, FL |
Повлиял на | K |
Лицензия | GNU GPL |
Сайт | jsoftware.com |
J — функциональный векторный язык программирования (Массивное программирование). Диалект АПЛ. В отличие от АПЛ не требует специальной раскладки клавиатуры для ввода математических символов, поскольку использует символы ASCII.
Язык программирования J был разработан в начале 1990-х Кеннетом Айверсоном и не указано название статьи как синтез APL (также разработанного Айверсоном) и языков функционального уровня не указано название статьи и не указано название статьи, разработанных Бэкусом. Основные его черты — это ориентированность на MIMD инструкции, функциональный подход (переменные исключены вообще, вместо них действует механизм переименований и комбинаторы).
Язык J сочетает в себе несколько идей и парадигм. Он, в числе прочего, сильно ориентирован на обработку данных. J — чисто функциональный язык. Единственными способами передачи значения является получение его как результата вызова функции и передача его функции в качестве параметра.
Единственный из разработанных полноценный интерпретатор J являлся в 1994—2010 гг. несвободным, однако после выхода седьмой версии, 6 марта 2011 г., его исходные коды были открыты под лицензией GPL3[2].
Понятия языка
Для описания элементов программирования, J использует набор слов, относящийся к грамматике английского языка. Эта терминология не такая странная, как может показаться на первый взгляд. «Глагол» используется в смысле, соответствующем «функции» или «оператору» в C.
Соответствие терминов языка J терминам языка С.
Термин языка J | Термин языка C |
---|---|
Глагол | Функция или оператор |
Имя существительное | Объект |
Глагол-связка | Присваивание |
Знак препинания | Разделитель |
Наречие | (#define macro) |
Союз | (#define macro) |
У каждого слова в предложении языка J есть часть речи, аналог типа в языке C. Это глагол, имя, существительное, глагол-связка, наречие, союз или знак препинания. Главные части речи это существительное, глагол, наречие и союз. Все имена, которые будет создавать программист и все имена, определенные в языке J (за исключением глаголов-связок (=. и =:) и знаков препинания), будут относиться к одной из главных частей речи. Сущность (англ. entity) это объект, тип которого — одна из главных частей речи. Другими словами, сущность это наречие, существительное глагол или союз. Сущности может быть дано имя, но большинство из них имени не имеют и возникают посреди выполнения выражения и исчезают сразу после, в точности как промежуточные результаты вычисления выражения на языке С.
Существительное содержит данные, глагол производит действие над одним или двумя существительными с тем, чтобы получить в результате существительное. Наречие производит действие над глаголом или существительным, получая результатом сущность, союз оперирует над двумя существительными или глаголами, и имеет результатом сущность. Наречия и союзы называются модификаторами. В С модификаторы можно представить в качестве макроса препроцессора, который принимает имена функции и содержит код вызывающий код функции.
Знаки препинания в языке J состоят из символов () ' и символа конца строки, а также ограничителя NB. и нескольких специальных слов, таких как if. и case. Больше символов пунктуации в языке J нет. Даже символы [ ] , . " ; { } являются глаголами, а скобки [ ] и { } независимы и используются по одной, а не парами.
Синтаксис
Исполняемой единицей языка J является предложение, которое соответствует предложению в языке C. Ограничителями предложения языка J являются символ конца строки (LF) и управляющие слова, такие как if. Предложение включает все символы между разделителями, а поскольку символ LF является разделителем, предложения J должны вписываться в одну строку. Способов разнести предложение на две строки нет.
Все комментарии начинаются с NB
. и заканчиваются концом строки. Комментарий в процессе выполнения предложения игнорируется.
В языке J выделяются такие типы лексем:
Отношения между лексемами и частями речи иллюстрирует диаграмма на рис. — лексемы языка J и части речи.
Слова в предложении языка J делятся на идентификаторы, примитивы, числа, знаки пунктуации и символьные константы. Разделяют слова пробелы и символ табуляции. У символов «.» и «: » особое значение.
Имена (идентификаторы) в языке J подобны таковым в языке C. Они начинаются с буквы латинского алфавита, допускают нижнее подчёркивание, различают регистр и состоят только из алфавитно-цифровых символов и символа нижнего подчёркивания. Имена, заканчивающиеся на символ подчеркивания и содержащие в себе два символа подчёркивания обрабатываются особым образом, это связано с понятием локали.
Графические символы ASCII (например «+») называются примитивами или операторами.
Каждый графический символ может образовать новый примитив, если к нему добавить «.» или «: ». Поскольку все примитивы — зарезервированные слова, в именах «.» и «: » не допускаются. Примитивы не обязательно разделять пробелами. Часть речи каждого примитива есть постоянная для языка J. Примеры:
+ +. +: { {: {:: i. i: for. select. case. end.
Порядок вычисления
Таблицы приоритетов действий в языке J нет. Все глаголы языка J имеют одинаковый приоритет и правую ассоциативность. Для определения порядка можно использовать скобки. Круглые скобки в языке J понимаются в точности как в математике.
В случае, когда у глагола слева есть существительное, он вычисляется как диадный. Если его нет, глагол вычисляется как монадный с одним лишь правым операндом. Нужно знать часть речи символа, чтобы понять порядок вычисления, например в предложении
result =. name1 verb2 5
нужно знать, является ли name1
глаголом или существительным. В случае, когда он глагол, порядок вычисления name1(verb2(5))
, а если он существительное, verb2
— диадный и результат (name1 verb2 5)
.
Все союзы и наречия имеют более высокий приоритет по сравнению с глаголами и левую ассоциативность.
Существительные со скобками
В языке J несколько рядом стоящих чисел воспринимаются как одномерный массив. В случае, когда имеются в виду несколько раздельных существительных, следует использовать скобки.
Грамматика
J позволяет построение нескольких синтаксических деревьев для одной и той же строки кода. То есть описания языка не полны, отсутствует исчерпывающая спецификация. Язык J контекстно-зависимый, и стандартные средства для его описания (например, грамматика в форме Бэкуса-Науэра) не подходят. Понятие абстрактного синтаксического дерева даже теряет своё значение, так как оно корректно лишь в области контекстно-свободных языков.
См. также
Примечания
Ссылки
- Домашняя страничка (англ.) (в том числе Вики-справка)
- Описание
- Обсуждение применимости языка в научных вычислениях
Это заготовка статьи о компьютерных языках. Помогите Википедии, дополнив её. |