Forth
http://fforum.winglion.ru/

Язык программирования K
http://fforum.winglion.ru/viewtopic.php?f=4&t=320
Страница 1 из 2

Автор:  profiT [ Пт ноя 10, 2006 16:55 ]
Заголовок сообщения:  Язык программирования K

Из того же семейства что и APL, A+, J.

Сайт производителя.
Краткое введение в язык (на буржуйском) и даже с картинками.
Обширная статья о нём: A Shallow Introduction to the K Programming Language.

С "сурьёзностью" у языка "усё-у-порядке": в списке клиентов сплошь банки да Уолл-стриты. Скорость исполнения зашкаливает. Краткость на уровне алгоритма zip (программы усыхают где-то на порядок, на два). Правда из-за этого и выглядят программы на нём очень безизбыточно, как алфавитно-цифровой мусор.

Дистрибутив так просто не скачать, надо их об этом вежливо попросить в личном обращении по электронной почте с этой странички.

Вот, накропал тут некоторую самоописательную вводную в язык:
Код:
2+2
/ вывод: 4

2+(1 2)
/ вывод: 3 4

/ можно и без скобок, тоже самое (в K справа налево):
2+1 2
/ вывод: 3 4


fact:{*/1+!x} / факториал x
/ fact -- функция. Тело её в фигурных скобках.
/ Через использованный x подразумевается что у функции есть один аргумент.
/ !x -- сделать список натуральных чисел от 0 до x-1
/ 1+!x -- прибавить к каждому элементу этого списка 1
/ */ -- умножение с модификатором, заставляет операцию встревать между
/ всеми поочерёдными элементами ряда:
/ */(1 2 3) означает 1*2*3
/ */1+!x -- перемножить между собой все элементы списка

/ проверка:
fact(3)
/ вывод: 6

/ можно без скобок:
fact 3
/ вывод: 6

fact' !10
/ выводит десять первых факториалов: 1 1 2 6 24 120 720 5040 40320 362880
/ !10 -- создаёт ряд натуральных чисел от 0 до 9
/ fact' -- для каждого элемента ряда применяет новосозданную функцию fact

isprime:{&/x!/:2_!x}
/ функция простейшей проверки на простое число.
/ !x -- ряд чисел

/ 2_!x -- убираем из этого ряда два первых элемента, то есть 0 и 1,
/ получается [2, ..., x-1]

/ !/: -- в этом случае ! означает уже определение остатка от деления, а /:
/ является модификатором действия, означающим множественное применение
/ правого операнда.

/ x!/:2_!x -- Операция у нас -- ! то есть определение остатка от деления.
/ Слева операнд только один -- само число x. Справа образовался ряд чисел.
/ Модификатор заставляет выполнять операцию для каждого элемента второго
/ операнда, сохраняя при этом первый операнд таким же.

/ После этой операции мы должны получить (для x=6):
/ ( (6 mod 5) (6 mod 4) (6 mod 3) ) => ( 1 2 0 )

/ &/ -- a&b находит минимум между двумя числами, поэтому в сочетании с
/ модификатором / & вычисляет минимум ряда.

/ &/x!/:2_!x находит минимум в этом ряду образованном остатками. Если это 0,
/ значит число x всё-таки на что-то поделилось нацело. Если минимум равен 1,
/ значит число -- простое, и ни на что не поделилось.

/ Обратите внимание на "в лоб"-овость реализации. Алгоритм выражается на
/ человеческом языке так: "чтобы проверить простое число или нет, надо
/ попробовать поделить его на что только можно, если на что-то оно поделится
/ без остатка, значит оно простое". На K эта фраза выглядит так:
/ isprime:{&/x!/:2_!x}

primes:{&isprime'!x} / выдаёт все простые числа, меньшие x
/ isprime'!x -- те кто не спал, читая предыдущие заметки, уже должны понять
/ что эта последовательность выдаст ряд нулей и единиц которые соответствуют
/ простоте их индекса. То есть isprime'!20 выдаст:
/ 1 1 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1
/ теперь нам чтобы превратить эти нули-единички в нужный нам набор чисел
/ надо использовать магическую функцию & . Нет, это уже другая функция &, не
/ та что использовалась в isprime. Там & был бинарный, а здесь он унарный,
/ у него только один операнд -- наш массив единиц и нулей. В этом случае
/ функция & делает очень интересную вещь: проходит по каждому элементу ряда,
/ и пишет в выходной ряд номер индекса каждого элемента столько раз сколько
/ стоит в соответствующей позиции ряда. То есть: &1 2 3 делает 0 1 1 2 2 2.
/ И так как наш ряд состоит только из нулей и единиц, то в результате мы
/ имеем список индексов ряда у которых значение было 1 (ведь нулевые элементы
/ в результат вообще не записались). А вспоминая, что значения в этом ряду
/ проставляются в зависимости от простоты индекса понимаем что получаем то
/ что дано в описании функции.


Кроме продемонстрированных в коде особенностей: заточенность на обработку массивов, модификаторов действий, отсутствие циклов язык K имеет также зависимые переменные и K-tree, который дико напоминает на первый взгляд Фортовые контекстных словари. Но, так как K (в отличии от Форта) -- язык полностью интерпретируемый, то контекст по идее, должен играть роль не при компиляции определений (которой нет), а непосредственно при исполнении.

Обязательно перенесу что-нибудь из его элементов в Форт. Собственно уже.

Крутятся всякие мысли по реализации модификаторов...

Автор:  Гость [ Пт ноя 10, 2006 17:33 ]
Заголовок сообщения: 

А меня на данный момент заинтересовал Smalltalk
тоже думаю что нибудь из него притянуть к Форту:)

Автор:  AlexF [ Пт ноя 10, 2006 21:26 ]
Заголовок сообщения: 

когда-то довольно много игрался с ним. Что запомнилось:
- хранит историю значений(!) чуть ли не для каждой переменной;
- оччень быстро пересчитывает большие объемы числовой информации;
- довольно интересный синтаксис, приходитяс учить заново;
- ограничения в демо-версии.

Автор:  ld [ Вт ноя 14, 2006 13:01 ]
Заголовок сообщения: 

2profiT:
По сайту я так понял, что это всё же некоторая СУБД, по крайней мере упоминания про язык К в чистом виде не нашел.

Цитата:
Скорость исполнения зашкаливает.

Это в сравнении с чем?
Цитата:
отсутствие циклов

А это видимо зашитый бэктрекинг?

Если эта СУБД реактивнее чем MySQL, то с удовольствием бы попробовал, а так же интересно, в чём отличия от демо-версии, потому как с сайтом пока толком не разобрался :)

Автор:  profiT [ Вт ноя 14, 2006 15:38 ]
Заголовок сообщения: 

Цитата:
По сайту я так понял, что это всё же некоторая СУБД, по крайней мере упоминания про язык К в чистом виде не нашел.

Внимательнее надо смотреть (q -- это новая версия K).

Цитата:
Скорость исполнения зашкаливает.

Цитата:
Это в сравнении с чем?

По сравнению например с Oracle или MS SQL (я про Kdb, который написан на K).

Так люди говорят, сам не видел...

Если сравнивать с другими языками, то это довольно спорно, так как алгоритмы чаще всего будут разные для решения одной и той же задачи при помощи например K и C++ (если разобраться в примере из первого сообщения, это должно стать очевидным).

Также нужно напомнить что язык интерпретируемый, но, тем не менее, в своих сильных сторонах (обработка массивов, доменов, вообще данных) может побить и скомпилированный C++.

Цитата:
...отсутствие циклов...

Цитата:
А это видимо зашитый бэктрекинг?

Нет. Опять-таки, в примере всё показано.

Цитата:
Если эта СУБД реактивнее чем MySQL...

Должен быть.

Цитата:
..., то с удовольствием бы попробовал...

Ну, если есть лишних 150 000$ (сто пятьдесят тысяч долларов), то пожалуйста.

Автор:  ld [ Вт ноя 14, 2006 17:22 ]
Заголовок сообщения: 

2profit:
Спасибо за инфу, почему-то убеждён, что на Форте можно сделать что-то подобное.

Автор:  Владимир [ Ср ноя 15, 2006 14:15 ]
Заголовок сообщения: 

ld писал(а):
Спасибо за инфу, почему-то убеждён, что на Форте можно сделать что-то подобное.

Побродил по их сайту. И у меня тоже сложилось такое впечатление :)
Вообще, то что они создали, по своему уникально, и правильно позиционировано (основной упор ставится на гибкость и производительность). Отказавшись от рамок языка SQL, получили иную, видимо более эффективную и удобную идеологию работы с данными. Уже за счет этого данная СУБД чрезвычайно востребована.
На Форте, думаю, можно создать что-то подобное, и даже раскрутить. Но получится это только у тех, кто хорошо шарит в предметной области и представляет потенциальные запросы клиентов. А так же у кого есть необходимые финансы и время на это дело :shuffle;
Ну и вдобавок это наглядный пример того, что даже Форт с его "непривычным" синтаксисом легко может быть лидером в различных областях. 8) Главное - правильное позиционирование, удобный инструментарий, и широкие возможности. :)

Автор:  profiT [ Ср ноя 15, 2006 17:30 ]
Заголовок сообщения: 

Цитата:
И у меня тоже сложилось такое впечатление

Это не впечатление, а объективная реальность данная нам в ощущениях. Одно из прямо напрашивающихся применений бэкФорта, которым я сейчас занимаюсь, является как раз работа с БД. То есть лёгким движением руки SQL-запрос:
Код:
select quan from prices where price>10

превращается в:

Код:
prices ( генерирует все записи таблицы )
price ( выдаёт на стек значение этого столбца в текущей записи ) 10 > ONTRUE
quan addRow ( допустим кидаем значения в столбец GUI )


Цитата:
Отказавшись от рамок языка SQL, получили иную, видимо более эффективную и удобную идеологию работы с данными.

И да, и нет. Да, они отказались (впрочем, почему в множественном числе? Всё делал один человек -- Артур Уитни) от традиционных представлений в построении своей СУБД и получили скорость.

Но с другой стороны SQL в их СУБД реализован также, но сверху, как дополнительный инструмент.

Автор:  ygrek [ Ср ноя 15, 2006 19:20 ]
Заголовок сообщения: 

profiT писал(а):
Это не впечатление, а объективная реальность данная нам в ощущениях. Одно из прямо напрашивающихся применений бэкФорта, которым я сейчас занимаюсь, является как раз работа с БД. То есть лёгким движением руки SQL-запрос:
Код:
select quan from prices where price>10

превращается в:

Код:
prices ( генерирует все записи таблицы )
price ( выдаёт на стек значение этого столбца в текущей записи ) 10 > ONTRUE
quan addRow ( допустим кидаем значения в столбец GUI )



Ты пишешь свою БД? Или этот синтаксис выполняет несколько sql запросов? Если так - то он будет тормознутей. Если же встроить такой бэкфорт в качестве внутреннего языка БД - будет интересно :)

Автор:  profiT [ Ср ноя 15, 2006 22:32 ]
Заголовок сообщения: 

Цитата:
Ты пишешь свою БД?

Я ещё не сошёл с ума. Просто как пример-фантазию привёл.

Мне своего "браузера" на десять лет жизни хватит...

Автор:  Alex [ Чт ноя 16, 2006 15:14 ]
Заголовок сообщения: 

Привет Всем!
Я тоже пробовал K/KDB, дается правда туго, отмечу еще то о чем не сказано:
- встроенный HTTP, tcp сервера
- декларативный GUI
- триггеры (срабатывает при изменении переменной)
- зависимости (срабатывает при изменении других переменных - аналог формул excel)
- маленький размер <200к

правда использовал еще версии до 2004, когда свободно скачивались evel версии.

Автор:  profiT [ Чт ноя 16, 2006 19:24 ]
Заголовок сообщения: 

Вот ещё цитатка:
Цитата:
Если в К любая программа превышает видимую страницу, считается что надо повысить уровень абстракции и рефактурировать. В примерно страницу К написаны например рабочий spreadsheet или client-server chat программка аля IRC с каналами, операторами, банами и тп.

У них совершенно своя школа software engineering. Любая программа представляется как некая многомерная структура данных и некая многомерная структура представляющая совокупность и последовательность операций, который надо к этим данным применить. MIMD out of hell. Программист всю эту конструкцию должен полностью представлять себе в башке. Другими словами, опытный АПЛшик видит и понимает ВСЮ программу целиком. Для этого она по возможности должна помещаться в так называемый "визуальный буфер", который очень быстер, но и крайне мал. Если код приходится скроллать, то врубается кратковременная память, которая гораздо медленнее и ограниченнее в возможностях. Поэтому и такое эксцессивное, на первый взгляд, рвение к краткости кода.

Людей, вышедших на такой уровень понимания в К крайне мало, но они обладают воистину БОЖЕСТВЕННОЙ производительностью. И всего то что они могут, это родить строчку на прирно К с той же скоростью как мы с вами может родить строчку на Яве. Есть у них забавная демонстрация, где такой дядька, давая презентацию, минут за 25 пишет вполне функциональную ERP-систему под заказ воображаемому клиенту, которого изображает публика в зале. Очень впечатляет.


Ничего не напоминает?

Цитата:
Мур -- один из самых производительных программистов, из тех с которыми я встречался, он за 15 лет написал 15 Кб программ, влючая несколько ОС, САПР и прикладных программ


Мур писал(а):
Каждая программа умещается в 1Кб

Автор:  Владимир [ Пт ноя 17, 2006 10:03 ]
Заголовок сообщения: 

profiT писал(а):
Ничего не напоминает?

Угу. Оно самое ;) Просто как я понял, у них в К довольно богатый и грамотно структурированый инструментарий. Потому в качестве редактора нотепада и хватает :)
Для форта надо бы сделать то же самое. :) Богатый, подробно описаный набор библиотек. И все. По скорости, я думаю, Форт будет ну никак не хуже К. :D

Автор:  Kopa [ Пт ноя 17, 2006 14:09 ]
Заголовок сообщения: 

Владимир писал(а):
profiT писал(а):
Ничего не напоминает?

Красный шарик с рожками?:)
амблема с http://www.freebsd.org/ru/

Автор:  Alex [ Пт ноя 17, 2006 14:34 ]
Заголовок сообщения: 

В общем достоинств много и кое-что было бы приятно иметь и в фортике
есть один товарищ http://www.nsl.com который на К пишет интерпретаторы
(например F, XY, cK) Вот бы еслиб ближе к форт синтаксису и семантике ...

А так приходится думать о К как о спецпроцессоре для форта, т.е. если надо БД
или векторы то сообщение ему и ждать ответа. Есть у меня набросок такой консоли
из форта строку в К а он результат обратно, ну и наоборот из К в сторону форта.

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/