V lenguaje de programación de código abierto

Traducido en la categoría de compilador abierto para idioma V. V es un lenguaje compilado por máquina de tipo estático que se centra en hacer que el desarrollo sea más fácil de mantener y muy rápido de compilar. Código compilador, bibliotecas y herramientas relacionadas. está abierto bajo la licencia del MIT.

La sintaxis de V es muy similar a la de Go, y toma prestadas algunas construcciones de Oberon, Rust y Swift. El lenguaje está simplificado al máximo y, según el desarrollador, 30 minutos de estudio son suficientes para aprender lo básico. documentación. Al mismo tiempo, el lenguaje sigue siendo bastante potente y puede utilizarse para realizar las mismas tareas que cuando se utilizan otros lenguajes de programación (por ejemplo, hay bibliotecas disponibles para gráficos 2D/3D, creación de GUI y aplicaciones web).

La creación de un nuevo lenguaje fue motivada por el deseo de lograr una combinación de la simplicidad de sintaxis, velocidad de compilación, facilidad de paralelización de operaciones, portabilidad y mantenibilidad del código del lenguaje Go con el rendimiento de C/C++, la seguridad de Rust y la generación de código de máquina en la etapa de compilación de Zig. También quería obtener un compilador compacto y rápido que pudiera funcionar sin dependencias externas, eliminar el alcance global (variables globales) y brindar la capacidad de recargar el código "en caliente".

En comparación con C++, el nuevo lenguaje es significativamente más simple, proporciona una velocidad de compilación más rápida (hasta 400 veces), practica técnicas de programación seguras, está libre de problemas con comportamientos indefinidos y proporciona herramientas integradas para paralelizar operaciones. Comparado con Python, V es más rápido, más simple, más seguro y más fácil de mantener. En comparación con Go, V no tiene variables globales ni valores nulos, todos los valores de las variables siempre deben estar definidos, todos los objetos son inmutables de forma predeterminada, solo se admite un tipo de asignación ("a: = 0"), un formato significativamente más compacto. tiempo de ejecución y el tamaño de los archivos ejecutables resultantes, la presencia de portabilidad directa desde C, la ausencia de un recolector de basura, una serialización más rápida, la capacidad de interpolar cadenas (“println('$foo: $bar.baz')”).

fn principal() {
áreas := ['juego', 'web', 'herramientas', 'ciencia', 'sistemas', 'GUI', 'móvil'] a := 10
si es verdad {
un := 20
}
para área en áreas {
println('¡Hola, $desarrolladores del área!')
}
}

Características del proyecto:

  • Compilador compacto y rápido, que junto con la biblioteca estándar ocupa unos 400 KB. La alta velocidad de compilación se logra mediante la generación directa de código de máquina y la modularidad. La velocidad de compilación es de aproximadamente 1.2 millones de líneas de código por segundo en un núcleo de CPU (se observa que durante la operación V puede usar C, luego la velocidad cae a 100 mil líneas por segundo). El autoensamblaje del compilador, que también está escrito en lenguaje V (también existe una versión de referencia en Go), tarda aproximadamente 0.4 segundos. Para finales de año, se espera que se complete el trabajo en optimizaciones adicionales, lo que reducirá el tiempo de compilación del compilador a 0.15 segundos. A juzgar por las pruebas realizadas por el desarrollador, el autoensamblaje de Go requiere 512 MB de espacio en disco y se ejecuta en un minuto y medio, Rust requiere 30 GB y 45 minutos, GCC - 8 GB y 50 minutos, Clang - 90 GB y 25 minutos,
    Swift: 70 GB y 90 minutos;

  • Los programas se compilan en archivos ejecutables sin dependencias externas. El tamaño del archivo ejecutable de un servidor http simple después del ensamblaje es de solo 65 KB;
  • El rendimiento de las aplicaciones compiladas está al nivel de ensamblajes de programas en C;
  • La capacidad de interactuar perfectamente con el código C, sin gastos generales adicionales. Las funciones en lenguaje C se pueden llamar desde código en lenguaje V, y viceversa, el código en lenguaje V se puede llamar en cualquier lenguaje compatible con C;
  • Soporte para traducir proyectos C/C++ a una representación en el lenguaje V. Se utiliza un analizador de Clang para la traducción. Aún no se admiten todas las funciones del estándar C, pero las capacidades actuales del traductor ya son suficientes para traduccion en el idioma del juego V DOOM. El traductor de C++ se encuentra todavía en una etapa temprana de desarrollo;
  • Soporte de serialización incorporado, sin estar vinculado al tiempo de ejecución;
  • Minimizar las operaciones de asignación de memoria;
  • Garantizar la seguridad: sin NULL, variables globales, valores indefinidos y redefinición de variables. Comprobación de desbordamiento del búfer incorporada. Soporte para funciones genéricas (Generic). Objetos y estructuras que no se pueden cambiar de forma predeterminada;
  • Posibilidad de recarga de código "en caliente" (que refleja cambios en el código sobre la marcha sin recompilación);
  • Herramientas para garantizar el subproceso múltiple. Al igual que en el lenguaje Go, se utiliza una construcción como "run foo()" para iniciar un nuevo hilo de ejecución (similar a "go foo()"). En el futuro, está previsto admitir gorutinas y un programador de subprocesos;
  • Soporte para sistemas operativos Windows, macOS, Linux, *BSD. Está previsto añadir soporte para Android e iOS para finales de año;
  • Gestión de memoria en tiempo de compilación (como en Rust), sin utilizar un recolector de basura;
  • Disponibilidad de un conjunto de herramientas multiplataforma para la producción de gráficos, utilizando GDI+/Cocoa y OpenGL para la renderización (está prevista la compatibilidad con las API DirectX, Vulkan y Metal). Existen herramientas para trabajar con objetos 3D, animación esquelética y control de cámara;
  • Disponibilidad de una biblioteca para generar interfaces gráficas con elementos de diseño nativos de cada SO. Windows usa WinAPI/GDI+, macOS usa Cocoa y Linux usa su propio conjunto de widgets. La biblioteca ya se utiliza en desarrollo. Volt — cliente para Slack, Skype, Gmail, Twitter y Facebook;

    El plan es crear una aplicación de diseño de interfaz similar a Delphi, proporcionar una API declarativa similar a SwiftUI y React Native, y brindar soporte para la creación de aplicaciones móviles para iOS y Android;

    V lenguaje de programación de código abierto

  • Disponibilidad de un marco web integrado, que se utiliza para crear un sitio web, un foro y un blog para los desarrolladores del proyecto. Se admite la precompilación de plantillas HTML, sin procesarlas en cada solicitud;
  • Soporte de compilación cruzada. Para crear el archivo ejecutable para Windows, simplemente ejecute “v -os windows” y para Linux, “v -os linux” (se espera compatibilidad con compilación cruzada para macOS más adelante). La compilación cruzada también funciona para aplicaciones gráficas;
  • Administrador de dependencias integrado, administrador de paquetes y herramientas de compilación. Para compilar el programa, simplemente ejecute “v.”, sin utilizar make ni utilidades externas. Para instalar bibliotecas adicionales, simplemente ejecute, por ejemplo, “v get sqlite”;
  • Disponibilidad de complementos para desarrollo en lenguaje V en editores Código VS и Empuje.

Desarrollo percibido comunidad con escepticismo, ya que el código publicado mostró que aún no se han implementado todas las capacidades declaradas y que se requiere una gran cantidad de trabajo para implementar todos los planes.
Además, inicialmente el repositorio contaba al corriente Código roto que tiene problemas de ensamblaje y ejecución. Se supone que el autor aún no ha llegado a la etapa en la que empieza a notar ley de pareto, según el cual el 20% del esfuerzo produce el 80% del resultado, y el 80% restante del esfuerzo produce sólo el 20% del resultado.

Mientras tanto, al rastreador de errores del Proyecto V se le han eliminado alrededor de 10 publicaciones de demostración El código de baja calidad, por ejemplo, indica el uso de inserciones C y el uso en la biblioteca de funciones para eliminar el directorio del comando rm mediante la llamada os.system("rm -rf $path"). Autor del proyecto dijoque solo borró los mensajes, publicado Troll (con cambios que confirman la validez de la crítica, se quedó в editar historial).

Fuente: opennet.ru

Añadir un comentario