К (язык программирования)

Язык программирования
К
Парадигмамассив , функциональный
РазработаноАртур Уитни
РазработчикСистемы Кх
Впервые появился1993 ; 32 года назад (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 -программа тривиальна:

"Привет, мир!"

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

х @>#:' х

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

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

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

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

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

  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.

Ссылки

  1. ^ «Kx Systems».
  2. ^ Айверсон, Кеннет. «Нотация как инструмент мышления». Архивировано из оригинала 20-09-2013 . Получено 23-02-2015 .
  3. ^ "биография и интервью Артура".
  4. Гарланд, Саймон (28 декабря 2004 г.), Q Language Widening the Appeal of Vectors, Vector UK, архивировано из оригинала 1 января 2007 г.
  5. ^ "Шакти".
  • Официальный сайт , Kx Systems
  • Официальный сайт , kdb+
  • Обзор K (со ссылкой на справочную карту K)
  • Деннис Шаша — K как язык прототипирования
  • K Артура Уитни (2005)
  • OK REPL для клона K
  • Kona — реализация K3 с открытым исходным кодом
Retrieved from "https://en.wikipedia.org/w/index.php?title=K_(programming_language)&oldid=1255522394"