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, получили иную, видимо более эффективную и удобную идеологию работы с данными. Уже за счет этого данная СУБД чрезвычайно востребована. На Форте, думаю, можно создать что-то подобное, и даже раскрутить. Но получится это только у тех, кто хорошо шарит в предметной области и представляет потенциальные запросы клиентов. А так же у кого есть необходимые финансы и время на это дело Ну и вдобавок это наглядный пример того, что даже Форт с его "непривычным" синтаксисом легко может быть лидером в различных областях. Главное - правильное позиционирование, удобный инструментарий, и широкие возможности. |
Автор: | 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 писал(а): Ничего не напоминает?
Угу. Оно самое Просто как я понял, у них в К довольно богатый и грамотно структурированый инструментарий. Потому в качестве редактора нотепада и хватает Для форта надо бы сделать то же самое. Богатый, подробно описаный набор библиотек. И все. По скорости, я думаю, Форт будет ну никак не хуже К. |
Автор: | 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/ |