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:
- TypesScript (Apenas Bun)
- C++
- C
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)
obrigado! :)