quarta-feira, 26 de setembro de 2007

C++ Sucks! (by Linus Torvalds)

Primeiro pensamento: "Ahhhh que facada!"

Alguns amigos irão dar pulos mais altos que eu a hora que lerem isso, especialmente um =)

Mas enfim, este post me levou a esta discussão, que tornou-se mais "quente" quando Linus Torvalds (é... aquele do tal do GNU/Linux) respondeu o seguinte:

C++ is a horrible language.
Ele continua:
In other words: the choice of C is the only sane choice. (...)
I've come to the conclusion that any programmer that would prefer the project to be in C++ over C is likely a programmer that I really *would* prefer to piss off, so that he doesn't come and screw up any project I'm involved with.
C++ leads to really really bad design choices.
E diz mais:
In other words, the only way to do good, efficient, and system-level and portable C++ ends up to limit yourself to all the things that are basically available in C.
Achei que este tipo de "flame war" sobre linguagens, IDEs, times de futebol, etc... só acontececem entre os mortais =)

Deixo duas frases:
"Use a melhor ferramenta para o trabalho"
"Para quem só tem um martelo, todo parafuso parece prego."

15 comentários:

Fábio Vendramin Guimarães disse...

Bom dia!
Esta informação foi tirada de onde? É um site ou revista na qual ele está associado?
É dificil de acreditar que ele (Torvalds) tenha escrito isso.
Mas se realmente escreveu, so tenho a dizer :( :(.

t+

Unknown disse...

Ué... foi tirado de uma lista de discussão, os links estão ali no texto do post. Mas caso não esteja vendo, segue o link novamente:

http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918

mzl disse...
Este comentário foi removido pelo autor.
mzl disse...

Linus, historicamente não é a favor de linguagens orientadas a objeto. E ele tem razão em falar sobre o C++. Essa linguagem foi uma derivação da derivação da derivação do C, e torna o item portabilidade simplesmente impossível. Quem escreve códigos para ambientes Unix sabe muito bem das dificuldades de se portar códigos entre as plataformas quando se usa C++. Ele tem razão e argumentos embasados para dizer isso. Portanto concordo em genero número e grau a respeito disso. ANSI C ainda é a melhor linguagem para se usar quando se quer performance, robustez e portabilidade.

Fábio Vendramin Guimarães disse...

"ANSI C ainda é a melhor linguagem para se usar quando se quer performance, robustez e portabilidade".

Dizer que C++ não presta, ai é de matar qualquer um. Claro que o C ANSI tem suas vantagens, como já foi dito. Agora devido estes fatos dizer que C++ não presta, sem comentários.
Ai eu pergunto, se não presta pq é usada? Alguem escreveu um artigo científico, (artigo mesmo, não isso que tem por ai dizendo que é artigo) provando que C++ não presta?
Não sou fanático por C++. Sou Projetista e desenvolvedor JAVA. Mas não dá pra ouvir que uma ou outra linguagem não presta.
Cada linguagem tem sua vantagem e desvantagem.
Se alguem acha que isso ou aquilo não presta, mostre como melhorar, sempre levando em conta o propósito da linguagem, claro.

t+

Unknown disse...

Olha... eu também não concordo muito em se falar: "Tal coisa não presta!", "Tal coisa é uma merda!"...

Eu não sei se vocês acompanharam a "discussão" no mailing list lá, mas pelo que entendi dos poucos emails que eu li lá, é que eles estavam falando de performance e sobre aquela implementação em específico.

Porém, depois começou a tornar-se um programing language war, na qual linus meteu o pau em C++ justamente por esta "falta de padronização" e que para se usar a tal linguagem c++ de forma descente, mantendo uma arquitetura boa, o cara tem que ser muito bom, e que segundo ele, não é isso que acontece ou que ele tem visto...

Mas existem ferramentas para cada coisa. O cara não irá usar C para fazer sistemas Web, ou coisas Enterprisey... cada ferramenta resolve uma coisa, serve pra uma coisa.

Dai vem aquela frase: "Para quem só tem/entende de martelo, todo parafuso é prego."

Mas que ele tem seus motivos, e tem uma certa moral para dizer que gosta ou não gosta de alguma coisa, isso ele tem.

Fábio Vendramin Guimarães disse...

"... e que para se usar a tal linguagem c++ de forma descente, mantendo uma arquitetura boa, o cara tem que ser muito bom, e que segundo ele, não é isso que acontece ou que ele tem visto..."
Apontar as DESVANTAGENS é uma coisa, agora, porque os programadores não usam da forma correta é outra. A linguagem não tem nada a ver com isso. Se o cara tem que ser bom pra programar em C++ (qualquer liguagem) então, os programadores de C++ devem estudar mais.
Agora se fosse apontado da seguinte forma, até concordaria. Por exemplo, DEVIDO AO FATO DA FALTA DE PADRONIZAÇÃO NO C++, ISSO TORNA A PROGRAMAÇÃO MAIS COMPLEXA EM RELAÇÃO A MULTIPLATAFORMA.... .. PORTANTO ISSO SERIA UMA DESVATAGEM, POIS O PROGRAMADOR TEM QUE SER BOM, NISSO, NAQUILO E TAL :). JA NO C ISSO É NATURAL.... BLA BLA BLA...

Java por exemplo, Se o programador utilizar bibliotecas do SO em particular, é claro que não rodará em outro SO (Windows x Linux). Agora se o programador fez isso, problema dele (ele deve saber o que esta fazendo :) ). Nem por isso JAVA não presta. Não tem nada a ver.
t+

Unknown disse...

Mas eu concordo que certas "linguagens" não ajudam a se ter uma boa arquitetura.

Mas uma boa arquitetura também, depende de cada caso, e para cada caso se tem uma melhor linguagem para se usar.

Por exemplo, esses dias precisava fazer uma "descompactação" em massa de arquivo, e te digo que eu não sabia como fazer aquilo de uma maneira "descente". Quem fez pra mim foi o tal do menino com toc ai em cima, porque ele tinha a melhor ferramenta para fazer aquela tarefa, enquanto que eu estava tentando serrar uma arvore com um martelo =)

Mas agora vamos convir, que se você vai usar uma certa coisa, sabendo que se mudar um A na sua infra, terá que mudar o programa, recompilar, etc, isso não é nada bom =)

mzl disse...

Como dizemos em direito, o onus da prova cabe ao acusador, vou argumentar pq concordo com Linus Torvalds que C++ nao presta:
- Portabilidade 0: Todas declaracoes using sao esparsas entre as plataformas, alem de cada compilador de cada plataforma usar seu padrao. Por exemplo: a declaracao de um metodo, principalmente o main, nao segue forma padrao. Voce so conseguira chegar proximo de portabilidade se voce fizer um codigo o mais ANSI C possivel.
- Reusabilidade 5: Pelo fato dos compiladores nao usarem um padrao de compilacao, torna-se muito temerario o uso de um metodo ou classe entre projetos.
- Performance 5: A performance nao e o ponto crucial dessa linguagem pela forma como ela trata, principalmente, acessos I/O, sempre em contextos de alto nivel.
- Robustez 6: E possivel fazer um codigo muito robusto, porem ele pode facilmente se tornar ilegivel para um outro programador.

Ai voce me diz que não aceita os outros dizerem que não presta! Muito bom. Vou dizer um ponto positivo dessa linguagem: Quando um aluno de faculdade quiser treinar seus conhecimentos de Orientacao a Objeto usando uma linguagem de um nivel mais baixo. Só!

Agora me digam, além desse ponto, pq mais se usaria a linguagem C++???

Fábio Vendramin Guimarães disse...

Mas se vc sabe disso, entao vc não escolheria a linguagem FULANO DE TAL. Mas nem por isso ela é uma PORCARIA. O meu comentário aqui é em relação a não concordar em ALGUNS aspectos. Por exemplo, generalizar C++ não PRESTA. Como vc disse, dependendo do problema, será resolvido de acordo com o contexto e escolhido o que se encaixa.
Não estou discutindo aqui Arquitetura, mas tem certos comentários que é complicado aceitar. Por exemplo, "Linus, historicamente não é a favor de linguagens orientadas a objeto".
Qual o problema da Orientação Objeto?

Fábio Vendramin Guimarães disse...

Pessoal,
Gostei dos comentários. Mas eu paro com minha argumentação. Não tenho que mostrar as vantagens de C++, muito menos desvantagens. Tem seus méritos e é utilizada, então o que eu vejo não existe.
Tive uma professora de Portugues, que dizia, "TOMEM CUIDADO COM AS PALAVRAS: TODO MUNDO, SEMPRE, NADA PRESTA, ETC". Toc, Falar que a vantagem do C++ é essa ai, nem tem como discutir de forma saudavel.
Abracos.

mzl disse...

"Linus, historicamente não é a favor de linguagens orientadas a objeto"
Fabio veja bem: eu disse que Linus Torvalds não gosta. Eu gosto muito de OO. Eu só argumento em favor dele, pois temos muitos exemplos do que ele falou. Vamos dar outros exemplos: a VM do Java é escrita em que linguagem? C++ ou C? John Carmack escreveu o Doom em C++ ou C? São apenas argumentações que embasam a opinião do Linus Torvalds. Portanto é perfeitamente aceitavel o ponto de vista dele. Eu, particularmente, não uso C++ para absolutamente nada. Se um projeto é OO, usemos C#, Java ou outras. Escolher o C++ é um erro pois temos outras linguagens com melhores vantagens. E foi exatamente isso que eu entendi da opinião do Torvalds.

Anônimo disse...

Nossa, nunca ri tanto na minha vida... C++ é uma linguagem de sintaxe extremamente rica, portável, se o Dr Linus aí não estudou direito, problema é dele.

Programo C#, C++ e Java, garanto que há possibilidade SIM de se fazer um aplicativo com C++ e o BloodSheed com toda tranquilidade do mundo, e as recompensas de se trabalhar em nível intermediário.

Anônimo disse...

Já imaginaram um Windows todo feito em Java? a gente teria que ter um Terabyte de ram!

Unknown disse...

eu acho que vc não entendeu muito bem o post e embora esse negócio de "Language-Flame-War" não me agrade, eu acho que o cara tem uma certa autoridade para falar o que ele falou.

E da perspectiva e no contexto que ele estava falando, creio que ele deva estar certo.

E outra, a questão aqui não é em qual liguagem é feito, e com certeza seria impossível fazer um SO em Java.