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

Estou desenvolvendo uma lingugem de programação, e bem... falta muita coisa... mas ficaria honrado se desse uma olhada ^^

Olá! meu nome é samuel, pois bem. Tem um tempinho que estou desenvolvendo um projeto que começou como uma brincadeira, mas hoje é uma brincadeira que estou levando bastante a sério. Desde que comecei a programar (Python) eu sempre quis entender como uma linguagem funcionava, queria saber como computadores no geral funcionavam. Levou um bom tempo a começar a ter uma ideia. Eu comecei com Python e em seguida fui pra javascript e claro, dificilmente se pode ter noção de como a matrix realmente funciona usando linguagens de tão alto nivel.

Então no meu colégio técnico de eletrônica nos instroduziram a linguagem C. Já facinado pela programação, logo chegando em casa já baixei o DevC e comecei a testar essa linguagem que no auge da minha ignorância, a julgava como rudimentar e inferior a Python e Javascript. "Como assim preciso alocar memória?", "Como assim strings terminam como '\0'", "que diabos é '\0'?". É bem... sinto um pouco de vergonha com isso ksksksk, enfim, passado é passado. Vazamentos de memória quase me fizeram largar de vez essa linguagem, e ainda falam que Java que é dificil. Mas depois que superei a minha própria ignorância, minhas relção com a C ficou bem melhor.

Não sou adepto a ter uma linguagem preferida, são ferramentas que devem ser usadas em casos e casos, mas ainda tenho um carinho maior por C. Me deu meu primeiro emprego na área e honestamente, prefiro lidar com memória do que com redes. E C me deu uma perspectiva maior de como liguagens e computadores funcionavam e então pesquisando mais e descobrindo como linguagens que estão desde o meu dia 0 como Python funcionavam me fizeram lembrar de projetos que tinha no passado. Decidi que iria fazer a minha (possivelmente não eficiente, problemática e sem sentido) própria linguagem de programação. Seria obviamente feita em C.

Denominada inicialmente de "Ellen", foi se dado o inicio. É maravilhoso o sentimento de começar do 0. Eu evitei ao máximo olhar o código fonte do Python e Lua, queria de fato criar tudo do mais perto do 0 que poderia, até funções prontas em C eu utilizei a menor quantidade possivel, eu realmente queria que fosse o meu projeto. Enfim, eu estou consiente das minhas limitações, eu programo a dois anos (C comecei pra valer em agosto do ano passado), eu to muito, muito longe de ser considerado experiente. Então não quero inovar nada, apenas criar uma linguagem que seja acolhedora tanto para programadores de mais alto nivel que não querem ter que se preocupar com coisas como "tipagem?" ou "porque esse array só armazena valores de um mesmo tipo? não é assim no Javascript", mas que outros programadores também possam ter esse maior controle do que está acontecendo.

Não é inovador, outras linguagens também tem um suporte ou pelo menos uma linguagem equivalente que supre a falta dela como o Typescript para o Javascript (obs: nunca programei em Typescript, faço menor ideia de como seja), mas mesmo assim quero levar ao máximo possivel essas formas de se programar. É uma linguagem que pode ser facilmente entendida.

Exemplo 1) declarando uma variavel:

//modo "Python" de se programar:
:n = 35 //usa-se : para iniciar variaveis e :: para iniciar estruturas de dados

//modo "Java" de se programar:
int: n = 35; //obs: pode tanto quebrar linha como usar o querido e odiado ao mesmo tempo ';'

é livre para programar da forma que quiser alternando sempre que quiser, claro, tem regras:
quando se declara:

:variable = ""

sem especificar um tipo, o compilador trata como um tipo hollow, e pode assumir o valor que desejar, entretanto, uma vez definida como variaveis, sempre serão variaveis e não podem assumir a identidade uma estrutura de dados.

e quando se declara:

string: star_wars = "Há muito tempo, em uma galáxia muito muito distante... tumtumtummm tum tumtum tu tummm";

é impossivel alterar tanto o tipo da variavel como a identidade dela

tem muitas outras ideias que sempre quis que existissem como:

fn getValue(:index) -> byte{
    index++;
    return <byte>system.rd("Digite um número de -128 a 127: ");
}

byte: n = 5, i = 0;
byte:: arr = new byte[n];
    
5 * {arr[i] = getValue(index -> i)};

basicamente um loop... sem while e sem for...

Eu adoraria explicar como tudo funciona ou como tudo vai funcionar, mas já escrevi muito e dúvido que alguém tenha chego até aqui kskks. Mas basicamente ela será compilada para um bytecode assim como Java e foi a parte mais satisfatória de pensar. Eu quero muito que vejam, pra facilitar pode encontrar como seria o bytecode no main.c, o compilador ainda não tá finalizado pra gerar um bytecode apartir de um fonte, então tem que ser criado o bytecode do zero ^^. apenas algumas instruções são feitas. No exemplo do código ela só aloca memoria para os tipos de variaveis que serão usadas, armazena os valores, chama eles em uma função e descarta. Enfim, muita coisa a ser feita, antes que deem uma olhada, o código precisa de refatoração em muitas partes então não abservem a bagunça... Enfim muito, muito obrigado por ler um bagulho que literalmente levei uma hora pra escrever ^^

https://github.com/samuelpirrho35/My-program-language-Ellen

3

Po muito bacana, colega. Recomendo você criar um README.md no seu repositório com instruções de como instalar o compilador e como usá-lo. Também ficaria legal alguns exemplos básicos e explicações sobre sobre a sintaxe da linguagem.

1

Muito obrigado pela dica. Ainda não tem uma versão utilizavel, então se quisesse testar teria que compilar partes especificas infelizmente eu coloquei mais por recomendações, mas quando tiver uma versão estavel eu funcional vou me lembrar disso, valeu mesmo

2

que da hora mano, sucesso nessa tua empreitada, que realmente vai ser muito longa, uma pergunta, pq não em rust para base? vimos recentemente q ela performa mais rápido e é mais segura,

1

muito obrigado ^^. rust é uma linguagem que quero muito aprender, mas eu nunca programei nadinha em rust, e já aprendi com os meu erros de aprender 7 linguagens ao mesmo tempo, ainda tenho muito o que aprender em relação as que programo atualmente, quero saber tudo que dá pra saber e ou o máximo que puder e dai evoluir outras linguagens e tecnologias. mas rust definitivamente ta lista bem no topo

2

Eu particularmente não gosto de símbolos, por isso uma das linguagens que menos gosto em termos de sintaxe é Bash, no entanto gosto muito da quantidade de comandos, com isso possibilidades. Também gosto da velocidade do Bash.

Não gosto

$#
$$
!
!#
::
:
if{}
while{}
nome_funcao{}
for{}
&&
||

Tipo da linguagem que eu gosto

global
local
pid
if .. endif
for .. endfor
while .. endwhile
function .. endfunction
and
or
not

Outras coisas que gosto
Função que retorna mais de um valor. Na linguagem Lua é possível.

x, y = coordenadas()

Variáveis integradas, vi isso na linguagem de script Autohotkey
Você por exemplo faz um loop em uma pasta, pronto, você já tem a disposição variáveis que pegam tudo que é informação (nome, extensão, tamanho, etc.), nem precisa usar funções, etc.

Loop Files, "C:\My Documents\Address List.txt"
    ShortPathName := A_LoopFileShortPath

https://www.autohotkey.com/docs/v2/lib/LoopFiles.htm

A_LoopFileName
A_LoopFileExt
A_LoopFilePath
A_LoopFileFullPath
A_LoopFileShortPath
A_LoopFileShortName
A_LoopFileDir
A_LoopFileTimeModified
A_LoopFileTimeCreated
A_LoopFileTimeAccessed
A_LoopFileAttrib
A_LoopFileSize
A_LoopFileSizeKB
A_LoopFileSizeMB

Percorrer caracteres de uma string

texto := "uma frase"
Loop Parse texto {
    MsgBox A_LoopField
}

A_LoopField é um único caracter que muda a cada iteração.

1

eu entendo, bastante linguagens atuais tem uma gramática bem próxima da nossa, como quero que a gramática não seja uma barreira, ainda tem bastante comandos como and not or por exemplo. sendo sincero, ainda teria que colocar () para ifs, estruturas de repetição, etc... mas vou analisar a ideia de não ser obrigatório. e vai ser possivel retornar mais um valor em funções:

fn func() -> string, int[]{
    string: name = "Ellen";
    int:: arr = [3, 14];
    return name, arr;
}

string: name;
int:: arr = new int[2];
name, arr = func();
2
1

nossa cara que maneiro. uma coisa que recomendo muito é planejar o máximo possivel do seu projeto sem visões externas, a gente não precisa inovar em nada, é bem difícil na verdade trabalhando em algo como uma linguagem sozinhos, tem muita coisa, tipo muita mesmo, mas criar é incrível, é a melhor parte, e vai perceber que com um bom tempo de desenvolvimento, o seu projeto atual vagamente lembra do projeto inicial. é algo bem mais didático do que um projeto a ser usado, eu tenho um problema de querer fazer as coisas do mais perto do 0 possível, mas tem alternativas bem melhores, então não se acanhe em usar, ta no jogo é pra usar

1
1

Quando eu estava no meu estágio, eu usava bibliotecas e frameworks porque é seguro e também pela responsabilidade de entregar em um prazo por mais que não exigissem muito por ser apenas um estagiario, mas recomendo bastante tentar implementar sua própria lógica, é bem possivel de não ser bem eficiênte e nem tão seguro, mas pelo menos você não é refém caso aquela lib o framework não seja mais acessivel ou compativel. Mas sério, não vale tanto a pena querer fazer tudo do 0, eu fiquei tanto tempo tentando criar um encode UTF-8 já que não é padrão de C só porque não queria usar alguma das 7 bibliotecas que encontrei na internet, se tu curte procurar e investigar vai na fé, mas não precisa, é uma das coisas que me arrependo.

1

Cara muito legal, tipo muito mesmo. Eu queria começar a criar uma, mas o problema é que não tenho a menor ideia, eu sei um pouco sobre C, mas não tenho ideia de como pelo menos começar. Poderia me ajudar nisso? Com algum material ou link que eu possa ler?

2

Como o LohanYrvine falou, nao precisa usar o C, pode usar qualquer outra linguaagem para ser a Base.

Alem das coisas mencionadas pelo amigo, recomendaria os videos do Fabio Akita, para entender melhor sobre como as linguagens funcionam, sua origem, motivo da criacao, compiladores e interpretadores e arvores binaria.

Caso não queira assistir, da para ler no blog pessoal dele todo o script do vídeo.

Akita On Rails

1
1

muito obrigado ^^. cara independente da sua linguagem, você pode fazer algo legal. eu escolhi C porque é uma linguagem muito usada no desenvolvimento de linguagens de alto nível por ser eficiente. python infelizmente acaba tendo um desenvolvimento muito inferior, tem várias formas de aumentar o desempenho mas bem longe de C, C++ e rust. mas se vc tiver uma noção de java, saiba que as primeiras versões ele foi desenvolvido em c++ se não me engano, mas com um tempo foi reescrito em Java, então tem alternativas mais fáceis do que desenvolver em C puro. mas se quiser aprender vai aqui: https://programacaodescomplicada.wordpress.com/indice/linguagem-c/

1
1

Você não precisa usar C, até porque a linguagem que você vai criar vai ser puramente didática e longe de algo realmente funcional, então basta usar o que você sabe.

Nesse caso, eu recomento estudar um pouco sobre teoria da computação, mas não precisa se aprofundar muito, principalmente porque isso é chato demais. Depois veja algo sobre compiladores em si, e aqui eu recomendo esse web-book chamado Crafting Interpreters, em que o autor começa usando Java, mostra o básico, explica o motivo de Java não ser adequado e reescreve em C, aí sim, usando algoritmos, não diria avançados, pois são relativamente simples, mas mais adequados.

1

Valeu man, tenho um pouco de noção de java, acho que vendo tudo isso vou estudar mais um pouco antes de começar a realmente criar algo.

1

exato, criar uma realmente funcional com alta escalabilidade e eficiência tá um tanto distante dos meu conhecimentos kskskks. mas é um trabalho de meses, então tenho bastante carinho, apesar de ser apenas pro meu portfólio.

1
1