Vista previaAntril y Larva están en desarrollo activo

Crea software rápido,
a tu manera.

Antril es un lenguaje compilado con una sintaxis moderna. Larva lo convierte en ejecutables nativos, WebAssembly o bibliotecas portables, y cada proyecto elige cómo se gestiona su memoria.

curl -fsSL https://www.antril.org/install.sh | sh

Para Windows, Linux y macOS · Otras formas de instalar

People.ant
import System;

into namespace People
{
    public record class Person
    {
        public:
            str Name;
            i32 Age;
            new(str Name, i32 Age);
    }

    Main()
    {
        Person ana = new Person("Ana", 31);
        Person older = ana with { Age = 32 };
        Console.WriteLine(ana);
        Console.WriteLine(ana == new Person("Ana", 31));
        if (ana is Person(var name, > 30))
            Console.WriteLine(name + " is over 30");
    }
}
Terminal
larva run
Person { Name = Ana, Age = 31 }
true
Ana is over 30
Última versión de Larva
Pronto
Paquetes de Hive
0
Lenguajes en el registro
0
Temas del foro
0
Desarrolladores registrados
0

El lenguaje

Sintaxis moderna. Sin sorpresas en tiempo de ejecución.

Cada programa de abajo está completo, compila con la versión actual de Larva e imprime lo que ves. Elige una idea:

Shapes.ant
import System;

into namespace Shapes
{
    public interface IShape
    {
        Area() : f64;
        Describe() : str => "a shape of area " + Area();
    }

    public base class Shape : IShape
    {
        public:
            Area() : f64;
            virtual Name() : str => "shape";
    }

    public class Circle : Shape
    {
        f64 radius;

        public:
            new(f64 radius) { this.radius = radius; }
            override Area() : f64 => 3.14 * radius * radius;
            override Name() : str => "circle";
    }

    public final class Square : Shape
    {
        f64 side;

        public:
            new(f64 side) { this.side = side; }
            override Area() : f64 => side * side;
    }

    Main()
    {
        List<Shape> shapes = new List<Shape>();
        shapes.Add(new Circle(1));
        shapes.Add(new Square(2));
        loop (Shape s in shapes)
            Console.WriteLine(s.Name() + ": " + s.Area());

        IShape i = new Square(3);
        Console.WriteLine(i.Describe());
    }
}
Salida
larva run
circle: 3.14
shape: 4
a shape of area 9
Lee más en la documentación

La memoria a tu manera

Un lenguaje. Cuatro formas de gestionar la memoria.

Cada proyecto elige su recolector con una línea de su archivo .queen. El mismo código fuente compila en todos los modos, y las bibliotecas compiladas para modos distintos siguen funcionando juntas.

gc: default

Rastreo

Un recolector por rastreo encuentra los objetos inalcanzables y los libera. No tienes que pensar en nada.

gc: refcount

Conteo de referencias

Los objetos se liberan en cuanto desaparece su última referencia, y los destructores se ejecutan en ese momento.

gc: arena

Regiones

Todo lo que creó una region { } se libera junto cuando se cierra. Las fugas son errores de compilación.

gc: manual

Manual

Liberas cada objeto con delete, en código unsafe, cuando sabes lo que haces.

Program.ant
import System;

into namespace Mem
{
    public class Resource
    {
        str name;

        public:
            new(str name) { this.name = name; }
            destroy() { Console.WriteLine("close " + name); }
    }

    Main()
    {
        region
        {
            Resource a = new Resource("a");
            Resource b = new Resource("b");
            Console.WriteLine("leaving the region");
        }
        Console.WriteLine("end");
    }
}
Mem.queen
queen 1.0;

chunk PROJ:
   name: Mem,
   type: exe

chunk BUILD:
   gc: arena
Salida
larva run
leaving the region
close b
close a
end
  • Referencias &T y &mut T con un verificador de préstamos opcional
  • Destructores que se ejecutan cuando el objeto deja de existir
  • Búferes fijos y objetos que guardan sus arreglos en su interior
La memoria en el libro de Antril

Una cadena de herramientas, muchos destinos

De un solo código fuente a cada lugar donde corre tu código.

Larva compila a través de una forma intermedia, Larva HIR, al back end que elijas.

El proceso de compilación de Larva El código de Antril y de otros lenguajes compila a Larva HIR y luego a LLVM, al back end x64 propio de Larva, a WebAssembly o a la máquina virtual de Larva, que producen ejecutables, módulos de WebAssembly y bibliotecas de Larva. Antril (.ant) Otros lenguajes Larva HIR tipos · préstamos LLVM Larva x64 WebAssembly Larva VM .exe optimizado .exe de compilación rápida .wasm + .js bibliotecas .dll

Nativo, optimizado

LLVM con -O3: ejecutables nativos optimizados para tu máquina.

Nativo, compilación rápida

--backend x64: el back end propio de Larva compila más rápido mientras iteras.

WebAssembly

--target wasm o wasm-llvm: el mismo programa en el navegador.

Bibliotecas de Larva

larva lib genera una .dll que cualquier lenguaje sobre Larva puede usar.

Terminal
larva build -o hello.exe hello.ant
larva build --backend x64 -o hello.exe hello.ant
larva build --target wasm-llvm -o hello.js hello.ant
larva lib -o Geo.dll geo.ant

Bibliotecas nativas en minutos

Llama a C directamente. O deja que Larva escriba el binding.

Declara una función con [Import] y llámala. Para una biblioteca completa, larva bind lee sus exportaciones y un encabezado de C o una descripción breve, y escribe un binding tipado.

  • Encabezados de C a través del preprocesador, structs, uniones y diseños empaquetados
  • Perfiles de bindings escritos como código, para API grandes
  • Funciona con .dll, .so y .dylib
Terminal
larva bind kernel32.dll kernel32.bind --source Kernel32.ant
Kernel32Bindings.dll: Kernel32 with 4 function(s) of kernel32.dll
Kernel32.ant: Antril source
Bindings nativos
Native.ant
import System;
import System.Runtime.InteropServices;

into namespace Native
{
    [Import("kernel32.dll")]
    GetCurrentProcessId() : u32;

    [Import("kernel32.dll", "lstrlenW")]
    WideLength(String<u16> text) : i32;

    Main()
    {
        Console.WriteLine(GetCurrentProcessId() > 0);
        Console.WriteLine(WideLength(new String<u16>(Unicode.ToUtf16("hello"))));
    }
}

Un ecosistema de paquetes

Hive: paquetes firmados, a un comando de distancia.

Cada paquete tiene su hash y su autor puede firmarlo. larva hive add Author/Name agrega uno a tu proyecto.

Paquetes recientes

Aún no se ha publicado ningún paquete. El tuyo podría ser el primero.

Publica un paquete

Los más usados como dependencia

Cuando los paquetes empiecen a depender unos de otros, los más usados aparecerán aquí.

Usar paquetes

Hecho para editores

Un servidor de lenguaje que conoce todo tu proyecto.

Las extensiones de VS Code llevan el servidor de lenguaje de Larva a tu editor: el mismo compilador, mientras escribes.

  • Autocompletado con importaciones automáticas, e ir a la definición
  • Diagnósticos y verificación de préstamos en cada cambio
  • Vistas legibles y navegables de las bibliotecas compiladas
  • Archivos de proyecto .queen que se aplican al guardar

Lenguajes sobre Larva

Antril es el primero. No tiene por qué ser el único.

Larva compila cualquier lenguaje que tenga un paquete de lenguaje. Los paquetes los firman sus autores y el registro, y comparten la biblioteca estándar, los back ends y Hive.

De la comunidad

Lo que dice la gente

Estos espacios son provisionales hasta que lleguen las primeras citas de la comunidad. ¿Estás creando algo con Antril? Cuéntanos en el foro.

Provisional
Aquí aparecerá una cita de alguien que crea con Antril, Larva o Hive.
Miembro de la comunidad 1Su proyecto
Provisional
Aquí aparecerá una cita de alguien que crea con Antril, Larva o Hive.
Miembro de la comunidad 2Su proyecto
Provisional
Aquí aparecerá una cita de alguien que crea con Antril, Larva o Hive.
Miembro de la comunidad 3Su proyecto

Empieza a crear con Antril

Instala Larva, crea un proyecto y ejecútalo en menos de un minuto.

larva new Console-App Hello --lang antril
Esc