K (lenguaje de programación) - K (programming language)

K
Paradigma arsenal , funcional
Diseñada por Arthur Whitney
Desarrollador Sistemas Kx
Apareció por primera vez 1993 ; Hace 28 años ( 1993 )
Disciplina de mecanografía dinámico , fuerte
Sitio web kx .com
Influenciado por
A + , APL , esquema
Influenciado
Q

K es un lenguaje de programación de procesamiento de matrices patentado desarrollado por Arthur Whitney y comercializado por Kx Systems . El lenguaje sirve como base para kdb + , una base de datos en memoria basada en columnas y otros productos financieros relacionados. El lenguaje, desarrollado originalmente en 1993, es una variante de APL y contiene elementos de Scheme . Los defensores del lenguaje enfatizan su velocidad, facilidad para manejar matrices y sintaxis expresiva.

Historia

Antes de desarrollar K, Arthur Whitney había trabajado extensamente con APL, primero en IP Sharp Associates junto a Ken Iverson y Roger Hui , y luego en Morgan Stanley desarrollando aplicaciones financieras. En Morgan Stanley, Whitney ayudó a desarrollar A + , una variante de la APL, para facilitar la migración de aplicaciones de APL IBM ordenadores centrales a una red de Sun estaciones de trabajo . A + tenía un conjunto más pequeño de funciones primitivas y fue diseñado para la velocidad y para manejar grandes conjuntos de datos de series de tiempo.

En 1993, Whitney dejó Morgan Stanley y desarrolló la primera versión del lenguaje K. Al mismo tiempo, formó Kx Systems para comercializar el producto y firmó un contrato exclusivo con Union Bank of Switzerland (UBS). Durante los siguientes cuatro años, desarrolló varias aplicaciones financieras y comerciales utilizando K para UBS.

El contrato finalizó en 1997 cuando UBS se fusionó con Swiss Bank . En 1998, Kx Systems lanzó kdb +, una base de datos construida sobre K. kdb era una base de datos en memoria , orientada a columnas e incluía ksql, un lenguaje de consulta con una sintaxis similar a SQL . Desde entonces, se han desarrollado varios productos financieros con K y kdb +. kdb + / tick y kdb + / taq se desarrollaron en 2001. kdb +, una versión de 64 bits de kdb + se lanzó en 2003 y kdb + / tick y kdb + / taq se lanzaron en 2004. kdb + incluía Q , un lenguaje que fusionaba las funciones del lenguaje K subyacente y ksql.

Whitney lanzó un derivado de K llamado Shakti en 2018.

Visión general

K comparte características clave con APL. Ambos son lenguajes interpretados e interactivos que destacan por su sintaxis concisa y expresiva. Tienen reglas simples de precedencia basadas en la evaluación de derecha a izquierda. Los lenguajes contienen un rico conjunto de funciones primitivas diseñadas para procesar matrices. Estas funciones primitivas incluyen operaciones matemáticas que funcionan en matrices como objetos de datos completos y operaciones de matriz, como ordenar o invertir el orden de una matriz. Además, el lenguaje contiene operadores especiales que se combinan con funciones primitivas para realizar tipos de iteración y recursión. Como resultado, las transformaciones complejas y extendidas de un conjunto de datos se pueden expresar como una cadena de subexpresiones, con cada enlace realizando un segmento del cálculo y pasando los resultados al siguiente eslabón de la cadena.

Como APL, las funciones primitivas y los operadores están representados por caracteres simples o dobles; sin embargo, a diferencia de APL, K se limita al juego de caracteres ASCII (al igual que otra variante de APL, J ). Para permitir esto, el conjunto de funciones primitivas para K es más pequeño y está muy sobrecargado , y cada uno de los símbolos ASCII representa dos o más funciones u operaciones distintas. En una expresión dada, la función real a la que se hace referencia está determinada por el contexto. Como resultado, las expresiones K pueden ser opacas y difíciles de analizar para los humanos. Por ejemplo, en la siguiente expresión artificial, el signo de exclamación se ! refiere a tres funciones distintas:

2!!7!4

Leyendo de derecha a izquierda, la primera !es la división de módulo que se realiza en 7 y 4, lo que da como resultado 3. La siguiente !es la enumeración y enumera los números enteros menores que 3, lo que da como resultado la lista 0 1 2. La última !es la rotación donde la lista en el la derecha se gira dos veces hacia la izquierda produciendo el resultado final de 2 0 1.

La segunda distinción fundamental de K es que las funciones son objetos de primera clase , un concepto tomado de Scheme . Las funciones de primera clase se pueden usar en los mismos contextos donde se puede usar un valor de datos. Las funciones pueden especificarse como expresiones anónimas y usarse directamente con otras expresiones. Las expresiones de función se especifican en K utilizando corchetes . Por ejemplo, en la siguiente expresión una expresión cuadrática se define como una función y se aplica a los valores 0 1 2 y 3:

{(3*x^2)+(2*x)+1}'!4

En K, las funciones con nombre son simplemente expresiones de función almacenadas en una variable de la misma manera que cualquier valor de datos se almacena en una variable.

a:25
f:{(x^2)-1}

Las funciones pueden pasarse como un argumento a otra función o devolverse como resultado de una función.

Ejemplos de

K es un lenguaje interpretado donde cada declaración se evalúa y sus resultados se muestran inmediatamente. Las expresiones literales como las cadenas se evalúan a sí mismas. En consecuencia, el programa Hola mundo es trivial:

"Hello world!"

La siguiente expresión ordena una lista de cadenas por su longitud:

x@>#:'x

La expresión se evalúa de derecha a izquierda de la siguiente manera:

  1. #: 'x devuelve la longitud de cada palabra en la lista x.
  2. > devuelve los índices que ordenarían una lista de valores en orden descendente.
  3. @ usa los valores enteros a la derecha para indexar en la lista original de cadenas.

Una función para determinar si un número es primo se puede escribir como:

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

La función se evalúa de derecha a izquierda:

  1. ! x enumera los enteros positivos menores que x.
  2. 2_ elimina los dos primeros elementos de la enumeración (0 y 1).
  3. x! /: realiza una división de módulo entre el entero original y cada valor en la lista truncada.
  4. & / encuentre el valor mínimo de la lista de resultado de módulo.

Si x no es primo, entonces uno de los valores devueltos por la operación de módulo será 0 y, en consecuencia, el valor mínimo de la lista. Si x es primo, el valor mínimo será 1, porque x mod 2 es 1 para cualquier primo mayor que 2.

La siguiente función se puede utilizar para enumerar todos los números primos entre 1 y R con:

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

La expresión se evalúa de derecha a izquierda.

  1. ! R enumera los enteros menores que R.
  2. 'aplique cada valor de la enumeración a la función de número primo de la izquierda. Esto devolverá una lista de 0 y 1.
  3. & devuelve los índices de la lista donde el valor es 1.
  4. 2_ elimine los dos primeros elementos de la enumeración (0 y 1)

K productos financieros

K es la base de una familia de productos financieros. Kdb + es una base de datos en memoria basada en columnas con muchas de las mismas funciones de un sistema de administración de bases de datos relacionales . La base de datos admite SQL , SQL-92 y ksql, un lenguaje de consulta con una sintaxis similar a SQL y diseñado para consultas basadas en columnas y análisis de matrices.

Kdb + está disponible para varios sistemas operativos , incluidos Solaris , Linux , macOS y Windows (32 o 64 bits).

Ver también

  • J , otro lenguaje inspirado en APL
  • Q , el lenguaje de kdb + y una nueva versión fusionada de K y ksql.

Referencias

enlaces externos