Candid: un lenguaje común para interfaces de aplicaciones en la computadora de Internet de DFINITY The Internet Computer Review Enero de 2021

Mientras la Fundación DFINITY trabaja para restaurar Internet a sus raíces libres y abiertas mediante el lanzamiento de Internet Computer, la primera red blockchain de velocidad web del mundo con una capacidad computacional ilimitada, mejorar la experiencia del desarrollador y brindar más opciones es un enfoque constante. Internet Computer aloja botes de software, una evolución de los contratos inteligentes tradicionales que pueden escalar, que agrupan el código de bytes de WebAssembly con páginas de memoria en las que se ejecuta el código. Estos permiten a los desarrolladores crear aplicaciones, sistemas y servicios de Internet interoperables revolucionarios que son seguros e imparables, y hacen uso de funciones de blockchain como la tokenización, que se implementan directamente en Internet en lugar de en una infraestructura propietaria.

Para respaldar el crecimiento de un universo de software reinventado en una plataforma abierta donde los diferentes programas se pueden integrar directamente entre sí, y los servicios se pueden componer y extender fácilmente, nuestro equipo de idiomas desarrolló el lenguaje de descripción de interfaz Candid (IDL), que permite la colaboración construyendo el ecosistema informático de Internet para conectar su código sin problemas, incluso cuando está escrito en diferentes idiomas, que nos complace describir con más detalle hoy.

Candid es un IDL diseñado específicamente para la computadora de Internet, que proporciona un lenguaje común para las interfaces de aplicaciones para facilitar la comunicación entre servicios que están escritos en diferentes lenguajes de programación.

Uno de los beneficios clave de Candid es que es independiente del lenguaje, lo que permite la interoperabilidad entre servicios y interfaces que están escritas en diferentes lenguajes de programación, como Motoko, Rust y JavaScript, entre otros. Permite a los desarrolladores crear de forma segura y sin problemas servicios que dependen unos de otros sin preocuparse por las actualizaciones de la interfaz de los servicios externos.

A través de Candid, buscamos …

Proporcionar una descripción de la interfaz y los datos: Los desarrolladores que usan Candid tienen la capacidad de describir la interfaz pública de un servicio, generalmente en forma de un programa implementado como un recipiente. Como desarrollador, puede llamar a servicios externos que se ejecutan en la computadora de Internet como llamadas a funciones asincrónicas.Apoyar la evolución de la interfaz de una manera basada en principios: Candid apoya la evolución de las interfaces de servicio especificando con precisión los cambios que se pueden realizar sin romper los clientes existentes, lo que significa, por ejemplo, que puede agregar de forma segura nuevos parámetros opcionales a un servicio sin perder la compatibilidad para los clientes existentes.Admite funciones de computadora de Internet: Candid es particularmente adecuado para desarrollar aplicaciones para la computadora de Internet.

Candid se inspiró en parte en IDL y lenguajes de definición de datos (DDL) similares, como Protobuf, Thrift y JSON. Pero Candid ofrece una combinación única de funciones que no se encuentran en estas otras tecnologías:

Candid es un lenguaje de descripción de interfaz completo, no solo un lenguaje de descripción de datos. Las implementaciones de Candid pueden asignar un valor Candid directamente a los tipos y valores del lenguaje host. Candid es inherentemente un lenguaje de orden superior que permite que los argumentos de los mensajes incluyan referencias a otros servicios y métodos.Candid tiene soporte integrado para características específicas de la computadora de Internet, como la anotación de consulta.Candid define reglas sobre cómo los servicios y su interfaz se pueden actualizar de una manera sólida y compositiva, incluidos los usos de orden superior.

El propósito principal de Candid es conectar programas que están escritos en algún lenguaje host, por ejemplo, Motoko, Rust o JavaScript, con la computadora de Internet. En la mayoría de los casos, no tiene que tratar los datos de su programa como valores sinceros. En su lugar, trabaja con un lenguaje host como JavaScript utilizando valores de JavaScript familiares y luego confía en Candid para transportar de manera transparente esos valores a un recipiente escrito en Rust o Motoko. El recipiente recibe los valores y los trata como valores nativos de Rust o Motoko.

Hay algunos casos en los que es útil ver los valores Candid directamente en una forma legible por humanos, por ejemplo, al iniciar sesión, depurar o interactuar con un servicio en la línea de comandos. En estos escenarios, puede utilizar la presentación textual para valores sinceros.

Candid es un sistema fuertemente tipado con un conjunto de tipos que cubren canónicamente la mayoría de los usos (para ver una lista, consulte nuestra página SDK). La filosofía detrás de este conjunto de tipos es que son suficientes para describir la estructura de los datos para que la información pueda ser codificada, transmitida y decodificada, pero no intentan describir restricciones semánticas más allá de eso. Candid admite este conjunto de tipos para permitir un mapeo natural de tipos de datos basado en elecciones canónicas razonables que son adecuadas para cada idioma host, ya sea que esté escribiendo su código en Motoko, Rust, JavaScript o algún otro idioma.

Los tipos Candid se pueden usar para describir un servicio a través de un archivo de descripción de servicio Candid (archivo .did), que puede escribirse manualmente o generarse a partir de una implementación de servicio. Si escribe un recipiente en Motoko, por ejemplo, el compilador genera automáticamente una descripción sincera cuando compila el programa. En otros idiomas, como Rust, deberá escribir la descripción de la interfaz Candid manualmente. Con la ayuda de tipos, desarrollamos herramientas para generar automáticamente la IU y realizar pruebas aleatorias basadas en el archivo de descripción del servicio.

Candid también es útil para actualizaciones de servicios. Los servicios evolucionan con el tiempo; obtienen nuevos métodos y los métodos existentes devuelven más datos o esperan argumentos adicionales. Por lo general, los autores de servicios quieren hacer eso sin dañar a los clientes existentes. Candid ayuda a que los servicios evolucionen de forma segura mediante la definición de reglas de subtipificación precisas (¡formalizadas en Coq!) Que indican cuándo el nuevo tipo de servicio aún podrá comunicarse con todas las demás partes que utilizan la descripción de interfaz anterior.

¿Interesado en aprender más? Aquí hay algunos materiales relacionados con Candid para comenzar …