- PVSM.RU - https://www.pvsm.ru -
Дейкстра: А как вы запишите более сложное выражение? Например, сумму всех элементов матрицы, которые равны сумме индексов соответствующих строк и столбцов.
Айверсон: + + / (M = ?1 ^(o)+ ?1)M//
(Кеннет Айверсон — создатель языков APL и J)
Перед тем как APL получил свое название, он назывался «нотация Айверсона». Однако Кен считал, что название должно звучать просто как «Нотация». И в самом деле, мы же не говорим «трава Бога», мы говорим просто «трава».
Paul Berry
Отличительными особенностями языка программирования J можно назвать:
Можно сказать, что J находится в той же нише, что и Matlab и R. Но есть одно «но» — синтаксис языка.
Приведем один из самых распространенных учебных примеров всех введений и туториалов J:
mean =: +/%#
В данном примере определяется новая функция (на языке J это называется «глаголом») «mean», которая рассчитывает среднее значение в массиве чисел.
Само же выражение «+/%#» дословно означает следующую последовательность действий:
Вызывать данный глагол можно следующим образом:
mean 1 2 3 4 2.5
где 2.5 – результат вычисления среднего на массиве целых чисел от 1 до 4. Обратим внимание, что в примерах с большим отступом указывается выражение, с меньшим — результат вычисления.
Добавим красок к нашему описанию языка J. Вот, к примеру, выражение, реализующее быструю сортировку (сортировку Хоара):
quicksort=: (($:@(<#[) , (=#[) , $:@(>#[)) ({~ ?@#)) ^: (1<#) quicksort 3 4 1 2 4.1 _0.1 _0.1 1 2 3 4 4.1
В приведенном примере на первой строке определяется функция быстрой сортировки, на второй — сортируется массив чисел, на третьей показывается результат сортировки.
Одной из самых сильных сторон J является его графическая подсистема. С примерами можно ознакомиться на http://www.jsoftware.com/jwiki/Studio/Gallery [1]
Официальный сайт разработчиков языка и самого популярного (а, по совместительству, и единственного) транслятора языка J — http://www.jsoftware.com [2]. Ключевые личности, принявшие участие в создании языка это: Кеннет Айверсон (Kenneth Iverson, скончался в 2004 году) и Роджер Хуэй (Roger Hui).
Справедливости ради необходимо упомянуть github.com/doublec/jsj [3]
ограниченный в возможностях онлайн-интерпретатор J на Javascript.
А также J&+ www.fti.dn.ua/ [4]~metlov/jplus/ подмоножество языка J
Транслятор J является переносимым как между операционными системами, так и между архитектурами процессоров. Так, на официальном сайте доступны версии для Linux (32 и 64 бита), Windows (32 и 64 бита), Mac (32 бита и бета-версию для 64 бит) и PocketPC.
В данный момент предоставляется как 6я, так и 7я версии. В более стабильной 6й версии GUI для Linux сделан с помощью Java. В 7й версии графический интерфейс является полностью кроссплатформенным и сделан на основе gtk. Впрочем, эта версия является еще не вполне user-friendly и в бете 8й версии интерфейс вновь переделан уже на Qt
Для разработки на J можно использовать как «родную» среду разработки, так и Emacs (режим для редактирования исходных кодов на J находится по адресу http://j-mode.sourceforge.net [5]).
До недавних пор J распространялся как freeware приложение, а исходные коды распространялись по коммерческой лицензии. Сейчас исходные коды 7й версии открыты под лицензией GPL3 (см. http://www.jsoftware.com/source.htm [6]). Кроме того не существует лицензионных ограничений на собственные реализации трансляторов J.
Вы забудете про качество гораздо позже того, как вы забудете про стоимость.
Кеннет Айверсон
Прямым предком J является язык APL (APL расшифровывается как «A Programming Language»). Более того, автором и одного и другого является один и тот же человек – Кеннет Айверсон (истории из жизни Кеннета (т.н. «кенекдоты») можно прочитать по адресу http://keiapl.info/anec/ [7]. Эпиграфы к настоящей статье взяты именно оттуда). Интересной особенностью APL было использование в языке специальных символов, отсутствующих на привычных нам клавиатурах. Выпускались и специальные APL-совместимые клавиатуры. И, несмотря на почтенный возраст (год открытия APL — 1964 г.), этот язык развивается и используется до сих пор.
Временем же появления языка J считается 1990 год. Одним из основных отличий нового языка от APL было использование в именовании стандартных конструкций только ASCII символов.
Одну из ранних (1994 год) реализаций интерпретатора языка можно найти на http://keiapl.org/archive/j7.tar.gz [8]. До открытия исходных кодов современной 7й версии языка это была последняя доступная версия исходных кодов языка J.
Транслятор J написан на языке Си с повсеместным («агрессивным» можно даже сказать) использованием препроцессора. И, как говорят сами авторы языка, интерпретатор J написан на J. А точнее — на том подмножестве языка J, которое можно получить силами препроцессора Си. В связи с этим для посторонних людей исходный код J выглядят практически нечитаемым. Кроме того, исходные коды «удачно» декомпозированы на отдельные файлы с такими говорящими названиями как a.c, b.c и т.д.
Современные версии языка J меняются достаточно медленно и изменения в последнее время не выглядят революционными. Хотя последняя версия 5ой ветки и нынешняя стабильная версия 6.02 являются не полностью совместимыми. Одним из интересных нововведений в версии 6.02 можно назвать выражение «M.», которое добавляет автоматическую мемоизацию указанной функции.
В данный момент идет активное развитие следующей версии интерпретатора J-7.0. В этой версии нет концептуальных изменений языка. Однако достаточно значительные изменения затронули инфраструктуру транслятора. Отметим некоторые из них:
Необходимо отметить, что, несмотря на то, что хотя уже в момент написания статьи бета-версия 7ой ветки и была объявлена стабильной, автором рекомендуется использовать 6ю ветку — в 7ой до сих пор присутствуют обидные баги и регрессии (особенно в части примеров и интерактивной документации).
Кроме упомянутого ранее APL к ближайшим родственникам J можно отнести языки за авторством Arthur Whitney:
Документация доступна как из офлайн дистрибутива, так и по адресу http://jsoftware.com/help/index.htm [11]:
Кроме того на странице http://www.jsoftware.com/jwiki/Books [14] находится несколько книг, посвященных языку J. Например:
Кроме того в стандартной поставке есть т.н. лабораторные и демо-примеры — аннотированные примеры основных возможностей языка и его библиотек. Среди них есть, например, лабораторная по написанию на J операторов нечеткой логики, несколько вводных курсов в язык, игра «жизнь» и многое другое.
Задавайте вопрос: «Кому это выгодно?»
Кеннет Айверсон
На момент написания статьи J занимает почетное 5 место в рейтинге языков проекта Эйлер http://projecteuler.net/languages [15].
J используется и в самых серьезных софтверных компаниях. Список можно получить на сайте jsoftware.com. Назовем лишь некоторые из них: Hewlett Packard, Intel, Korea Telecom, Microsoft, Novell, SAP.
Дополнительную информацию и помощь можно получить на:
На русском языке информации значительно меньше, однако кое-что все же есть:
Продолжение следует…
Автор: basp
Источник [22]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/45999
Ссылки в тексте:
[1] http://www.jsoftware.com/jwiki/Studio/Gallery: http://www.jsoftware.com/jwiki/Studio/Gallery
[2] http://www.jsoftware.com: http://www.jsoftware.com
[3] github.com/doublec/jsj: https://github.com/doublec/jsj
[4] www.fti.dn.ua/: http://www.fti.dn.ua/
[5] http://j-mode.sourceforge.net: http://j-mode.sourceforge.net
[6] http://www.jsoftware.com/source.htm: http://www.jsoftware.com/source.htm
[7] http://keiapl.info/anec/: http://keiapl.info/anec/
[8] http://keiapl.org/archive/j7.tar.gz: http://keiapl.org/archive/j7.tar.gz
[9] http://www.aplusdev.org: http://www.aplusdev.org
[10] http://kx.com: http://kx.com
[11] http://jsoftware.com/help/index.htm: http://jsoftware.com/help/index.htm
[12] http://www.fti.dn.ua/~metlov/dictionary/contents.htm: http://www.fti.dn.ua/~metlov/dictionary/contents.htm
[13] http://www.fti.dn.ua/~metlov/dictionary/vocabul.htm: http://www.fti.dn.ua/~metlov/dictionary/vocabul.htm
[14] http://www.jsoftware.com/jwiki/Books: http://www.jsoftware.com/jwiki/Books
[15] http://projecteuler.net/languages: http://projecteuler.net/languages
[16] http://www.jsoftware.com/jwiki/System/Forums: http://www.jsoftware.com/jwiki/System/Forums
[17] http://www.jsoftware.com/jwiki/FrontPage: http://www.jsoftware.com/jwiki/FrontPage
[18] http://web.archive.org/web/20110223064025/http://www.dvgu.ru/forum/thread.php?threadid=2033: http://web.archive.org/web/20110223064025/http://www.dvgu.ru/forum/thread.php?threadid=2033
[19] http://fforum.winglion.ru/viewtopic.php?f=4&t=320: http://fforum.winglion.ru/viewtopic.php?f=4&t=320
[20] http://ru_declarative.livejournal.com/: http://ru_declarative.livejournal.com/
[21] http://rsdn.ru/forum/decl/: http://rsdn.ru/forum/decl/
[22] Источник: http://habrahabr.ru/post/198052/
Нажмите здесь для печати.