J для смертных. Введение

Дейкстра: А как вы запишите более сложное выражение? Например, сумму всех элементов матрицы, которые равны сумме индексов соответствующих строк и столбцов

Айверсон: + + / (M = ?1 ^(o)+ ?1)_M//

Быстрый старт

Перед тем как APL получил свое название, он назывался «нотация Айверсона». Однако Кен считал, что название должно звучать просто как «нотация». И в самом деле, мы же не говорим «трава Бога», мы говорим просто «трава»

Paul Berry

Отличительные особенности языка программирования J:

Можно сказать, что J находится в той же нише, что и Matlab и R. Но есть одно "но". Это "но" - синтаксис языка. Приведем один из самых распространенных учебных примеров всех введений и туториалов языка J:

В данном примере определяется новая функция (на языке J это называется «глаголом») «mean», которая рассчитывает среднее значение в массиве чисел. Символом «>» в статьях данного цикла будем предварять вычисляемые выражения. Набор символов «+/%#» дословно означает следующую последовательность действий:

Вызывать данный глагол можно следующим образом:

где «2.5» – результат вычисления среднего на массиве целых чисел от 1 до 4.

Добавим красок к нашему описанию языка. Вот, к примеру, выражение, реализующее быструю сортировку (сортировку Хоара):

В приведенном примере на первой строке определяется функция быстрой сортировки, на второй - сортируется массив чисел, на третьей показывается результат сортировки.

Одной из самых сильных сторон J является его графическая подсистема. С примерами можно ознакомиться по ссылке http://www.jsoftware.com/jwiki/Studio/Gallery

Официальный сайт разработчиков языка и самого популярного (а, по совместительству, и единственного) транслятора языка J - http://www.jsoftware.com. Ключевые личности, принявшие участие в создании языка это Кеннет Айверсон (Kenneth Iverson, скончался в 2004 году) и Роджер Хуэй (Roger Hui).

Справедливости ради необходимо упомянуть jsj - ограниченный в возможностях онлайн-интерпретатор J на Javascript, а также J&+ - подмножество языка 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).

До недавних пор J распространялся как freeware приложение, а исходные коды распространялись по коммерческой лицензии. Сейчас исходные коды 7й версии открыты под лицензией GPL3 (см. http://www.jsoftware.com/source.htm). Кроме того не существует лицензионных ограничений на собственные реализации трансляторов J.

Прошлое и настоящее

Вы забудете про качество гораздо позже того, как вы забудете про стоимость.

Кеннет Айверсон

Прямым предком J является язык APL (расшифровывается как «A Programming Language»). Более того, автором и первого и второго является Кеннет Айверсон. Истории из жизни Кеннета (т.н. «кенекдоты») можно прочитать по ссылке http://keiapl.info/anec/. Эпиграфы к настоящей статье взяты именно оттуда.

Интересной особенностью APL было использование в языке специальных символов, отсутствующих на привычных нам клавиатурах. Выпускались и специальные APL-совместимые клавиатуры. И, несмотря на почтенный возраст (год открытия APL - 1964 г.), этот язык развивается и используется до сих пор.

Временем же появления языка J считается 1990 год. Одним из основных отличий нового языка от APL было использование в именовании стандартных конструкций только ASCII символов.

Одну из ранних (1994 год) реализаций интерпретатора языка можно найти на http://keiapl.org/archive/j7.tar.gz. До открытия исходных кодов современной 7й версии языка это была последняя доступная версия исходных кодов языка J.

Транслятор J написан на языке Си с повсеместным использованием препроцессора. И, как говорят сами авторы языка, «интерпретатор J написан на J». А точнее - на том подмножестве языка J, которое можно получить силами препроцессора Си. В связи с этим для посторонних людей исходный код J выглядят практически нечитаемым.

Современные версии языка J меняются достаточно медленно и изменения в последнее время не выглядят революционными. Хотя последняя версия 5ой ветки и нынешняя стабильная версия 6.02 являются не полностью совместимыми. Одним из интересных нововведений в версии 6.02 можно назвать выражение «M.», которое добавляет автоматическую мемоизацию указанной функции.

В данный момент идет активное развитие следующей версии интерпретатора J-7.0. В этой версии нет концептуальных изменений языка. Однако достаточно значительные изменения затронули инфраструктуру транслятора. Отметим некоторые из них:

Необходимо отметить, что, несмотря на то, что хотя уже в момент написания статьи бета-версия 7ой ветки и была объявлена стабильной, автором рекомендуется использовать 6ю ветку - в 7ой до сих пор присутствуют обидные баги и регрессии (особенно в части примеров и интерактивной документации).

Родственники

Кроме упомянутого ранее APL к ближайшим родственникам J можно отнести языки за авторством Arthur Whitney:

Литература

Документация доступна как из офлайн дистрибутива, так и по адресу http://jsoftware.com/help/index.htm:

На странице http://www.jsoftware.com/jwiki/Books находится несколько книг, посвященных языку J. Например:

Кроме того в стандартной поставке есть т.н. лабораторные и демо-примеры - аннотированные примеры основных возможностей языка и его библиотек. Среди них есть, например, лабораторная по написанию на J операторов нечеткой логики, несколько вводных курсов в язык, игра «жизнь» и многое другое.

Распространение

Задавайте вопрос: «Кому это выгодно?»

Кеннет Айверсон

На момент написания статьи J занимает почетное 5 место в рейтинге языков проекта Эйлер http://projecteuler.net/languages.

J используется и в самых серьезных софтверных компаниях. Список можно получить на сайте jsoftware.com. Назовем лишь некоторые из них: Hewlett Packard, Intel, Korea Telecom, Microsoft, Novell, SAP.

Дополнительную информацию и помощь можно получить на:

На русском языке информации значительно меньше, однако кое-что все же есть:

Следующая статья цикла J для смертных. Тацитное программирование

18 октября 2013