K - это проприетарный язык программирования обработки массивов, разработанный Артуром Уитни и коммерциализированный Kx Systems . Язык служит основой для kdb + , базы данных на основе столбцов в оперативной памяти и других связанных финансовых продуктов. [1] Язык, первоначально разработанный в 1993 году, является вариантом APL и содержит элементы Scheme . Сторонники языка подчеркивают его скорость, удобство работы с массивами и выразительный синтаксис. [2]
Парадигма | массив , функционал |
---|---|
Разработано | Артур Уитни |
Разработчик | Kx Systems |
Впервые появился | 1993 |
Печатная дисциплина | динамичный , сильный |
Веб-сайт | kx |
Под влиянием | |
A + , APL , Схема | |
Под влиянием | |
Q |
История
До разработки K Артур Уитни много работал с APL, сначала в IP Sharp Associates вместе с Кеном Айверсоном и Роджером Хи , а затем в Morgan Stanley, разрабатывая финансовые приложения. В Morgan Stanley, Уитни помогли разработать A + , вариант APL, чтобы облегчить миграцию APL приложений от IBM мейнфреймов к сети Sun рабочих станций . A + имел меньший набор примитивных функций и был разработан для скорости и обработки больших наборов данных временных рядов. [3]
В 1993 году Уитни покинула Morgan Stanley и разработала первую версию языка К. В то же время он основал Kx Systems для коммерциализации продукта и подписал эксклюзивный контракт с Union Bank of Switzerland (UBS). В течение следующих четырех лет он разрабатывал различные финансовые и торговые приложения, используя K для UBS.
Контракт закончился в 1997 году, когда UBS объединился со Швейцарским банком . В 1998 году Kx Systems выпустила kdb +, базу данных, построенную на K. kdb была базой данных в памяти , ориентированной на столбцы и включала ksql, язык запросов с синтаксисом, подобным SQL . С тех пор с K и kdb + было разработано несколько финансовых продуктов. kdb + / tick и kdb + / taq были разработаны в 2001 году. kdb +, 64-разрядная версия kdb + была выпущена в 2003 году, а kdb + / tick и kdb + / taq были выпущены в 2004 году. kdb + включал Q , язык, объединяющий функции базовый язык K и ksql. [4]
В 2018 году Уитни выпустила производное от К. под названием Shakti [5].
Обзор
K разделяет ключевые функции с APL. Они оба интерпретировано , интерактивные языки , отмеченные лаконичный и выразительный синтаксис. У них есть простые правила приоритета, основанные на оценке справа налево. Языки содержат богатый набор примитивных функций, предназначенных для обработки массивов. Эти примитивные функции включают математические операции, которые работают с массивами как с целыми объектами данных, и операции с массивами, такие как сортировка или изменение порядка массива. Кроме того, язык содержит специальные операторы, которые в сочетании с примитивными функциями выполняют типы итерации и рекурсии. В результате сложные и расширенные преобразования набора данных могут быть выражены в виде цепочки подвыражений, где каждое звено выполняет сегмент вычисления и передает результаты следующему звену в цепочке.
Как и APL, примитивные функции и операторы представлены одиночными или двойными символами; однако, в отличие от APL, K ограничивается набором символов ASCII (как и другой вариант APL, J ). Чтобы учесть это, набор примитивных функций для K меньше и сильно перегружен , при этом каждый из символов ASCII представляет две или более различных функций или операций. В данном выражении фактическая ссылка на функцию определяется контекстом. В результате K-выражения могут быть непрозрачными и трудными для анализа людьми. Например, в следующем надуманном выражении восклицательный знак !
относится к трем различным функциям:
2 !! 7! 4
Чтение справа налево, первое !
- это деление по модулю, которое выполняется на 7 и 4, в результате чего !
получается 3. Следующее - перечисление и перечисляет целые числа меньше 3, в результате чего !
получается список 0 1 2. Последним является вращение, когда список right поворачивается два раза влево, что дает окончательный результат 2 0 1.
Второе ключевое отличие K состоит в том, что функции являются объектами первого класса , концепция заимствована из Scheme . Первоклассные функции могут использоваться в тех же контекстах, где могут использоваться значения данных. Функции могут быть указаны как анонимные выражения и использоваться непосредственно с другими выражениями. Функциональные выражения указываются в K с помощью фигурных скобок . Например, в следующем выражении квадратное выражение определяется как функция и применяется к значениям 0 1 2 и 3:
{(3 * x ^ 2) + (2 * x) +1} '! 4
В языке K именованные функции - это просто функциональные выражения, хранящиеся в переменной, точно так же, как любое значение данных сохраняется в переменной.
a : 25 f : { ( x ^ 2 ) - 1 }
Функции могут быть переданы как аргумент другой функции или возвращены как результат функции.
Примеры
K - это интерпретируемый язык, в котором каждое выражение оценивается и его результаты немедленно отображаются. Литеральные выражения, такие как строки, оценивают сами себя. Следовательно, программа Hello world тривиальна:
"Привет мир!"
Следующее выражение сортирует список строк по их длине:
х @> #: 'х
Выражение оценивается справа налево следующим образом:
- #: 'x возвращает длину каждого слова в списке x.
- > возвращает индексы, которые сортировали бы список значений в порядке убывания.
- @ используйте целые числа справа для индексации исходного списка строк.
Функцию, определяющую, является ли число простым, можно записать как:
{& / x ! /: 2 _ ! x }
Функция оценивается справа налево:
- ! x перечисляет натуральные числа меньше x.
- 2_ удаляет первые два элемента перечисления (0 и 1).
- x! /: выполняет деление по модулю между исходным целым числом и каждым значением в усеченном списке.
- & / найти минимальное значение списка результата по модулю.
Если x не является простым, тогда одно из значений, возвращаемых операцией по модулю, будет 0 и, следовательно, минимальное значение списка. Если x простое, то минимальное значение будет 1, потому что x mod 2 равен 1 для любого простого числа больше 2.
Приведенную ниже функцию можно использовать для перечисления всех простых чисел от 1 до R с помощью:
2 _ & {& / x ! /: 2 _ ! x } '! R
Выражение оценивается справа налево.
- ! R перечислить целые числа меньше R.
- 'применить каждое значение перечисления к функции простых чисел слева. Это вернет список из 0 и 1.
- & вернуть индексы списка, где значение равно 1.
- 2_ отбросить первые два элемента перечисления (0 и 1)
K финансовых продуктов
K - это основа семейства финансовых продуктов. Kdb + - это база данных на основе столбцов в оперативной памяти, которая во многом схожа с функциями системы управления реляционными базами данных . База данных поддерживает SQL , SQL-92 и ksql, язык запросов с синтаксисом, подобным SQL и предназначенный для запросов на основе столбцов и анализа массивов.
Kdb + доступен для нескольких операционных систем , включая Solaris , Linux , macOS и Windows (32- или 64-разрядные).
Смотрите также
- J , еще один язык, вдохновленный APL
- Q , язык kdb + и новая объединенная версия K и ksql.
Рекомендации
- ^ «Системы Kx» .
- ^ Айверсон, Кеннет. «Нотация как инструмент мысли» . Архивировано из оригинала на 2013-09-20 . Проверено 23 февраля 2015 .
- ^ "Артур био и интервью" .
- ^ Гарланд, Саймон (28 декабря 2004 г.), Язык Q, расширяющий привлекательность векторов , Vector UK, архивировано с оригинала 1 января 2007 г.
- ^ https://shakti.com/history/
Внешние ссылки
- Официальный сайт , Kx Systems
- Официальный сайт , kdb +
- Обзор K (со ссылкой на справочную карту K)
- Деннис Шаша - K как язык прототипирования
- Майкл Шидловски - Скринкаст, сравнивающий решения конкретной проблемы на K и Java
- K Артура Уитни (2005)
- OK REPL для клона K
- Kona - реализация K3 с открытым исходным кодом