Versión de lenguaje de programación Go 1.13

Presentado por lanzamiento del lenguaje de programación Ir a 1.13, que está siendo desarrollado por Google con la participación de la comunidad como una solución híbrida que combina el alto rendimiento de los lenguajes compilados con las ventajas de los lenguajes de scripting como la facilidad para escribir código, la velocidad de desarrollo y la protección contra errores. Código de proyecto distribuido por bajo la licencia BSD.

La sintaxis de Go se basa en elementos familiares del lenguaje C con algunos préstamos del lenguaje Python. El lenguaje es bastante conciso, pero el código es fácil de leer y comprender. El código Go se compila en ejecutables binarios independientes que se ejecutan de forma nativa sin utilizar una máquina virtual (los subsistemas de creación de perfiles, depuración y otros subsistemas de detección de problemas en tiempo de ejecución se integran como componentes de tiempo de ejecución), que le permite lograr un rendimiento comparable al de los programas C.

El proyecto se desarrolla inicialmente con miras a la programación multiproceso y el funcionamiento eficiente en sistemas multinúcleo, incluido el suministro de medios a nivel de operador para organizar la computación paralela y la interacción entre métodos ejecutados en paralelo. El lenguaje también proporciona protección integrada contra bloques de memoria sobreasignados y ofrece la posibilidad de utilizar un recolector de basura.

El principal innovacionesintroducido en la versión Go 1.13:

  • El paquete crypto/tls tiene soporte de protocolo habilitado de forma predeterminada TLS 1.3. Se agregó un nuevo paquete "crypto/ed25519" con soporte para firmas digitales Ed25519;
  • Se agregó soporte para nuevos prefijos literales numéricos para definir números binarios (por ejemplo, 0b101), octal (0o377), imaginario (2.71828i) y punto flotante hexadecimal (0x1p-1021), y la capacidad de usar el carácter "_" para separar visualmente los dígitos. en grandes cantidades (1_000_000);
  • Se eliminó la restricción de usar solo contadores sin firmar en operaciones de turnos, lo que evita conversiones innecesarias al tipo uint antes de usar los operadores “‹‹” y “››”;
  • Se agregó soporte para la plataforma Illumos (GOOS=illumos). Se ha asegurado la compatibilidad con la plataforma Android 10. Se han aumentado los requisitos para las versiones mínimas de FreeBSD (11.2) y macOS (10.11 “El Capitan”).
  • Desarrollo continuo del nuevo sistema de módulos, que puede utilizarse como alternativa a GOPATH. Contrariamente a los planes anunciados anteriormente en Go 1.13, este sistema no está habilitado de forma predeterminada y requiere activación a través de la variable GO111MODULE=on o el uso de un contexto en el que los módulos se aplican automáticamente. El nuevo sistema de módulos presenta soporte de versiones integrado, capacidades de entrega de paquetes y gestión de dependencias mejorada. Con los módulos, los desarrolladores ya no están atados a trabajar dentro de un árbol GOPATH, pueden definir explícitamente dependencias versionadas y crear compilaciones repetibles.

    A diferencia de versiones anteriores, la aplicación automática del nuevo sistema ahora funciona cuando un archivo go.mod está presente en el directorio de trabajo actual o en el directorio principal cuando se ejecuta el comando go, incluso cuando está en el directorio GOPATH/src. Se han agregado nuevas variables de entorno: GOPRIVATE, que define las rutas de los módulos de acceso público, y GOSUMDB, que especifica los parámetros de acceso a la base de datos de suma de comprobación para los módulos que no figuran en el archivo go.sum;

  • El comando "ir" de forma predeterminada carga los módulos y verifica su integridad utilizando el espejo del módulo y la base de datos de suma de verificación mantenida por Google (proxy.golang.org, sum.golang.org e index.golang.org);
  • Se ha descontinuado el soporte únicamente para paquetes binarios; la creación de un paquete en el modo “//go:binary-only-package” ahora genera un error;
  • Se agregó soporte para el sufijo "@patch" al comando "go get", lo que indica que el módulo debe actualizarse a la última versión de mantenimiento, pero sin cambiar la versión principal o secundaria actual;
  • Al recuperar módulos de sistemas de control de fuente, el comando "go" ahora realiza una verificación adicional en la cadena de versión, intentando hacer coincidir los números de pseudoversión con los metadatos del repositorio;
  • Soporte agregado inspección de errores (envoltura de errores) mediante la creación de envoltorios que permiten el uso de controladores de errores estándar. Por ejemplo, error "e" se puede solucionar alrededor del error "w" proporcionando un método Desenvolver, devolviendo "w". Ambos errores "e" y "w" están disponibles en el programa y las decisiones se toman en función del error "w", pero "e" proporciona contexto adicional a "w" o lo interpreta de manera diferente;
  • Se optimizó el rendimiento de los componentes en tiempo de ejecución (se observó un aumento de velocidad de hasta un 30%) y se implementó un retorno de memoria más agresivo al sistema operativo (anteriormente, la memoria se devolvía después de cinco o más minutos, pero ahora inmediatamente después de reducir el tamaño del montón).

Fuente: opennet.ru

Añadir un comentario