This article needs additional citations for verification. (August 2011) |
Парадигма | массив , функциональный |
---|---|
Разработано | Артур Уитни |
Разработчик | Системы Кх |
Впервые появился | 1993 (1993) |
Дисциплина печати | динамичный , сильный |
Веб-сайт | kx.com |
Под влиянием | |
A+ , APL , Схема | |
Под влиянием | |
В , Шакти |
K — это запатентованный язык программирования обработки массивов , разработанный Артуром Уитни и коммерциализированный Kx Systems . Язык служит основой для kdb+ , базы данных на основе столбцов в памяти и других связанных финансовых продуктов. [1] Язык, первоначально разработанный в 1993 году, является вариантом APL и содержит элементы Scheme . Сторонники языка подчеркивают его скорость, простоту в обработке массивов и выразительный синтаксис. [2]
До разработки K Артур Уитни много работал с APL, сначала в IP Sharp Associates вместе с Кеном Айверсоном и Роджером Хуэем , а затем в Morgan Stanley, где разрабатывал финансовые приложения. В Morgan Stanley Уитни помогал разрабатывать A+ , вариант APL, для облегчения миграции приложений APL с мэйнфреймов IBM на сеть рабочих станций Sun. A+ имел меньший набор примитивных функций и был разработан для скорости и обработки больших наборов данных временных рядов. [3]
В 1993 году Уитни покинул Morgan Stanley и разработал первую версию языка K. В то же время он основал Kx Systems для коммерциализации продукта и подписал эксклюзивный контракт с Union Bank of Switzerland (UBS). В течение следующих четырех лет он разрабатывал различные финансовые и торговые приложения с использованием K для UBS.
Контракт закончился в 1997 году, когда UBS объединился со Swiss Bank . В 1998 году Kx Systems выпустила kdb+, базу данных, построенную на K. kdb была in-memory , столбчатой базой данных и включала ksql, язык запросов с синтаксисом, подобным SQL . С тех пор было разработано несколько финансовых продуктов с использованием K и kdb+. kdb+/tick и kdb+/taq были разработаны в 2001 году. kdb+, 64-разрядная версия kdb+, была выпущена в 2003 году, а kdb+/tick и kdb+/taq были выпущены в 2004 году. kdb+ включал Q , язык, который объединил функции базового языка K и ksql. [4]
В 2018 году Уитни выпустила производную от K под названием Shakti. [5]
K разделяет ключевые особенности с APL . Они оба являются интерпретируемыми , интерактивными языками, известными своим лаконичным и выразительным синтаксисом. Они имеют простые правила приоритета, основанные на оценке справа налево. Языки содержат богатый набор примитивных функций, предназначенных для обработки массивов. Эти примитивные функции включают математические операции, которые работают с массивами как с целыми объектами данных, и операции с массивами, такие как сортировка или изменение порядка массива на обратный. Кроме того, язык содержит специальные операторы, которые объединяются с примитивными функциями для выполнения типов итерации и рекурсии. В результате сложные и расширенные преобразования набора данных могут быть выражены в виде цепочки подвыражений, при этом каждое звено выполняет сегмент вычисления и передает результаты следующему звену в цепочке.
Как и в APL, примитивные функции и операторы представлены одинарными или двойными символами; однако, в отличие от APL, K ограничивает себя набором символов ASCII (как и другой вариант APL, J ). Чтобы обеспечить это, набор примитивных функций для K меньше и сильно перегружен , причем каждый из символов ASCII представляет две или более отдельных функций или операций. В данном выражении фактическая ссылаемая функция определяется контекстом. В результате выражения K могут быть непрозрачными и сложными для анализа людьми. Например, в следующем искусственном выражении восклицательный знак !
относится к трем отдельным функциям:
2!!7!4
Если читать справа налево, то первым делом !
выполняется деление по модулю, которое выполняется над 7 и 4, в результате чего получается 3. Далее !
следует перечисление, в результате которого перечисляются целые числа, меньшие 3, в результате чего получается список 0 1 2. Заключительным этапом !
является поворот, при котором список справа поворачивается два раза влево, в результате чего получается окончательный результат 2 0 1.
Второе основное отличие K заключается в том, что функции являются объектами первого класса , концепция, заимствованная из Scheme . Функции первого класса могут использоваться в тех же контекстах, где может использоваться значение данных. Функции могут быть указаны как анонимные выражения и использоваться напрямую с другими выражениями. Выражения функций указываются в K с помощью фигурных скобок . Например, в следующем выражении квадратичное выражение определяется как функция и применяется к значениям 0 1 2 и 3:
{( 3 * х ^ 2 ) + ( 2 * х ) + 1 } '! 4
В языке K именованные функции — это просто функциональные выражения, сохраняемые в переменной таким же образом, как любое значение данных сохраняется в переменной.
а : 25 ж : {( х ^ 2 ) - 1 }
Функции могут передаваться в качестве аргумента другой функции или возвращаться как результат функции.
K — это интерпретируемый язык, где каждое выражение оценивается, а его результаты отображаются немедленно. Буквальные выражения, такие как строки, оцениваются сами по себе. Следовательно, Hello world -программа тривиальна:
"Привет, мир!"
Следующее выражение сортирует список строк по их длине:
х @>#:' х
Выражение вычисляется справа налево следующим образом:
Функцию для определения, является ли число простым, можно записать так:
{ &/ х !/: 2 _! х }
Функция вычисляется справа налево:
Если x не является простым числом, то одно из значений, возвращаемых операцией по модулю, будет равно 0 и, следовательно, минимальному значению списка. Если x является простым числом, то минимальным значением будет 1, поскольку x mod 2 равен 1 для любого простого числа, большего 2.
Функцию ниже можно использовать для вывода списка всех простых чисел от 1 до R с помощью:
2 _& { &/ x !/: 2 _! x } '! R
Выражение вычисляется справа налево.
K — основа для семейства финансовых продуктов. Kdb+ — это база данных на основе столбцов в памяти с большинством функций системы управления реляционными базами данных . База данных поддерживает SQL , SQL-92 и ksql — язык запросов с синтаксисом, похожим на SQL и разработанным для запросов на основе столбцов и анализа массивов.
Kdb+ доступен для нескольких операционных систем , включая Solaris , Linux , macOS и Windows (32- или 64-разрядную).