Executando verificação de segurança...
7

[PITCH] Estou criando uma linguagem de programação

Oi pessoal, sou um programador C#/C++ e resolvi me desafiar criando esse projeto.

A ideia

Uma linguagem simples, meio C++, meio C# (na sintaxe), com paradigmas de orientação a objetos, e estruturada.

A implementação

Atualmente não estou usando bibliotecas externas e fazendo tudo do zero, já que penso em aprender mais. Planejo utilizar LLVM para a geração de código e compilação.

O projeto

O projeto é 100% open source e está no GitHub. Também tem um site que em breve terá tutoriais e documentação

Carregando publicação patrocinada...
7

Adoro projetos de linguagens de programação e acompanho muito tudo o que posso, e uma das críticas que mais vejo que as pessoas fazem quando alguém publica a linguagem, em qualquer estágio, é a falta de informações sobre ela, o que ela pretende, diferenciais, principais conceitos, exemplos, e qualquer coisa que ajude a pessoa entender o que é a linguagem, mesmo que ainda não dê para aprendê-la no todo que já tem. Então fica a dica, divulgue de novo no próximo estágio com um Github mais rico em informações sobre ela.

Esperarei ansioso quando puder fazer um post com ela melhorada e melhor documentada.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).

3

Concordo, realmente não detalhei muito sobre a linguagem, objetivos e diferenciais no GitHub. Em breve vou divulgar o próximo estágio com mais detalhes. Obrigado pela dica.

6

Muito bacana a iniciativa. Para aprendizado não tem coisa melhor. E se der certo, é mais uma para destacar o Brasil lá fora (além de Lua e Elixir).

Também estou desenvolvendo uma linguagem, programando em C++ com Antlr. Ainda tá no início, se quiser trocar ideias tamos aí. O projeto também está no GitHub: NeoBASIC.

2
6

algumas ideias para deixar sua linguagem mais robusta e intuitiva
A verbosidade de C++ muitas vezes vem da necessidade de especificar tipos repetidamente, gerenciar memória manualmente e usar operadores complexos para tarefas comuns.A nova linguagem abordaria isso das seguintes maneiras:
Inferência de Tipo Automática: A linguagem seria capaz de inferir o tipo da maioria das variáveis no momento da declaração. Isso eliminaria a necessidade de declarar explicitamente o tipo, como auto em C++ moderno, mas tornaria isso a norma, não a exceção.

Exemplo: “let” ou “var” x = 10; (o compilador sabe que x é um inteiro).

Para tipos mais complexos, como classes, a inferência também funcionaria, como let minha_instancia = MinhaClasse();.

Gerenciamento de Memória Automático: Em vez de exigir o uso de new, delete e ponteiros inteligentes (como std::unique_ptr), a linguagem teria um sistema de gerenciamento de memória integrado. Isso poderia ser um garbage collector (coletor de lixo) ou um sistema de contagem de referências que liberasse a memória automaticamente quando ela não fosse mais necessária. Isso eliminaria a causa da maioria dos vazamentos de memória e erros de segmentação.

Ponteiros Simplificados: Os ponteiros seriam mais como "referências seguras". Eles seriam usados para passar objetos por referência sem a sintaxe de * e &.

A linguagem teria um conceito de ponteiro nulo claro e seguro, que impediria operações em ponteiros inválidos em tempo de compilação, em vez de em tempo de execução.

Visualize ponteiros como “setas”
Uma dica mental: pense sempre que

" * >>> pega o valor no destino da seta"
" & >>> pega o endereço para onde a seta deve apontar"
Sintaxe de Classes Simplificada: A declaração de classes e métodos seria mais limpa, com menos repetição de palavras-chave. A herança seria clara e a sobrescrita de métodos seria explícita, mas sem a necessidade de virtual e override na maioria dos casos. O uso de construtores e destrutores seria simplificado, com um foco maior em inicialização e finalização automáticas.

Encapsulamento por Padrão: Os membros de uma classe seriam privados por padrão, exigindo a palavra-chave public para expor o que deve ser acessível. Isso incentivaria a boa prática de encapsulamento desde início.
Melhoria do goto
O goto é malvisto por tornar o fluxo de controle de um programa imprevisível e difícil de seguir, criando o chamado "código espaguete". Em vez de eliminá-lo completamente, a melhoria seria limitar seu uso a contextos específicos e controlados, oferecendo alternativas mais seguras e legíveis.
A nova linguagem não teria um goto tradicional. Em vez disso, ela teria um recurso chamado jump com escopo.
jump para Labels de Bloco: O jump só poderia ser usado para "pular" para um rótulo (label) definido dentro do mesmo bloco de código (uma função ou um loop). Isso impediria que o fluxo de controle saísse de uma função para outra, garantindo que o jump não criasse dependências invisíveis entre diferentes partes do código.

Sintaxe Clara: A sintaxe seria jump <label_name>;. Isso tornaria a intenção clara. Os rótulos seriam definidos com uma sintaxe simples, como label <label_name>: para que fossem facilmente identificáveis.

Casos de Uso Específicos: O uso do jump seria incentivado apenas para situações de tratamento de erro ou para sair de múltiplos loops aninhados. A linguagem teria estruturas como break e continue para a maioria dos casos de uso, mas o jump seria uma ferramenta de último recurso, para quando outras opções de fluxo de controle fossem muito complexas ou ineficientes.

1

que ótima ideia! realmente C++ é bem verboso e considero isso problemático, e no lugar de um tipo "auto" como no C++, ao declarar uma variável, o compilador detecta automaticamente o tipo, como em C#:

var x = 1
var user = User(name, email, password)

Sobre o gerenciamento de memória, não penso em colocar um GC, por ser uma linguagem de baixo nível. E ainda prefiro os smart pointers, mas na linguagem, eles seriam simples, claros e diretos. Mas as referências serão uma opção alternativa, com os ponteiros sendo mais para memória heap.

Quanto a orientação a objetos, a sintaxe será mais simples, algo como:

class User {
    public property string name { get; set; }
    
    public int age; // Field ou campo, funciona como uma variável
    
    public string toString();
    
    private void privateMethod();
} 

os métodos pra get/set poderão ser auto-implementados, definidos diretamente (anônimos) ou passados externamente, por exemplo:

property name { get { return _name; } set { _name = value }}
property name {get getName; set setName;} // Um ponteiro para um método/função (útil pra factory)

E todos os membros de uma classe serão privados por padrão.

goto e jump são uma ideia interessante, mas o projeto ainda está no início

2

Que legal eu estou desenvolvendo uma que não é bem uma linguagem de programação, é uma de codegen mais focada em sistemas assíncronos com tipagem forte e semântica que irá entregar a arquitetura mapeada do back ao front com Typescript l

1

baita aprendizado, bem bacada ver projetos assim.

Eu já não sou tão produtivo nas minhas concepções, A única linguagem que eu já tive vontade de criar eu chamei de Tyop...

Tyop seria IDÊNTICA ao C++, só que todas as palavras chaves do código tinham que ter algum erro de digitação, as normais funcionam, mas tem que ter pelo menos algum Typo AND tem obrigatoriamente que pelo menos uma linha onde deveria ir um ; não ter esse ; ... mas não todas

Obviamente essa é uma ideia terrível que nunca vai sair do papel, por motivos óbvios

2