К (язык программирования)
Эта статья нуждается в дополнительных цитатах для проверки . ( август 2011 г. ) |
Парадигма | массив , функционал |
---|---|
Разработано | Артур Уитни |
Разработчик | Кх Системы |
Впервые появился | 1993 год |
Дисциплина набора текста | динамичный , сильный |
Веб-сайт | кх |
Под влиянием | |
А+ , 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 представляла собой базу данных, размещаемую в памяти , столбцово-ориентированную и включала ksql, язык запросов с синтаксисом, подобным SQL . С тех пор с использованием K и kdb+ было разработано несколько финансовых продуктов. kdb+/tick и kdb+/taq были разработаны в 2001 году. kdb+, 64-битная версия kdb+, была выпущена в 2003 году, а kdb+/tick и kdb+/taq были выпущены в 2004 году. kdb+ включал Q , язык, который объединил функции лежащий в основе язык K и ksql. [4]
Уитни выпустила производную от K под названием Shakti в 2018 году. [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*x^2)+(2*x)+1}'!4
В K именованные функции — это просто функциональные выражения, сохраняемые в переменной точно так же, как любое значение данных сохраняется в переменной.
a:25f:{(x^2)-1}
Функции могут передаваться в качестве аргумента другой функции или возвращаться как результат функции.
Примеры
[ редактировать ]K — это интерпретируемый язык, в котором оценивается каждое утверждение и немедленно отображаются его результаты. Литеральные выражения, такие как строки, вычисляются сами по себе. Следовательно, программа Hello world тривиальна:
"Hello world!"
Следующее выражение сортирует список строк по их длине:
x@>#:'x
Выражение вычисляется справа налево следующим образом:
- #:'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 является основой семейства финансовых продуктов. Kdb+ — это база данных на основе столбцов, хранящаяся в памяти и обладающая практически теми же функциями, что и система управления реляционными базами данных . База данных поддерживает SQL , SQL-92 и ksql — язык запросов с синтаксисом, похожим на SQL и предназначенный для запросов на основе столбцов и анализа массивов.
Kdb+ доступен для нескольких операционных систем , включая Solaris , Linux , macOS и Windows (32- или 64-разрядные версии).
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Кх Системс» .
- ^ Айверсон, Кеннет. «Нотация как инструмент мышления» . Архивировано из оригинала 20 сентября 2013 г. Проверено 23 февраля 2015 г.
- ^ «Биография Артура и интервью» .
- ^ Гарланд, Саймон (28 декабря 2004 г.), Q Language Widening the Appeal of Vectors , Vector UK, заархивировано из оригинала 1 января 2007 г.
- ^ «Шакти» .
Внешние ссылки
[ редактировать ]- Официальный сайт , Кх Системс
- Официальный сайт , КДБ+
- Обзор K (со ссылкой на справочную карту K)
- Деннис Шаша - K как язык прототипирования
- К Артура Уитни (2005)
- ОК REPL для клона K
- Kona - реализация K3 с открытым исходным кодом
- Семейство языков программирования APL
- Языки программирования массивов
- Языки программирования, ориентированные на данные
- Динамические языки программирования
- Языки функционального уровня
- Собственные системы управления базами данных
- Языки программирования
- Динамически типизированные языки программирования
- Языки программирования высокого уровня
- программное обеспечение 1993 года
- Языки программирования, созданные в 1993 году.