na categoria de compiladores abertos V é uma linguagem tipada estaticamente e compilada nativamente, focada em simplificar a manutenção do desenvolvimento e garantir velocidades de compilação muito altas. O compilador, as bibliotecas e as ferramentas de suporte estão incluídos. sob a licença do MIT.
A sintaxe de V é bastante similar à de Go, incorporando algumas construções de Oberon, Rust e Swift. A linguagem é extremamente simplificada e, segundo o desenvolvedor, 30 minutos são suficientes para aprender o básico. Ao mesmo tempo, a linguagem continua bastante poderosa e pode ser usada para realizar as mesmas tarefas que outras linguagens de programação (por exemplo, existem bibliotecas disponíveis para gráficos 2D/3D, criação de interfaces gráficas e aplicações web).
A criação da nova linguagem foi motivada pelo desejo de combinar a simplicidade inerente da sintaxe do Go, a velocidade de compilação, a facilidade de paralelização, a portabilidade e a facilidade de manutenção do código com o desempenho do C/C++, a segurança do Rust e a geração de código de máquina na fase de compilação do Zig. Também queríamos um compilador compacto e rápido, capaz de funcionar sem dependências externas, eliminando o escopo global (variáveis globais) e permitindo a recarga dinâmica de código.
Comparada ao C++, a nova linguagem é significativamente mais simples, oferece compilação mais rápida (até 400 vezes), utiliza técnicas de programação seguras, está livre de problemas de comportamento indefinido e fornece ferramentas integradas para paralelização de operações. Comparada ao Python, V é mais rápida, mais simples, mais segura e mais fácil de manter. Comparada ao Go, V não possui variáveis globais, nem valores nulos, todos os valores das variáveis devem sempre ser definidos, todos os objetos são imutáveis por padrão, apenas um tipo de atribuição é suportado ("a := 0"), um tempo de execução e tamanho dos arquivos executáveis resultantes significativamente menores, portabilidade direta do C, ausência de coletor de lixo, serialização mais rápida e a capacidade de interpolar strings ("println('$foo: $bar.baz')").
fn principal() {
áreas := ['jogo', 'web', 'ferramentas', 'ciência', 'sistemas', 'GUI', 'móvel'] a := 10
se verdadeiro {
uma:= 20
}
para área em áreas {
println('Olá, desenvolvedores da $area!')
}
}
Características do projeto:
- Um compilador compacto e rápido que, juntamente com a biblioteca padrão, ocupa aproximadamente 400 KB. A alta velocidade de compilação é alcançada por meio da geração direta de código de máquina e modularidade. A velocidade de compilação é de aproximadamente 1.2 milhão de linhas de código por segundo em um único núcleo de CPU (vale ressaltar que o V pode usar C durante a operação, caso em que a velocidade cai para 100 mil linhas por segundo). A autocompilação do compilador, também escrito em V (uma versão de referência em Go também está disponível), leva aproximadamente 0.4 segundos. Até o final do ano, espera-se que o trabalho em otimizações adicionais seja concluído, o que reduzirá o tempo de compilação do compilador para 0.15 segundos. De acordo com os testes do desenvolvedor, a autocompilação em Go requer 512 MB de espaço em disco e é concluída em 1,5 minutos; em Rust, requer 30 GB e 45 minutos; em GCC, 8 GB e 50 minutos; e em Clang, 90 GB e 25 minutos.
Swift - 70 GB e 90 minutos; - Os programas são compilados em arquivos executáveis sem dependências externas. O tamanho do arquivo executável de um servidor HTTP simples, após a compilação, é de apenas 65 KB;
- O desempenho de aplicativos compilados está no mesmo nível de montagens de programas em C;
- Interoperabilidade perfeita com código C, sem qualquer sobrecarga adicional. O código em linguagem V pode chamar funções C e vice-versa; o código em linguagem V pode ser chamado por qualquer linguagem compatível com C;
- Suporte para tradução de projetos C/C++ para representação em linguagem C. O analisador sintático do Clang é usado para a tradução. Nem todos os recursos do padrão C são suportados ainda, mas os recursos atuais do tradutor são suficientes para para a linguagem V do jogo DOOM. O tradutor de C++ ainda está em fase inicial de desenvolvimento;
- Suporte integrado para serialização, sem qualquer dependência de tempo de execução;
- Minimizar as operações de alocação de memória;
- Recursos de segurança: sem valores NULL, sem variáveis globais, sem valores indefinidos e sem reatribuição de variáveis. Verificação de estouro de buffer integrada. Suporte a funções genéricas. Objetos e estruturas imutáveis por padrão;
- Possibilidade de recarregamento de código "a quente" (refletindo alterações no código em tempo real, sem recompilação);
- Suporte a multithreading. Assim como em Go, uma construção como "run foo()" (similar a "go foo()") é usada para iniciar uma nova thread de execução. Suporte para goroutines e um agendador de threads está planejado para o futuro;
- O suporte para os sistemas operacionais Windows, macOS, Linux e *BSD está disponível. O suporte para Android e iOS está previsto para o final do ano.
- Gerenciamento de memória em tempo de compilação (como em Rust), sem usar um coletor de lixo;
- Um kit de ferramentas gráficas multiplataforma que utiliza GDI+/Cocoa e OpenGL para renderização (com suporte planejado para as APIs DirectX, Vulkan e Metal). Inclui ferramentas para trabalhar com objetos 3D, animação esquelética e controle de câmera.
- Uma biblioteca para criar interfaces gráficas com elementos de design nativos de cada sistema operacional. O Windows usa WinAPI/GDI+, o macOS usa Cocoa e o Linux usa seu próprio conjunto de widgets. A biblioteca já está sendo usada em desenvolvimento. — cliente para Slack, Skype, Gmail, Twitter e Facebook;
O plano é criar um aplicativo de design de interface semelhante ao Delphi, fornecer uma API declarativa similar ao SwiftUI e ao React Native e oferecer suporte para a criação de aplicativos móveis para iOS e Android;

- Um framework web integrado é utilizado para criar o site, o fórum e o blog de desenvolvedores do projeto. A pré-compilação de templates HTML é suportada, eliminando a necessidade de processá-los a cada requisição;
- Suporte para compilação cruzada. Para criar um executável para Windows, basta executar "v -os windows" e, para Linux, executar "v -os linux" (o suporte para compilação cruzada para macOS está previsto para mais tarde). A compilação cruzada também funciona para aplicativos gráficos;
- Gerenciador de dependências, gerenciador de pacotes e ferramentas de compilação integrados. Para compilar o programa, basta executar "v .", sem usar make ou utilitários externos. Para instalar bibliotecas adicionais, basta executar, por exemplo, "v get sqlite."
- Disponibilidade de plugins para desenvolvimento em linguagem V em editores. и .
Desenvolvimento comunidade com , visto que o código publicado mostrou que nem todas as funcionalidades declaradas foram implementadas ainda e que é necessário um trabalho muito grande para implementar todos os planos.
Além disso, o repositório originalmente continha Código não funcional que apresenta problemas de compilação e execução. Presume-se que o autor ainda não tenha chegado ao ponto de perceber esses problemas. Segundo essa teoria, 20% dos esforços geram 80% dos resultados, e os 80% restantes geram apenas 20% dos resultados.
Entretanto, cerca de 10 mensagens foram removidas do rastreador de bugs do projeto V. Código de baixa qualidade, por exemplo, o uso de inserções em C e o uso do comando `rm` nas funções da biblioteca para excluir um diretório chamando `os.system("rm -rf $path").`. O autor do projeto que ele apenas apagou as mensagens, (ao mesmo tempo, mudanças que confirmam a validade da crítica, в ).
Fonte: opennet.ru

