K es un lenguaje de programación propietario para el procesamiento de matrices , desarrollado por Arthur Whitney y comercializado por KX Systems . Este lenguaje sirve de base para kdb+ , una base de datos en memoria basada en columnas , y otros productos financieros relacionados. [ 1 ] El lenguaje, desarrollado originalmente en 1993, es una variante de APL y contiene elementos de Scheme . Sus defensores destacan su velocidad, su facilidad para manejar matrices y su sintaxis expresiva. [ 2 ]
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 posteriormente en Morgan Stanley desarrollando aplicaciones financieras. En Morgan Stanley, Whitney ayudó a desarrollar A+ , una variante de APL, para facilitar la migración de aplicaciones APL desde ordenadores centrales IBM a una red de estaciones de trabajo Sun. A+ tenía un conjunto más reducido de funciones primitivas y fue diseñado para la velocidad y para manejar grandes conjuntos de datos de series temporales. [ 3 ]
En 1993, Whitney dejó Morgan Stanley y desarrolló la primera versión del lenguaje K. Al mismo tiempo, fundó KX Systems para comercializar el producto y firmó un contrato exclusivo con Union Bank of Switzerland (UBS). Durante los siguientes cuatro años, desarrolló diversas aplicaciones financieras y de negociación 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. [ 4 ]
Whitney lanzó un derivado de K llamado Shakti en 2018. [ 5 ]
Descripción general
K comparte características clave con APL . Ambos son lenguajes interpretados e interactivos , conocidos por su sintaxis concisa y expresiva. Poseen reglas de precedencia sencillas basadas en la evaluación de derecha a izquierda. Los lenguajes contienen un amplio conjunto de funciones primitivas diseñadas para el procesamiento de matrices. Estas funciones primitivas incluyen operaciones matemáticas que actúan sobre las matrices como objetos de datos completos, así como operaciones con matrices, como ordenar o invertir su orden. Además, el lenguaje contiene operadores especiales que se combinan con las funciones primitivas para realizar iteraciones y recursiones. Por lo tanto, las transformaciones complejas y extensas de un conjunto de datos pueden expresarse como una cadena de subexpresiones, donde cada enlace realiza un segmento del cálculo y pasa los resultados al siguiente enlace de la cadena.
Al igual que en APL, las funciones y operadores primitivos se representan mediante caracteres simples o dobles; sin embargo, a diferencia de APL, K se limita al conjunto de caracteres ASCII (al igual que otra variante de APL, J ). Para ello, el conjunto de funciones primitivas de K es más pequeño y está muy sobrecargado , donde cada símbolo ASCII representa dos o más funciones u operaciones distintas. En una expresión dada, la función a la que se hace referencia viene determinada por el contexto. Por lo tanto, las expresiones en 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 modular que se realiza entre 7 y 4, dando como resultado 3. La siguiente !es la enumeración, que muestra los números enteros menores que 3, dando como resultado la lista 0 1 2. La última !es la rotación, donde la lista de la derecha se rota dos veces hacia la izquierda, produciendo el resultado final de 2 0 1.
La segunda característica fundamental de K es que las funciones son objetos de primera clase , un concepto tomado de Scheme . Las funciones de primera clase pueden utilizarse en los mismos contextos en los que se utiliza un valor de datos. Las funciones pueden especificarse como expresiones anónimas y utilizarse directamente con otras expresiones. En K, las expresiones de función se especifican mediante llaves . 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 } '! 4En K, las funciones con nombre son simplemente expresiones de función almacenadas en una variable de la misma manera que se almacena cualquier valor de datos en una variable.
a : 25 f : {( x ^ 2 ) - 1 }Las funciones pueden pasarse como argumento a otra función o devolverse como resultado de una función.
Ejemplos
K es un lenguaje interpretado donde cada instrucción se evalúa y sus resultados se muestran inmediatamente. Las expresiones literales, como las cadenas de caracteres, se evalúan a sí mismas. Por lo tanto, el programa "¡Hola, mundo!" es trivial:
"¡Hola Mundo!"
La siguiente expresión ordena una lista de cadenas según su longitud:
x @>#:' xLa expresión se evalúa de derecha a izquierda de la siguiente manera:
- #:'x devuelve la longitud de cada palabra en la lista x.
- > Devuelve los índices que ordenarían una lista de valores en orden descendente.
- @ utiliza los valores enteros de la derecha para acceder a 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:
- !x enumera los enteros positivos menores que x.
- 2_ elimina los dos primeros elementos de la enumeración (0 y 1).
- x!/: realiza una división modular entre el entero original y cada valor de la lista truncada.
- &/ encuentra el valor mínimo de la lista de resultados del módulo.
Si x no es primo, uno de los valores devueltos por la operación módulo será 0 y, por lo tanto, el valor mínimo de la lista. Si x es primo, el valor mínimo será 1, ya que x mod 2 es 1 para cualquier primo mayor que 2.
La siguiente función se puede utilizar para listar todos los números primos entre 1 y R con:
2 _& { &/ x !/: 2 _! x } '! RLa expresión se evalúa de derecha a izquierda.
- !R enumera los enteros menores que R.
- ' Aplica 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.
- & devuelve los índices de la lista donde el valor es 1.
- 2_ elimina los dos primeros elementos de la enumeración (0 y 1)
Productos financieros K
K es la base de una familia de productos financieros. Kdb+ es una base de datos en memoria, orientada a columnas, con muchas de las mismas funciones que un sistema de gestió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, diseñado para consultas orientadas a columnas y análisis de matrices.
Kdb+ está disponible para varios sistemas operativos , incluidos Solaris , Linux , macOS y Windows (de 32 o 64 bits).
Véase también
- J , otro lenguaje inspirado en APL
- Q , el lenguaje de kdb+ y una nueva versión combinada de K y ksql.
Referencias
- ^ "Sistemas KX" .
- ^ Iverson, Kenneth . "La notación como herramienta de pensamiento" . Archivado del original el 20 de septiembre de 2013. Consultado el 23 de febrero de 2015 .
- ^ "Biografía y entrevista de Arthur" .
- ^ Garland, Simon (28 de diciembre de 2004), Q Language Widening the Appeal of Vectors , Vector UK, archivado del original el 1 de enero de 2007.
- ^ "Shakti" .
Enlaces externos
- Sitio web oficial de KX Systems
- Sitio web oficial , kdb+
- Descripción general de K (con un enlace a la ficha de referencia de K)
- Dennis Shasha - K como lenguaje de prototipado
- K por Arthur Whitney (2005)
- oK REPL para un clon K
- Kona, una implementación de K3 de código abierto
- Familia de lenguajes de programación APL
- lenguajes de programación de matrices
- Lenguajes de programación centrados en datos
- Lenguajes de programación dinámicos
- Lenguajes a nivel de función
- Sistemas de gestión de bases de datos propietarios
- Lenguajes de programación
- Lenguajes de programación de tipado dinámico
- Lenguajes de programación de alto nivel
- Software de 1993
- Lenguajes de programación creados en 1993