K (язык программирования) - K (programming language)

K
Парадигма массив , функционал
Разработано Артур Уитни
Разработчик Kx Systems
Впервые появился 1993 ; 28 лет назад ( 1993 )
Печатная дисциплина динамичный , сильный
Интернет сайт kx .com
Под влиянием
A + , APL , Схема
Под влиянием
Q

K - это проприетарный язык программирования обработки массивов, разработанный Артуром Уитни и коммерциализированный Kx Systems . Язык служит основой для kdb + , базы данных на основе столбцов в оперативной памяти и других связанных финансовых продуктов. Язык, первоначально разработанный в 1993 году, представляет собой вариант APL и содержит элементы Scheme . Сторонники языка подчеркивают его скорость, удобство работы с массивами и выразительный синтаксис.

История

До разработки K Артур Уитни много работал с APL, сначала в IP Sharp Associates вместе с Кеном Айверсоном и Роджером Хи , а затем в Morgan Stanley, разрабатывая финансовые приложения. В Morgan Stanley, Уитни помогли разработать A + , вариант APL, чтобы облегчить миграцию APL приложений от IBM мейнфреймов к сети Sun рабочих станций . A + имел меньший набор примитивных функций и был разработан для скорости и обработки больших наборов данных временных рядов.

В 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.

Уитни выпустила производную от К. под названием Шакти в 2018 году.

Обзор

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 тривиальна:

"Hello world!"

Следующее выражение сортирует список строк по их длине:

x@>#:'x

Выражение оценивается справа налево следующим образом:

  1. #: 'x возвращает длину каждого слова в списке x.
  2. > возвращает индексы, которые сортировали бы список значений в порядке убывания.
  3. @ использует целые числа справа для индексации исходного списка строк.

Функцию, определяющую, является ли число простым, можно записать как:

{&/x!/:2_!x}

Функция оценивается справа налево:

  1. ! x перечисляет натуральные числа меньше x.
  2. 2_ удаляет первые два элемента перечисления (0 и 1).
  3. x! /: выполняет деление по модулю между исходным целым числом и каждым значением в усеченном списке.
  4. & / найти минимальное значение списка результата по модулю.

Если x не является простым, тогда одно из значений, возвращаемых операцией по модулю, будет 0 и, следовательно, минимальное значение списка. Если x простое, то минимальное значение будет 1, потому что x mod 2 равен 1 для любого простого числа больше 2.

Приведенную ниже функцию можно использовать для перечисления всех простых чисел от 1 до R с помощью:

2_&{&/x!/:2_!x}'!R

Выражение оценивается справа налево.

  1. ! R перечислить целые числа меньше R.
  2. 'применить каждое значение перечисления к функции простых чисел слева. Это вернет список из 0 и 1.
  3. & вернуть индексы списка, где значение равно 1.
  4. 2_ отбросить первые два элемента перечисления (0 и 1)

K финансовых продуктов

K - это основа семейства финансовых продуктов. Kdb + - это база данных на основе столбцов в оперативной памяти, которая во многом схожа с функциями системы управления реляционными базами данных . База данных поддерживает SQL , SQL-92 и ksql, язык запросов с синтаксисом, подобным SQL и предназначенный для запросов на основе столбцов и анализа массивов.

Kdb + доступен для нескольких операционных систем , включая Solaris , Linux , macOS и Windows (32- или 64-разрядные).

Смотрите также

  • J , еще один язык, вдохновленный APL
  • Q , язык kdb + и новая объединенная версия K и ksql.

использованная литература

внешние ссылки