Dêem uma olhada neste artigo.
What I Hate About Java (Python, C, C++, ...)
14 Respostas
Por isso que assembly é a melhor linguagem de todas. :twisted:
quem vc conhece que programa em assembly e tem alguma reclação a respeito de recursos da linguagem? eu não conheco…
Ninguem reclama de checked exceptions, de ter q colocar $ na frente de todas variaveis, de sem static typed ou qualquer outra coisa.
Programadores de verdade fazem em assembly, o resto é desculpa pra esconder incompetencia!
ô lôco! 
(é… se sabe que essas suas declarações “dão pano-pra-manga”, neh?!.. mas eu sei que c tá brincando!)

Falando nisso, alguém sabe de um “assembler” para JVM? Será que alguém já chegou a usar isso? Alguém tem um relato? 
Deve ser interessante chegar numa empresa pra dar manutencao num sistema e descobrir que o desenvolvedor principal do sistema gostava de escrever direto em assembly p/ JVM… 
sera que existe um doente destes??
com certeza seria interessante, pois agradavel não ia ser mesmo 
isso me lembra que 1 cara escreveu algo do tipo 1 asm.net
que permitia usar assembly de 386 (pm sem segmentos) em uma assembly .NET. Imagina que maravilha isso! Escrever suas paginas de asp.net em assembly! Essa foi a melhor solução ate hoje que eu vi pra corrigir aquele bug do windows chamado IIS, agora é so fazer sua pagina asp.net crashear o webserver.
Falando sobre usar assembly da JVM, fui perguntar pra quem sabe tudo, não paulo mas sim o google, e achei esse site:
http://mrl.nyu.edu/~meyer/jasmin/
dando 1 olhada achei um exemplo dum hello world:
.method public static main([Ljava/lang/String;)V
.limit stack 2 ; up to two items can be pushed
; push System.out onto the stack
getstatic java/lang/System/out Ljava/io/PrintStream;
; push a string onto the stack
ldc "Hello World!"
; call the PrintStream.println() method.
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
; done
return
.end method
Isso é bicão pra quem já mexeu com assembly no padrão da AT&T.
Outra opção é o http://siesta.cs.wustl.edu/~djh4/[/code]
Esse outro assembler me parece 1 pouco mais amigavel:
class HelloWorldApp
{
method public static void main (java.lang.String[])
max_stack 2
{
getstatic java.io.PrintStream java.lang.System.out
ldc "Hello World!"
invokevirtual void java.io.PrintStream.println(java.lang.String)
return
}
}
Você quer dizer pegar o arquivo texto gerado pelo comando javap MinhaClasse.class e modificá-lo, por exemplo?
Entretanto os arquivos *.class são binários. E os com código assembly são arquivos texto. Como faria para pegar o arquivo assembly de java e transformá-lo em um .class?
ba
java deveria tem suporte a colocar inline asm.
ia ser muito util.
obrigado pela parte que me toca. meu nome veio tao rapido quanto ao google na sua cabeca? bookmarka!
mas eu nao conheco haskell, lisp, clisp, C, assembly como voce, claro. Tambem nao posto topicos com siglas pouco conhecidas pela comunidade java para testar conhecimento de ninguem. Muito menos fico falando que uma pessoa “esta errada” ou “nao sabe do que esta falando”.
suas afirmacoes e opinioes sempre me confundem. nunca da para entender se voce esta falando algo que eh comprovado ou se nao passa de mera opiniao sem embasamento algum, como o caso.
minah assinatura fala por si soh. alias, knuth fala por si soh, apesar do mala que ele eh.
Na verdade não foi exatamente isso, fui direto pro google mesmo, foi
só notar que http://www.google.com/search?q=%2Bjava+%2BPaulo+%2BSilveira da quase 2000 hits…
Ainda bem, pq a pergunta era referente a java, senão, como você mesmo fala, teria lembrado de mim mesmo. Siglas pouco conhecidas? Vejamos, LDAP e Kerberos não são coisas pouco conhecidas ao mundo java, afinal, fazem parte da j2se 1.4; ja WBEM/CIM, só queria saber se alguem já chegou a trabalhar com isso em java, se vc tiver curiosidade de saber doque se trata da 1 olhada no site da dmtf.
na proxima vez aviso quando estiver sendo sarcastico. ok?
Sim, mas com assembly inline daria pra fazer dentro do java algumas coisas q hoje so da via intrumentadores de codigo, que pessoalmente acho ser 1 solucao mais pobre. Tem como implementar de forma melhor coisas como mutex’es, semaforos, co-rotina.
Tudo bem que todas essas coisas podem ser implementadas de forma menos elegante e lenta com java normal, mas, de repente, pq nao? Java já tem varias features pela metade mesmo.
Pensando bem, ate melhor deixar como ta, a linguagem ainda não sofre do feature-bloat de varias outras.
Ai ai… odeio me meter em brigas, pois acaba virando a mesma história “Fábio Galuppo vs. Daniel Q. Oliveira”. Mas uma coisinha não posso deixar passar:
[quote]“java deveria tem suporte a colocar inline asm”/quote
Ok, supondo que fosse possível introduzir ASM no meio de Java (como se faz hoje em dia com SQL), quais seriam os ganhos reais? Nenhum!!! Pelo contrário, você ainda perderia a portabilidade (uma vez que você estaria escrevendo Assembly para um certo tipo de processador - vale ressaltar, para quem não sabe, que Assembly é uma linguagem de baixíssimo nível e extremamente dependente do processador) e tornaria o mecanismo de gerenciamento automático de memória inviável!!! Ou seja, para quê então este tipo de “feature”? Modismo? Sem falar que, se você realmente precisar de recursos de nível tão baixo, você:
- deveria usar JNI;
- não deveria usar Java;
Além disso, introduzir ASM quebra todo o paradigma de orientação a objetos, mas pelo visto isso é detalhe.
Abraços,
Calma, Daniel! Não estávamos falando de Assembly x86, R?000 ou PowerPC aqui… estávamos falando do assembly de JVM, mesmo, o bom e velho
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello World!"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
:twisted:
Ahhhhh… opa!!
foi mal!!!
Vai demorar muito pra alguém me convencer que
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello World!"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
é melhor do que
System.out.println("Hello World");
A partir de que ponto a eficiência exige que vc inclua bytecode “direto” no seu fonte?
Há alguns anos, meu professor falava sobre a libc, e dizia que qualquer coisa que a gente inventasse que substituísse código da libc seria um desperdício, já que durante anos os caras foram aperfeiçoando aquilo.
No Java 1, a maioria dos métodos da java.lang.String era nativo. Agora é praticamente tudo java, ou tudo, não lembro mais.
Assembly pressupõe que vc conhece o modelo de memória da máquina, que vc conhece o hardware onde vc está rodando. É o oposto da abordagem do Java, que pressupõe que vc não conhece absolutamente nada do hardware. Pseudo-assembly de bytecode, pra mim, é dinheiro jogado fora, pq vc gasta muito mais tempo fazendo a mesma coisa com um número de bugs igual ou superior ao código equivalente em Java.
Meus dois centavos!!
[]s, Tiago.
Com o atual conjunto de instruções da JVM, a principio não existe necessidade de escrever em assembly se for simplesmente por performance, isso pq é um modelo que usa pilha e são poucas instruções que manipulam ela, o que permitiria usar 1 DFA como scheduler de instruções e gera uma sequencia teoricamente ótima e que provavelmente iria confundir maioria dos JITers.