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

Desenvolvendo uma linguagem de programação

Eu comecei por hobby e para ganhar bem mais conhecimento, o desenvolvimento de uma linguagem de programação. Não era nada profissional, a ideia foi desenvolver uma linguagem simples e tornar ela pública (mesmo sendo um hobby), os meus requisitos eram: algo rápido, leve e seguro.
Desde então, estou desenvolvendo a "Wysb", usando a linguagem Go.
Parte do projeto, é evitar usar um lexer ou parser complexo no compilador, e então, continuo atualizando ela adicionando mais recursos. Ela está se tornando uma boa linguagem, mas claro, há bastante problemas, e os maiores são: não tem comunidade, e não tem uma ampla gama de bibliotecas built-in. Peguem leve nas críticas, eu trabalho nela semanalmente, melhorando com o tempo, se quiserem me dar um apoio (visualizando, testando ou contribuindo) acessem o repositório da Wysb. Praticamente, tudo ocorre no compilador, que funciona assim:

  • Função countKeywords: Essa função retorna um inteiro que representa o total de vezes que a palavra chave passada com argumento (string) é repetida no texto.
  • Função ReadWysb: Essa função usa centenas de loops para percorrer o código passado (Wysb) em busca de palavras chaves, e quando encontra alguma, ele faz o processamento necessário. Os loops usam a função countKeyword para verificar quantas vezes a palavra chave se repete, e assim, faz o processamento quantas vezes for necessário.
    É bem simples, mas funciona bem. Vejam um exemplo:
keywords_extends := []string{"<extends"}

counts_extends := countKeywords(string(content), keywords_extends)
  for i := 1; i == counts_extends; i++ {
	extender := ci.Target(string(content), "<extends ", "!>")
	ReadWysb(extender)
	replacer := "<extends " + extender + "!>"
	content = []byte(strings.Replace(string(content), replacer, "", i))

}

Em resumo, o que preciso é de bibliotecas built-in para facilitar e ampliar o fluxo de desenvolvimento com a Wysb. Vale citar, que a linguagem é feita em grande parte com Go, mas uma pequena parte com JavaScript, via Otto. Tudo o que ocorre dentro de funções e não depende do sistema operacional (exemplo: operações aritiméticas) é feito com JavaScript na Otto, já por exemplo manipulação de arquivos, criptografia, HTTP router, e outros recursos são feitos com Go. A linguagem é rápida, e oferece um pouco de segurança, e é extremamente leve. A Wysb pode ser instalada com a Wysbup, uma ferramenta exclusiva para instalar, atualizar e usar a IDE da Wysb. A Wysbup tem cerca de 200MB, mas o código-fonte compilado da Wysb, tem apenas 18MB. Atualmente, o compilador tem cerca de 1500 linhas de código. Se alguém tiver sugestões ou tiver disponibilidade para contribuir, serei grato. Lembrando que é por enquanto um hobby, então peguem leve nas críticas.

Repositório: https://github.com/simplyYan/Wysb
Website: https://simplyyan.github.io/Wysb/root/

2
0
2

Muito legal cara, também to desenvolvendo uma, achei que seria muito interessante para portfolio. Só que no caso to desenvolvendo em C. Realmente cara, é complicado. Foi tipo 1 mês bruto desenvolvendo toda a ideia de como funcionária, e o resto desenvolvendo em si, e a gente nem pode dedicar muito a isso porque tem trampo, colégio e ENEM final de ano, mas é tão satisfatório fazer isso ksksk.

1

Criar uma nova linguagem não é fácil, mas não precisa ser complexo. Estou fazendo a disciplina de construção de compiladores na faculdade, recomendo MUITO estudar sobre sem compilador não tem linguagem, até linguagens interpretadas usam conceitos de compiladores, que vem lá dos primordios da computação. Recomendo estudar sobre:

  • Hierarquia de Chomsky
  • Gramáticas Livres de Contexto
  • Análise léxica, sintática e semântica (entender como funciona)
  • Ferramentas que facilitam a implementação
    • LLVM
    • JavaCC
    • Yacc
    • ... (existem muitos)

De resto, parabéns pela iniciativa, talvez isso não vire uma linguagem amplamente utilizada, mas vai te dar uma boa noção de análise de textos, o que pode ser aplicado em analisadores sintáticos, como os linters, tal como ESLint ou Pylint. Ou quem sabe criar uma linguagem de marcação, um JSON com esteróides ou algo do tipo.

Boa sorte e bons estudos! :D

1

Valeu! Eu realmente tenho bastante dificuldade em analisadores sintáticos, vou me aprofundar mais sobre isso. Como falei, a linguagem tem um compilador diferente, sem lexer ou parser, e isso, é óbviamente fora da curva e um pouco desvantajoso, mas é a única forma que consigo (sei) fazer. Então, tive que fazer essa "gambiarra" com loops e contadores de palavra chaves. Muito obrigado pelo feedback, vou tentar entender mais sobre lexers e parsers. É só um hobby, mas de vez em quando faço algumas atualizações.