LINUX.ORG.RU

Исходный код среды языка J доступен под GPL

 , , , ,


0

3

Фирма Jsoftware сделала доступным под лицензией GPL v.3 среду J.

J — функциональный векторный язык программирования, наследник и диалект языка APL. Язык программирования J разработан в начале 1990-х Кеннетом Айверсоном и Роджером Хуэем.

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

>>> Страница загрузки исходного кода языка J

★★★★★

Проверено: anonymous_incognito ()
Последнее исправление: Dendy (всего исправлений: 3)

Ответ на: комментарий от kyz

>В императивном это неэффективно, а в функциональном эффективно. парадокс.

На «вылизанных» на сях типовых задачах. Предположим есть самописная функция, результат которой вычисляется минуту и используется потом 100 раз. 100 копирований результата однозначно быстрее 99 новых вычислений. Или в функциональных языках на такой случай есть невидимый заменитель переменной?

Napilnik ★★★★★
()
Ответ на: комментарий от kyz

И ведь кому-то более удобно выражать свои мысли таким способом.

Napilnik ★★★★★
()
Ответ на: комментарий от umren

я не сказал, что не не нужны. Просто хочу посмотреть

luke ★★★★★
()

давно пора было. шикарный язык

jtootf ★★★★★
()
Ответ на: комментарий от Xenius

> уже облизывался

Если уже страсть пропала, то у меня для тебя есть кое-что другое, что ты можешь также облизать.

anonymous
()
Ответ на: комментарий от Norgat

не поленился и зашел на wiki проекта:

NB. definitions used here
xuvy =: 2 : 'u v'
uy_vx =: 2 : 'v~u'
bivalent =: 2 : 'u^:(1:`(]v))'
ifany =: ^:(*@#@])
NB. Routines for keyed lists (lists of key ; data [; data...])

NB. y is list of key ; data
NB. If x is given, it is the list of key indices
NB. Result is the (boxed) keys
keyskld =: ({"1"_)
keyskl =: 0&keyskld : keyskld f.

NB. y is list of key ; data
NB. If x is given, it is the list of data columns
NB. Result is the (boxed) data items only, using the shape of x for each row
datakld =: ({"1)
datakl =: 1&datakld : datakld f.

NB. x is set of keys, y is keyed list, u is key columns
NB. Records with those keys are deleted
delkl_colsu =: 1 : '-.@:((e.!.0)~ xuvy (m&keyskld)) # ]'
delkl =: 0 delkl_colsu f.

NB. x is set of keys, y is keyed list, u is column numbers of key
NB. Records with those keys are kept, the others are deleted
keepkl_colsu =: 1 : '(e.!.0)~ xuvy (m&keyskld)   #  ]'
keepkl =: 0 keepkl_colsu f. NB. default version with key in position 0

NB. x is set of keys, y is keyed list, u is column numbers of key
NB. Result is index of x into }: keys, but _1 if there is no match
indexkl_colsu =: 1 : '(#@])  (((_1"_)`(I.@:=)`])})  (m&keyskld uy_vx (i.!.0))'
indexkl =: 0 indexkl_colsu f. NB. default version with key in position 0

NB. x is set of keys, y is keyed list, u is column numbers of key
NB. Result is 1 if x is in the list
inkl_colsu =: 1 : '(e.!.0) xuvy (m&keyskld)'
inkl =: 0 inkl_colsu f.

NB. x is a (list of) boxed key value
NB. y is an n,m $ array of key ; data
NB. u is default value (verb or noun)
NB. v is (key columns;data columns)
NB. Result is BOXED requested columns, default if not found
getkl_defu_colsv =: 2 : '(<@{. n)&keyskld uy_vx (i.!.0) ((<@{: n)&{@{ :: (u"_)"0 _) ]'
getklu_defu_colsv =: 2 : '[: > u getkl_defu_colsv n'
NB. m is key column(s), n is data column(s).  x is key(s), y is kl.  x must be found
getkl =: 2 : '<@(;&n)@(m&{"1 uy_vx i.) { ]'
getklu =: 2 : '[: > u getkl v'
NB. Default value is {:y, key is column 0, return column 1 (items have rank 0)
getkl1 =: (<_1;1)&{@]  getkl_defu_colsv (0;1) f.
NB. Default value is u, key is column, return column 1
getkl1d =: getkl_defu_colsv (0;1)
getklu1d =: 1 : '[: > u getkl1d'
NB. Default value is u, key is column, return other columns
getkld =: getkl_defu_colsv (0;<<0)
getklud =: 1 : '[: > u getkld'

NB. x is a list of boxed key value (may be scalar if key is rank 1)
NB. y is an n,m $ array of key ; data
NB. u is key columns, v is columns to return
NB. Result is the list of all boxed lists matching the key
allgetkl_colsuv =: 2 : '(n&datakld)@(((e.!.0)~ xuvy (m&keyskld)) # ])'
allgetkl =: 0 allgetkl_colsuv (<<<0) f.

NB. y is a list of key ; data, x is list of key columns (default 0)
NB. Result is the input, with duplicate keys removed (first one of multiples survives)
nubkl =: (#~ ~:@:(0&keyskld)) : (] #~ ~:@:keyskld) f.

NB. y is list of key ; data, x is list of columns to return (default 1)
NB. result is raze of one column of the data with the keys removed.  Default is first column
razekl =: (1&$:) : (; @: ({"1)) f.

NB. Conjunction: apply u to column number n of y, but only in records with keys in x
applykl =: 2 : '(((u&.>) @: (n&{)@])`(n"_)`] }) ^: ({. uy_vx e.) "_ 1'

NB. Conjunction: u is a predicate, v is a (possibly list of) column numbers
NB. u is applied to the list of (boxed) selected elements of y and the entire x (if any)
NB. Result is only those items which produce a nonzero predicate
cullkl =: 2 : '(u bivalent (n&{"1)   #   ])   ifany'
Это вообще как читать??? Вот уж точно язык для элиты! Пусть у них мозги кипят от этой порнографии.

delete83 ★★
()
Ответ на: комментарий от delete83

> Это вообще как читать???

Глазками

Пусть у них мозги кипят от этой порнографии.

Бытует мнение, что сложность зависит от квадрата числа строк. Так вот, по этой метрике на этом языке программы получаются проще, чем на популярных С/Джава/Етц

ky-san
()
Ответ на: комментарий от ky-san

Я не знаю, где это мнение бытует и чем оно еще там занимается, но у меня есть свое мнение, что сложность восприятия языка зависит от степени его структурированности и от количества символов [,],(,),$,#,_,~,% и других подобных, которые усложняют восприятие текста для глаз.

delete83 ★★
()

открыл первый попавшийся сишный файл из исходников... make me unsee it!

anonymous
()
Ответ на: комментарий от vurdalak

Потом все будут писать свои виртуальные машины же, ну.

Insomnium ★★★★
()
Ответ на: комментарий от ky-san

1) Вы когда программу «воспринимаете», вы ее на уровне интуиции воспринимаете или все-таки текст пытаетесь читать разбирая семантику?

2) Согласен, си требует обучения. Однако программы на нем в разы читабельнее, чем на J. Ассемблер, кстати, тоже требует обучения, однако и на нем программы читать легче, чем на J.

delete83 ★★
()
Ответ на: комментарий от ky-san

Не зря в википедии в статье про J дают ссылку на Perl...

delete83 ★★
()
Ответ на: комментарий от delete83

Читая текст на русском, английском, немецком, хаскеле, ассемблере - я воспримаю всё целиком, правда, иногда отвлекаясь на «незнакомые/забытые» конструкции (это показатель недостаточного знания языка).

Зачем ты меня заставляешь повторять одно и то же? Тебе лично непонятно и для тебя лично нечитаемее только из-за того, что ты этот язык не знаешь.

Вон китайцы пишут на подобии APL - куча символов и ни одного на стандартной клавиатуре. Для них родной язык проще.

ky-san
()
Ответ на: комментарий от ky-san

Я не учил ни китайский, ни японский, ни корейский. Однако почему-то Текст на японском или корейском не вызывает у меня такого отторжения, как листинги программ на J.

это показатель недостаточного знания языка

То есть вы подтверждаете, что это язык для элиты, которая нашла время и силы для изучения еще одного языка программирования с необычным синтаксисом и лексикой?

delete83 ★★
()
Ответ на: комментарий от anonymous

> Вообще, судить язык на основе синтаксиса — признак махрового быдлокодера. Специалист выбирает язык по его возможностям. В случае J надо говорить о не-фоннеймановости, комбинаторном программировании, ФВП и композициях, бесточечном стиле, гибком ООП (как классовом, так и прототипном), матричных операциях «искаропки». А не о паре синтаксических элементов, вызвавших деление на ноль у одного отдельно взятого низкорангового представителя стаи.

Я таки вполне вменяемо пишу на F# (язык ML семейства) и могу сказать, что тот пример, который в привёл из их wiki (взят из статьи Lexical Closure) - с ходу не читаем, что есть очень не хорошо. И таки я реализовывал алгоритмы на F# длиннее пары десятков строк кода(к примеру LALR-анализатор). Так что не надо мне тут козырять своими `знаниями` о ФП и прогах на нём.

Norgat ★★★★★
()
Ответ на: комментарий от anonymous

п.с. а ещё к этому языку нужно добавить полное отсутствие библиотек и сред разработки. И кто всё это будет пилить при том ужасе, что у них в исходниках твориться(не поленись и посмотри их Си код)?

Norgat ★★★★★
()
Ответ на: комментарий от delete83

> То есть вы подтверждаете, что это язык для элиты, которая нашла время и силы для изучения еще одного языка программирования с необычным синтаксисом и лексикой?

Где я подтверждаю? Перечитай ещё раз. Не понятно — переспроси.

Я могу и в третий раз написать (специально для альтернативно-одарённых): то, что *тебе* что-то непонятно в незнакомом *тебе* языке означает всего лишь, что язык *тебе* незнаком.

ky-san
()
Ответ на: комментарий от Norgat

> с ходу не читаем, что есть очень не хорошо.

Забавно у тебя получилось. Китайский для меня с ходу нечитаем больше, чем J, а «нечитаемость с ходу есть „очень не хорошо“ — значит китайский нехороший язык?

> И таки я реализовывал алгоритмы на F# длиннее пары десятков строк кода(к примеру LALR-анализатор). Так что не надо мне тут козырять своими `знаниями` о ФП и прогах на нём.

Молодец, потешил самолюбие, только к чему это всё?

ky-san
()
Ответ на: комментарий от ky-san

> Забавно у тебя получилось. Китайский для меня с ходу нечитаем больше, чем J, а «нечитаемость с ходу есть „очень не хорошо“ — значит китайский нехороший язык?

Это значит, что человек которому нужно что-то дописать в чужой J код будет дольше входить в архитектуру программы и реализацию алгоритмов. Следовательно поддержка кода на J будем не самым радостным моментом разработчиков. А что отсюда будет следовать? Ну как минимум то, что либ будет меньше(таки да, очень многих отпугнёт синтаксис не знакомый), а баги в них будут правиться медленнее(особенно если либу кто-то не ковыряет оч. активно). А кому нужен будет язык без либ? На голом то языке много не попишешь.

Молодец, потешил самолюбие, только к чему это всё?

К тому, что козыряние терминами ФП передо мной есть пустой звук, т.к. я всё это знаю и применяю.

Norgat ★★★★★
()
Ответ на: комментарий от Norgat

> не поленись и посмотри их Си код

цитата из http://www.dvgu.ru/forum/thread.php?threadid=2033/ __________________________________________________

Большая часть J реализована на самом себе. Остальная часть написана на C с использованием APL-подобных конструкций.

___________________________________________________

наверное хватит нести пурген? реализован edsl на си, и это прекрасно

psv1967 ★★★★★
() автор топика
Ответ на: комментарий от Norgat

> нужно добавить полное отсутствие библиотек и сред разработки.

умрете от ожирения

какие нафиг среды разработки? APL/J/K программист держит программу в уме, вся реализация K занимает 24 страницы A5 формата.

цитата из http://www.dvgu.ru/forum/thread.php?threadid=2033/

-------------------------------

Компактность J-кода    

Недавно опубликовал на языке J предварительную версию аддона mt, предназначенного для решения некоторых задач матричной алгебры: преобразования, разложения, сведения к сжатой форме, факторизации, решения уравнений, вычисления матричных функций, оценки числа обусловленности. Разработка длилась 2,5 года.

Аддон реализован на основе алгоритмов известной фортрановской библиотеки LAPACK. Mt является аналогом аддона jlapack, но, в отличие от последнего, не использует оригинальную LAPACK-овскую библиотеку, а реализован на «чистом» Джее. Разумеется, реализована только часть алгоритмов - реализация лапаковской библиотеки целиком вряд ли под силу одному человеку. На текущий момент (версия 0.6.6) на J реализовано 273 существительных, глагола, наречия и союза (или 522 с учётом подпрограмм). Это соответствует 168 процедурам и функциям на Фортране (или 245 с учётом подпрограмм).

И вот сейчас стало возможным приблизительно оценить, насколько код на J компактнее кода на Fortran. Итак:

количество строк на Fortran (с учётом BLAS, без учёта процедур само-тестирования из каталога TESTING, только типы данных D и Z): - код: 22042 - комментарии: 30025 - всего: 52067

количество строк на J (c учётом процедур само-тестирования): - код: 1754 (8% от фортрановского) - комментарии: 10052 (34%) - всего: 11806 (23%)

__________________ WBR, jip

psv1967 ★★★★★
() автор топика
Ответ на: комментарий от Norgat

> > Забавно у тебя получилось. Китайский для меня с ходу нечитаем больше, чем J, а «нечитаемость с ходу есть „очень не хорошо“ — значит китайский нехороший язык?

Это значит, что человек которому нужно что-то дописать в чужой J код будет дольше входить в архитектуру программы и реализацию алгоритмов. Следовательно поддержка кода на J будем не самым радостным моментом разработчиков. А что отсюда будет следовать? Ну как минимум то, что либ будет меньше(таки да, очень многих отпугнёт синтаксис не знакомый), а баги в них будут правиться медленнее(особенно если либу кто-то не ковыряет оч. активно). А кому нужен будет язык без либ? На голом то языке много не попишешь.

Человек должен чётко понимать, что он делает, как, зачем и почему именно так, а не иначе. Для этого нужно знать язык и быть знакомым с концепциями, „подходами“/идиоматическими решениями/приёмами.

Свои рассуждения о „знакомом синтаксисе“ и „вхождении в архитектуру“ рассказывай однокурссникам: прежде, чем куда-то лезть „дописывать“ код человек должен уметь писать на этом языке. Иначе лезть не стоит.

К тому, что козыряние терминами ФП передо мной есть пустой звук, т.к. я всё это знаю и применяю.

:) Аноним тебе о другом сказать пытался.

ky-san
()
Ответ на: комментарий от psv1967

> реализован edsl на си, и это прекрасно

Посмотрел их код — да, очень странный стиль. Однако, несмотря на странность, воспринимается не так плохо, как показалось во время первого взгляда (видимо, шок прошёл). Что-то в такой компактной записи определённо есть.

ky-san
()
Ответ на: комментарий от skvitek

> Это не R.

ну R(S) как бы APL поверх LISP, попытка реализовать APL среду обработки данных на движке лиспа...

кроме того, на сотовый телефон R не очень то поставишь :(

ну и навык работы в J прекрасно переносится в способность эффективно писать на R.

psv1967 ★★★★★
() автор топика

посмотрел ссылку на педивикию, понял что на ЭТОМ могут лепить только те кто никакой НОРМАЛЬНЫЙ язык до этого не видел

q11q11 ★★★★★
()
Ответ на: комментарий от ky-san

> Бытует мнение, что сложность зависит от квадрата числа строк. Так вот, по этой метрике на этом языке программы получаются проще, чем на популярных С/Джава/Етц

А что говорит бытующее мнение по поводу сложности?

tailgunner ★★★★★
()

1. Судя по комментам, Чукча не читатель.

2. Вот я-то поезд жду, мне реально делать нечего.

PS Грустно, можно построить в РФ хоть 500 суперкомпьютеров, но психология не изменится. Код не читается - плохой язык. Молодцы.

jSnake
()
Ответ на: комментарий от tailgunner

Если обратное понятие для сложности это простота - то будет ~ 1/сложность

Критерии оценки восприятия человека сильно расплывчаты и субъективны тяжело поддаются численным измерениям.

ky-san
()
Ответ на: комментарий от yyk

> не льсти себе
да ты что?

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

q11q11 ★★★★★
()
Ответ на: комментарий от ky-san

> Критерии оценки восприятия человека сильно расплывчаты и субъективны тяжело поддаются численным измерениям.

Тогда нечего выдавать извращенные вкусы аффторов J за нечто здравое.

tailgunner ★★★★★
()
Ответ на: комментарий от ky-san

Раз уж переходим на личности...

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

Можно сколько угодно распускать сопли о преимуществах какого-либо языка программирования, но сложность восприятия кода (а это подразумевает время, затрачиваемое на изучение этого языка и на чтение чужих программ написанных на этом языке) перечеркивает ВСЕ преимущества. Потому что в итоге этот язык будет востребован только 0.000000000...01% из числа всех разработчиков. А значит язык этот мертв от рождения. Если вы не согласны, это ваше дело. Я выразил свое мнение и не надо передо мной хвастать, что вы знаете 101 язык программирования и еще 20 языков человеческих. Мне это не интересно.

delete83 ★★
()
Ответ на: комментарий от jSnake

Постройте хоть один супер... да простой компьютер в России! И я на вас молиться буду!

delete83 ★★
()
Ответ на: комментарий от ky-san

> Чем, как и по какой методике ты измерял «извращённость вкусов»?

По тому, насколько их вкус является общепринятым.

tailgunner ★★★★★
()
Ответ на: комментарий от delete83

> «Специально для альтернативно-одаренных» (С) замечу, что сравнивать язык программирования с человеческим языком с точки зрения простоты восприятия совершенно некорректно.

Почему же?

Китайцы с рождения учатся говорить на родном языке.

(Русские|Индусы|Вьетнамцы|...) с рождения учатся говорить на родом языке.

Ни одному европейцу за всю жизнь не удастся выучить их язык на таком же уровне.

По-большей части так.

Назовите мне хоть одного человека, который с рождения учился читать и писать (да хоть говорить!) на J или APL!

Только после того, как ты назовёшь тех, кто «с рождения учился читать и писать (да хоть говортиь!) на ML/Scheme/Haskell/Ruby/Python/C++ (заметь, ты написал эмоциональный, несвязанный текст, и если заменить ключевые слова — то смысл не изменится).

сложность восприятия кода (а это подразумевает время, затрачиваемое на изучение этого языка и на чтение чужих программ написанных на этом языке) перечеркивает ВСЕ преимущества.

Глупость. Обычно наоборот: тебя в школе год учили держать ручку и правильно ей пользоваться с помощью прописей. Теперь ты можешь писать с закрытыми глазами в темноте. Разве здесь время, затраченное на обучение, не окупилось? Так же и с остальными инструментами. Потраченное время на обучение приносит прибыль.

ky-san
()
Ответ на: комментарий от ky-san

Знаете, меня в школе еще учили писать и читать. На РУССКОМ языке. И еще многим вещам учили, которые называют общим словом общеобразовательная программа. В эту программу входят знания и навыки, которые могут пригодиться практически каждому человеку много раз на протяжении всей жизни.

Только после того, как ты назовёшь тех, кто «с рождения учился читать и писать (да хоть говортиь!) на ML/Scheme/Haskell/Ruby/Python/C++ (заметь, ты написал эмоциональный, несвязанный текст, и если заменить ключевые слова — то смысл не изменится).

А теперь еще раз перечитайте мой пост и вникните в суть текста, которая скрывается за отдельными предложениями. Можно заменить. Пожалуйста, замените в моем посте слово J на ML/Scheme/Haskell/Ruby/Python/C++. Я разрешаю! Смысл от этого не потеряется и не изменится.

Я говорил о том, что изначально человеку труднее воспринимать текст на искусственном языке, каковым и является любой язык программирования, чем текст на человеческом языке. Именно поэтому языки программирования и стараются делать подобными человеческим. Но специально для вас и вам подобных (подозреваю, что вам подобные это и делают) люди изобретают еще и языки программирования, максимально удаленные от человеческих. Тот же brainfuck хотя бы.

delete83 ★★
()
Ответ на: комментарий от q11q11

>у меня в универе был очень наглядный пример...

«ниасиляторства»?

евки которые до универа ни одного языка не видели очень хорошо лепили на лиспе, а те кто уже писал до этого на Си подобных языках - просто блевали от лиспа...


а те, кого научили «лепить на лиспе» потом от писания на «Си подобных языках» наверное сразу падали в кому?

yyk ★★★★★
()
Ответ на: комментарий от delete83

> Я говорил о том, что изначально человеку труднее воспринимать текст на искусственном языке, каковым и является любой язык программирования, чем текст на человеческом языке.

Абсолютно верно. А ещё человеку изначально трудно воспринимать текст на незнакомом естественном языке.

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

Ну да, а вам подобные люди изобретают языки с переведёнными ключевыми словами на местные языки. И как, есть от этого польза, сколько языков уже прошли такую оптимизацию?

Думаю, пользы нет, так как человек не мыслит в ключевыми словами и операциями, а просто использует язык для выражения своего представления программы. Лаконичные языки всегда выигрывали у более многословных собратьев — просто потому, что людям не нравится писать лишнее, если можно без этого обойтись (путём выбора более лаконичного языка).

ky-san
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.