Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб сен 22, 2018 23:41

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Язык программирования K
СообщениеДобавлено: Пт ноя 10, 2006 16:55 
Из того же семейства что и 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 (в отличии от Форта) -- язык полностью интерпретируемый, то контекст по идее, должен играть роль не при компиляции определений (которой нет), а непосредственно при исполнении.

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

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


Последний раз редактировалось profiT Пт ноя 10, 2006 18:42, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 10, 2006 17:33 
А меня на данный момент заинтересовал Smalltalk
тоже думаю что нибудь из него притянуть к Форту:)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 10, 2006 21:26 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
когда-то довольно много игрался с ним. Что запомнилось:
- хранит историю значений(!) чуть ли не для каждой переменной;
- оччень быстро пересчитывает большие объемы числовой информации;
- довольно интересный синтаксис, приходитяс учить заново;
- ограничения в демо-версии.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 14, 2006 13:01 
Не в сети

Зарегистрирован: Сб май 13, 2006 18:17
Сообщения: 42
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
2profiT:
По сайту я так понял, что это всё же некоторая СУБД, по крайней мере упоминания про язык К в чистом виде не нашел.

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

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 14, 2006 15:38 
Цитата:
По сайту я так понял, что это всё же некоторая СУБД, по крайней мере упоминания про язык К в чистом виде не нашел.

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

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

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

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

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

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

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

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

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

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

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

Должен быть.

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

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


Последний раз редактировалось profiT Ср ноя 15, 2006 08:48, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 14, 2006 17:22 
Не в сети

Зарегистрирован: Сб май 13, 2006 18:17
Сообщения: 42
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
2profit:
Спасибо за инфу, почему-то убеждён, что на Форте можно сделать что-то подобное.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 15, 2006 14:15 
ld писал(а):
Спасибо за инфу, почему-то убеждён, что на Форте можно сделать что-то подобное.

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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 15, 2006 17:30 
Цитата:
И у меня тоже сложилось такое впечатление

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

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

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


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

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

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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 15, 2006 19:20 
Не в сети

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

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

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



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

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 15, 2006 22:32 
Цитата:
Ты пишешь свою БД?

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

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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 16, 2006 15:14 
Не в сети

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 231
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
Привет Всем!
Я тоже пробовал K/KDB, дается правда туго, отмечу еще то о чем не сказано:
- встроенный HTTP, tcp сервера
- декларативный GUI
- триггеры (срабатывает при изменении переменной)
- зависимости (срабатывает при изменении других переменных - аналог формул excel)
- маленький размер <200к

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 14:09 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Владимир писал(а):
profiT писал(а):
Ничего не напоминает?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 17, 2006 14:34 
Не в сети

Зарегистрирован: Ср июл 05, 2006 14:44
Сообщения: 231
Благодарил (а): 0 раз.
Поблагодарили: 7 раз.
В общем достоинств много и кое-что было бы приятно иметь и в фортике
есть один товарищ http://www.nsl.com который на К пишет интерпретаторы
(например F, XY, cK) Вот бы еслиб ближе к форт синтаксису и семантике ...

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB