Articulo de referencia

K (lenguaje de programación)

K es un lenguaje de programación propietario para el procesamiento de matrices desarrollado por Arthur Whitney y comercializado por Kx Systems . El lenguaje sirve como base para...

K es un lenguaje de programación propietario para el procesamiento de matrices 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. [1] El lenguaje, desarrollado originalmente en 1993, es una variante de APL y contiene elementos de Scheme . Los defensores del lenguaje destacan su velocidad, facilidad para manejar matrices y 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 luego 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 computadoras mainframe IBM a una red de estaciones de trabajo Sun. 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 temporales. [3]

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 cuatro años siguientes, 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 subyacente K 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 que se destacan por su sintaxis concisa y expresiva. Tienen reglas de precedencia simples basadas en la evaluación de derecha a izquierda. Los lenguajes contienen un amplio 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, donde cada enlace realiza un segmento del cálculo y pasa los resultados al siguiente enlace de la cadena.

Al igual que 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 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 módulo que se realiza en 7 y 4 dando como resultado 3. La siguiente !es la enumeración y enumera los números enteros menores que 3, dando como resultado la lista 0 1 2. La final !es la rotación donde la lista de 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 utilizar en los mismos contextos en los que se puede utilizar un valor de datos. Las funciones se pueden especificar como expresiones anónimas y se pueden utilizar directamente con otras expresiones. Las expresiones de función se especifican en K 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 } ' ! 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 argumento a otra función o devolverse como resultado de una función.

Ejemplos

K es un lenguaje interpretado en el que se evalúa cada enunciado y se muestran sus resultados inmediatamente. Las expresiones literales, como las cadenas, se evalúan a sí mismas. En consecuencia, el programa Hello world es trivial:

"¡Hola Mundo!"

La siguiente expresión ordena una lista de cadenas por sus longitudes:

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. @ utiliza los valores enteros de 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 números enteros positivos menores que x.
  2. 2_ elimina los dos primeros elementos de la enumeración (0 y 1).
  3. x!/: realiza la división módulo entre el entero original y cada valor de la lista truncada.
  4. &/ encuentra el valor mínimo de la lista del resultado del módulo.

Si x no es primo, uno de los valores devueltos por la operación 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 números enteros menores que R.
  2. ' 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.
  3. & devuelve los índices de la lista donde el valor es 1.
  4. 2_ eliminar 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 basada en columnas con muchas de las mismas funciones de 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 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 bits o 64 bits).

Véase también

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

Referencias

  1. ^ "Sistemas Kx".
  2. ^ Iverson, Kenneth. "La notación como herramienta del pensamiento". Archivado desde el original el 20 de septiembre de 2013. Consultado el 23 de febrero de 2015 .
  3. ^ "Biografía y entrevista de Arthur".
  4. ^ Garland, Simon (28 de diciembre de 2004), Q Language Widening the Appeal of Vectors, Vector UK, archivado desde el original el 1 de enero de 2007
  5. ^ "Shakti".
  • Sitio web oficial de Kx Systems
  • Sitio web oficial de kdb+
  • Descripción general de K (con un enlace a la tarjeta de referencia de K)
  • Dennis Shasha - K como lenguaje de creación de prototipos
  • K de Arthur Whitney (2005)
  • oK REPL para un clon K
  • Kona, una implementación de K3 de código abierto
Retrieved from "https://en.wikipedia.org/w/index.php?title=K_(programming_language)&oldid=1240414610"