Versión de lenguaje de programación Go 1.14

Presentado por lanzamiento del lenguaje de programación Ir a 1.14, 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.14:

  • El nuevo sistema de módulos en el comando "go" se declara listo para uso general, está habilitado de forma predeterminada y se recomienda para la gestión de dependencias en lugar de GOPATH. 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ñadido por soporte para incrustar interfaces con un conjunto de métodos superpuestos. Los métodos de una interfaz integrada ahora pueden tener los mismos nombres y firmas que los métodos de las interfaces existentes. Los métodos declarados explícitamente siguen siendo únicos como antes.
  • Se ha mejorado el rendimiento de la expresión "diferir", haciéndola casi tan rápida como llamar directamente a una función diferida, lo que permite la ejecución de funciones diferidas en código sensible al rendimiento.
  • Se proporciona preferencia asincrónica de corrutinas (gorrutinas): los bucles que no contienen llamadas a funciones ahora pueden conducir potencialmente a un punto muerto del programador o retrasar el inicio de la recolección de basura.
  • Se ha mejorado la eficiencia del sistema de asignación de páginas de memoria y ahora hay significativamente menos contiendas de bloqueo en configuraciones con valores GOMAXPROCS grandes. El resultado es una latencia reducida y un mayor rendimiento, al mismo tiempo que se distribuyen de forma intensiva grandes bloques de memoria.
  • Se ha optimizado el bloqueo y se ha reducido el número de cambios de contexto cuando se ejecutan temporizadores internos utilizados en las funciones time.After, time.Tick, net.Conn.SetDeadline.
  • En el comando go, el indicador "-mod=vendor" está habilitado de forma predeterminada si hay un directorio de proveedores en la raíz, destinado a entregar dependencias externas vinculadas a un proveedor específico. Se agregó un indicador "-mod=mod" separado para cargar módulos desde el caché del módulo en lugar del directorio "proveedor". Si el archivo go.mod es de solo lectura, el indicador "-mod=readonly" está configurado de forma predeterminada si no hay un directorio superior de "proveedor". Se agregó el indicador "-modfile=file" para especificar un archivo go.mod alternativo en lugar del que está en el directorio raíz del módulo.
  • Se agregó la variable de entorno GOINSECURE. Cuando se configura, el comando go no requiere el uso de HTTPS y omite la verificación de certificados al cargar módulos directamente.
  • El compilador ha agregado el indicador “-d=checkptr”, habilitado de forma predeterminada, para verificar que el código cumpla con las reglas para el uso seguro de unsafe.Pointer.
  • Un nuevo paquete está incluido en la entrega. hash/maphash con funciones hash no criptográficas para crear tablas hash para secuencias de bytes o cadenas arbitrarias.
  • Se agregó soporte experimental para la plataforma RISC-V de 64 bits en Linux.
  • Se agregó soporte para FreeBSD en sistemas ARM de 64 bits.

Fuente: opennet.ru

Añadir un comentario