1

Pitch: Eva, a melhor linguagem de configuração

Olá, meu nome é Lucas, eu sou o desenvolvedor de alguns projetos que já passaram por aqui anteriormente, como Carla, Morgana e até Runa. Sendo, respectivamente: Uma linguagem de programação, uma de IR, e um interpretador mínimo de Lua. Todos os projetos são parte de um ecossistema. Recentemente, um novo membro foi adicionado a tal ecossistema. Sendo: Eva.

Eva é usado por Carla e Morgana para armazenar dados do seu projeto, mas, também é uma lib comum. Com suporte oficial a:

aceitamos contribuições de wrappers da .dll/.so do eva para novas linguagens

Principal vantagem

Eva armazena os dados do arquivo enquanto a instância da classe "eva", da respectiva linguagem está viva. Assim como qualquer outra, porém, seu driver é desenvolvido em Rust, com máxima eficiência de memória e uma sintaxe simples para leitura mais rápida e com menos Tokens.

Mas, não se deixe por enganar, não estou prometendo apenas performance. Também oferecemos alguns algorítimos JÁ IMPLEMENTADOS nativamente no parser. Por exemplo:

  • Imagine que você está criando uma rede social. Você tem configurações padrões que vem pré-definidas no App, e configurações que o usuário fez. Dito isso, as do usuário devem sobrescrever as de menor prioridade (padrões), mas, não se deve perder as padrões. Para isso, implementamos funções como merge/deepmerge.
@data
default: {
    theme: "Dark"
    volume: 0.5
} 

user: { volume: 0.32 }
config: deepmerge(ref(default), ref(user))

Temos uma documentação detalhando melhor cada função. Clique aqui para ver mais!

Uso

Sua sintaxe é mais simples que Yaml, didática como TOML e declarativa como JSON. Veja aqui um exemplo:

@project
name: "project name"
description: "that is an awesome project"
version: "3.20"

@author
name: "Jane Doe"
contact: {
    phone: "00 999 000000"
    email: "xxx@xxx.com"
}

Para coletar, por exemplo, o campo name do projeto, é bem simples também. Veja o exemplo em TypeScript.

import { Eva, EvaMap, EvaList } from "eva-dcl";
import { join } from "path";

const config = new Eva(join(__dirname, "config.eva"));
const project_name = await config.get<string>("project", "name");
console.log(`Running ${project_name} project`);

ah, claro que a simplicidade não pode se manter apenas no TypeScript. Veja em C++:

#include "eva.hpp"

int main() {
    eva parser("config.eva");

    auto [exist, project_name] = parser.get<std::string>("project", "name");
    if(! exist ) return 1;
    std::cout << "Running " << project_name << " project" << std::endl;
}

Download

Você pode fazer download da versão C/CPP baixando os headers contidos em include/, e, claro, é necessário fazer download do .so/.dll. Para isso, vá em ACTIONS e baixe a versão do seu sistema operacional/arquitetura.

Para a versão TypesScript (Bun)
use:

$ bun install eva-dcl

Adicional:

Por causa de um bug do app Authy, eu perdi acesso a minha conta do Github. Então, criei esta nova. Por favor, dêem estrelas nos projetos fixados! (E no EVA) <3

(já contatei o suporte, não há nada que possamos fazer)

https://github.com/devlucasfs

obrigado! :)

Carregando publicação patrocinada...