Obrigado!
Fique com Deus!
Alguém com dúvida?
100% das pessoas que responderam tem dúvidas, a todo momento você fala nada com coisa nenhuma…
Os exemplos que você deu de código java não tem utilidade nenhuma no mundo real, tudo que você mostrou eu posso invocar diretamente!
O conceito de converter uma linguagem X em uma outra Y é interessante, mas da forma como você tem se expressado e demonstrado parece não ter a menor ideia do tamanho do problema e do tamanho da complexidade e limitações envolvidas…
De qualquer forma, boa sorte com sua ideia e seu projeto!
Então qual é a complexidade que está falando?
Dei uma atualizada no link
https://iatagancursos.github.io/Megusta/pagina-principal.html
Críticas, dúvidas e sujestões? Serão bem-vindas?
Bom, pra te dar uma ideia, veja este conversor de Java para Python. Não testei, foi só o primeiro que encontrei no Google.
Dê uma olhada no código fonte, em tudo que precisa para fazer o mínimo do básico do essencial, pra começar a ter algo minimamente funcional.
E olha que é um exemplo simples, o próprio projeto admite que não é garantido que o resultado é um código Python válido, mas que “funciona pra muitos casos”.
Imagina então para fazer funcionar em todos os casos, teria que adicionar mais código ainda. Afinal, as linguagens não são iguais, existem construções de uma que não tem equivalente na outra, e muitas vezes a conversão não é óbvia, nem sempre é uma relação 1 pra 1 (troca biblioteca X por Y, por exemplo).
E isso só faz a ida, ainda teria que implementar a volta (Python para Java), que tem os mesmos problemas (coisas que Python tem mas Java não, e o equivalente nem sempre é óbvio).
E isso é só para duas linguagens. Mas vc quer fazer de qualquer linguagem para qualquer outra, e a quantidade total de conversões cresce exponencialmente para cada linguagem adicionada.
E vc ainda quer misturar linguagens com estruturas e filosofias completamente diferentes, o que torna a tarefa ainda mais complicada.
Por fim, considerando seu tópico anterior, passou a impressão de que vc não tem familiaridade com Java. E eu não faria um conversor de linguagens sem conhecer muito bem as linguagens envolvidas.
Nossa!
Quero crítica construtiva! Que constrói!
Não a crítica destrutiva! Que destrói!
Não estou querendo jogar pedra! Mas até agora só estou ouvindo crítica destrutiva!
Olha o código que estou desenvolvendo em C?
#include <stdio.h>
int main(int argc, char **argv){
//megusta -javascript exemplo.mg -o exemplo.js
printf("%s %s %s %s \n", argv[1], argv[2], argv[3], argv[4]);
//Megusta
char Megusta[][20] = {"//","/*", "*/","rInt", "rNum", "rString","rBoolean","rAND","rOR", "rXOR","rNOT","rNULL", "rTrue", "rFalse", "rIf", "rThen", "rEnd", "rElseIf", "rThen", "rEnd", "rElse", "rxElse", "rEndIf","rFor", "rThen", "rEndFor", "rxFor", "rEnd", "rWhile", "rThen", "rEndWhile", "rxWhile", "rEnd", "rDo", "rDoWhile", "rEndDo", "rSwitch", "rThen", "rCase", "rxThen", "rEndSwitch", "rReturn"};
//Python
char Python[][20] = {"#","'''", "'''","", "", "","","and","or", "^","not","None", "True", "False", "rIf", "rThen", "rEnd", "rElseIf", "rThen", "rEnd", "rElse", "rxElse", "rEndIf","rFor", "rThen", "rEndFor", "rxFor", "rEnd", "rWhile", "rThen", "rEndWhile", "rxWhile", "rEnd", "rDo", "rDoWhile", "rEndDo", "rSwitch", "rThen", "rCase", "rxThen", "rEndSwitch", "rReturn"};
//Clipper
char Clipper[][20] = {"//","/*", "*/","", "", "","",".AND.",".OR.", "rXOR",".NOT.","NIL", ".T.", ".F.", "rIf", "rThen", "rEnd", "rElseIf", "rThen", "rEnd", "rElse", "rxElse", "rEndIf","rFor", "rThen", "rEndFor", "rxFor", "rEnd", "rWhile", "rThen", "rEndWhile", "rxWhile", "rEnd", "rDo", "rDoWhile", "rEndDo", "rSwitch", "rThen", "rCase", "rxThen", "rEndSwitch", "rReturn"};
//Rust
char Rust[][20] = {"//","/*", "*/","i64", "f64", "rString","bool","and","or", "^","not","rNULL", "true", "false", "rIf", "rThen", "rEnd", "rElseIf", "rThen", "rEnd", "rElse", "rxElse", "rEndIf","rFor", "rThen", "rEndFor", "rxFor", "rEnd", "rWhile", "rThen", "rEndWhile", "rxWhile", "rEnd", "rDo", "rDoWhile", "rEndDo", "rSwitch", "rThen", "rCase", "rxThen", "rEndSwitch", "rReturn"};
//C
char C[][20] = {"//","/*", "*/","int", "float", "char*","bool","&&","||", "^","!","null", "true", "false", "if(", "){", ")", "else if(", "){", ")", "}else{", "else", "}","for(", "){", "}", "for(", ")", "while(", "){", "}", "while(", ")", "do{", "} while (", ");", "switch(", "){", "case ", ":", "}", "return"};
//Java
char Java[][20] = {"//","/*", "*/","int", "double", "String","boolean","&&","||", "^","!","null", "true", "false", "rIf", "if(", "){", ")", "else if(", "){", ")", "}else{", "else", "}","for(", "){", "}", "for(", ")", "while(", "){", "}", "while(", ")", "do{", "} while (", ");", "switch(", "){", "case ", ":", "}", "return"};
//TypeScript
char TypeScript[][20] = {"//","/*", "*/","number", "number", "string","boolean","&&","||", "^","!","null", "true", "false", "if(", "){", ")", "else if(", "){", ")", "}else{", "else", "}","for(", "){", "}", "for(", ")", "while(", "){", "}", "while(", ")", "do{", "} while (", ");", "switch(", "){", "case ", ":", "}", "return"};
//Javascript
char Javascript[][20] = {"//","/*", "*/","", "", "","","&&","||", "^","!","null", "true", "false", "if(", "){", ")", "else if(", "){", ")", "}else{", "else", "}","for(", "){", "}", "for(", ")", "while(", "){", "}", "while(", ")", "do{", "} while (", ");", "switch(", "){", "case ", ":", "}", "return"};
//PHP
char PHP[][20] = {"//","/*", "*/","rInt", "rNum", "rString","rBoolean","&&","||", "^","!","null", "true", "false", "if(", "){", ")", "else if(", "){", ")", "}else{", "else", "}","for(", "){", "}", "for(", ")", "while(", "){", "}", "while(", ")", "do{", "} while (", ");", "switch(", "){", "case ", ":", "}", "return"};
//Assembly
char Assembly[][20] = {";", "\n%%if 0\n", "\n%%endif\n", "rInt", "rNum", "rString","rBoolean","rAND","rOR", "rXOR","rNOT","rNULL", "rTrue", "rFalse", "rIf", "rThen", "rEnd", "rElseIf", "rThen", "rEnd", "rElse", "rxElse", "rEndIf","rFor", "rThen", "rEndFor", "rxFor", "rEnd", "rWhile", "rThen", "rEndWhile", "rxWhile", "rEnd", "rDo", "rDoWhile", "rEndDo", "rSwitch", "rThen", "rCase", "rxThen", "rEndSwitch", "rReturn"};
//WebAssembly
char WebAssembly[][20] = {"//","/*", "*/","rInt", "rNum", "rString","rBoolean","rAND","rOR", "rXOR","rNOT","rNULL", "rTrue", "rFalse", "rIf", "rThen", "rEnd", "rElseIf", "rThen", "rEnd", "rElse", "rxElse", "rEndIf","rFor", "rThen", "rEndFor", "rxFor", "rEnd", "rWhile", "rThen", "rEndWhile", "rxWhile", "rEnd", "rDo", "rDoWhile", "rEndDo", "rSwitch", "rThen", "rCase", "rxThen", "rEndSwitch", "rReturn"};
return 0;
}
As críticas foram completamente construtivas, se você as encarou de forma diferente possivelmente seu ego tenha sido abalado!
Se conhecesse eu melhor!
Você não diria isso!
O pessoal vira num negativo? Vamos ser positivo?
Jorge, tente focar em alguma outra coisa. Esse seu projeto não vai servir no mundo real. Entendo sua vontade de ajudar, de criar algo inovador, mas esse projeto não tem muito para onde ir, entende? Não faz sentido você gastar uma quantidade de energia enorme em algo que vai esbarrar em barreiras quase intransponíveis. Converter programas de brinquedo de conceitos simples, que pedem uma entrada, fazer algum processamento, e geram uma saída não tem utilidade alguma entende? Enquanto é um println, um Scanner, um printf, um cout, um write ou qualquer outra coisa mais simples, ta beleza, o negócio vai servir, mas vai ser só aparecer algo mais intrincado ou específico da linguagem fonte que você vai começar a ter muito problema para tentar resolver e não vai conseguir se não for expert nas linguagens. Se seu sonho é esse mesmo e você quer perseguí-lo a qualquer custo, primeiro então diminua o escopo. Trabalhe apenas com duas linguagens, tanto no processo de traduzir A para B quanto B para A e lembre-se, você precisa cobrir TODAS as features de cada linguagem, seja do ponto de vista sintático, semântico, do(s) paradigma(s) que ela abraça e o mais difícil, da biblioteca padrão. Te garanto, você vai ter trabalho para ANOS até ter algo viável, pois é você consigo mesmo. Não deixa de viver e aprender outras coisas por causa desse projeto, afinal, por o pão na mesa, ter um teto para morar etc é mais importante que isso.
Sugiro aos colegas visitarem as redes sociais, canal do YouTube, Linkdin do Jorge para conhecer a realidade dele.
Jorge, para tirar dúvidas do seu projeto, abra outros tópicos e aguarde as respostas, tudo bem?
Boa semana a todos.
Desculpe, mas pra mim crítica destrutiva é aquela que só xinga e não dá argumentos (tipo “esse projeto é um lixo”, não explica o motivo e também não ajuda em nada). Não acho que foi o caso aqui.
Eu e os demais falamos em detalhes quais são os problemas da sua ideia. No meu post acima, inclusive, eu explico porque o problema é mais difícil do que vc está imaginando. Não é pra te desmotivar, e sim para dar uma perspectiva do real tamanho do desafio que vc tem pela frente.
Isso não é destrutivo, na minha concepção. Mostrar a realidade é algo que pode chocar e desmotivar, mas minha intenção foi mostrar algo que vc não estava percebendo, para que a partir daí vc possa reavaliar suas ações.
Dito isso, vc queria o que? Se alguém me dá uma ideia ruim, eu prefiro explicar porque eu acho ruim.
Vc queria que a gente só dissesse “Uau, que ideia incrível!” e não apontasse nenhum dos problemas que ela tem? Na minha opinião, apoiar uma ideia claramente ruim é muito mais destrutivo do que criticá-la, pois vai te fazer perder tempo em algo que não vai dar o resultado que vc espera.
A impressão minha é que estão me chamando de burro!
Pra quê textão?
Vocês pelo menos olhou o código?
Se me conhecesse direito, não diriam essas coisas!
Sim, eu vi o código e mantenho minha opinião. Ninguém te chamou de burro, estamos apenas apontando detalhes que vc não percebeu. E são tantas coisas que não dá pra fazer isso com uma ou duas frases, então desculpe, mas o texto vai ser longo sim. Cabe a vc aproveitar o que está escrito ou ignorar.
Só pra dar um exemplo de conversão que não é óbvia. Python tem generators, um conceito para o qual não há equivalente em Java. Até é possível simular algo parecido, mas olha o trabalho que dá. Seu projeto vai fazer isso automaticamente? Para todos os corner cases possíveis?
E isso que estamos falando de um recurso específico de uma linguagem. Agora imagine todos os recursos de todas as linguagens que vc quer incluir no seu projeto.
E mesmo que duas linguagens possuam recursos parecidos, nem sempre é 100% igual. Tradução de código entre linguagens é complicado, não dá pra fazer uma correspondência linha a linha, comando a comando, exceto em programas muito simples (e olha lá).
Mesmo coisas mais simples podem ser difíceis de traduzir. Por exemplo, em Java os tipos numéricos possuem tamanhos fixos (inteiro sempre tem 32 bits, long sempre tem 64, etc). Em Python o limite para um número inteiro é a memória, em C depende da arquitetura, etc. Qualquer conversor teria que lidar com esses limites e fazer o tratamento adequado para que o código tenha sempre o mesmo resultado. Para números pequenos é simples, mas para todos os casos é complicado, provavelmente vai ter que fazer algumas concessões (“para valores acima de X não vai funcionar”, etc) e documentar bem esses casos para que o usuário não tenha surpresas.
Sem contar que há diferenças nos operadores. Em Java e C, a divisão de dois números inteiros resulta em um inteiro, então 7 / 2 dá 3. Em Python e JavaScript dá 3.5, além disso em Python há a mudança de tipo (int dividido por int resultou em float), mas em JS não porque só existe o tipo Number (não há separação entre inteiros e floats).
Mais ainda, Python tem o operador // (divisão inteira), então 7 // 2 resulta em 3. Indo além, há a função divmod que retorna a divisão e o resto de uma vez:
resultado_divisao, resto = divmod(7, 2)
E veja pelo código acima que dá para atribuir duas variáveis de uma vez: divmod retorna uma tupla com dois elementos (o resultado da divisão e o resto), mas dá para fazer o unpacking e já colocar cada valor em uma variável.
Como fazer isso em Java, que não possui este recurso? Não dá, vc teria que atribuir manualmente cada elemento em uma variável.
Enfim, esses são apenas alguns exemplos de recursos que uma linguagem possui e outra não, e mostra que a conversão nem sempre é óbvia e simples.
E isso não é uma “crítica destrutiva”, muito pelo contrário. É apenas para te dar uma noção melhor do desafio que vc tem pela frente. Vc está olhando para uma minúscula parte do problema. Existe um mundo de coisas que vc nem sequer imaginou, mas caso continue no projeto, mais cedo ou mais tarde acabaria encontrando. Então é melhor já ir pensando nisso…
Esta postagem foi sinalizada pela comunidade e está oculta temporariamente.
Esta postagem foi sinalizada pela comunidade e está oculta temporariamente.
Eita… Parabéns pela paciência nas respostas, vocês foram muito cordiais
Pois é, tentamos ajudar, em vão.
Pelo jeito o cara não quer ser ajudado, preferiu ignorar tudo que escrevemos e ficou insistindo nessa coisa de “estão me chamando de burro”, sendo que ninguém fez isso.
Enfim, não tem mais o que fazer…
Esta postagem foi sinalizada pela comunidade e está oculta temporariamente.