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 ^^