18 Aug
Não tenho tanta experiência com C++, mas a que tenho já é suficiente para mim.
C++ é uma linguagem derivada de C, acrescentando-se suporte a orientação a objetos. Não que não seja possível escrever programas orientados a objetos em C (o kernel do Linux faz isso em vários lugares), mas dá bastante trabalho.
A linguagem tem como único ponto positivo o suporte a orientação a objetos, definindo o que são classes e suportando herança entre elas; só.
Em compensação, tem diversos problemas: demora para compilar, seus programas são lentos (apesar de dizerem o contrário, Java é mais rápido que C++, por exemplo), suporta herança múltipla (ou seja, apóia o uso de hierarquias malfeitas), mistura paradigmas diferentes de programação (procedural e orientado a objetos), torna os programas difíceis de serem refatorados e exige que o programador se preocupe com alocação de memória, algo que a maioria das linguagens de programação orientadas a objeto não exige, graças à coleta de lixo.
Em resumo, se você quer C com orientação a objetos, prefira Java ou C#. Qualquer um dos dois é melhor do que C++ e, provavelmente, mais eficiente. Agora, se você gosta de POG (programação orientada a gambiarras), C++ é uma boa.
Tem algo a acrescentar? Concorda/discorda com o que foi dito? Sua colaboração é muito bem-vinda! Comente abaixo, comente no fórum ou envie um e-mail para contato at vidageek.net.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
Email This Post
88 Responses for "Linguagens de programação - C++"
Eu vou ter que discordar.
Bem, programo em Java e sei que é bem mais satisfatorio programar em Java, principalmente quando se está começando.
Entretanto, às vezes, voce precisa usar o C/C++.
Principalmente pra programar sistemas embarcados, visto que é muito melhor programar em C do que em Assembler.
É util se usar C/C++ quando se precisa ter um controle total do programa, quando voce tem pouca memoria disponivel, como no caso de microcontroladores.
O problema da Herança mutipla, na mao de um bom programador deixa de ser um problema, mas na grande maioria dos casos(no meu caso tambem) é interessante so uma superclasse.
Mas assim Luiz, voce ta afastando muitos futuros programadores C :p.
Essa é a opnião de alguem que não programa em C++!
Abraços
1. “Não tenho tanta experiência com C++, mas a que tenho já é suficiente para mim.” <- Só se for para dar opiniões sem fundamento teórico e prático.
2. “A linguagem tem como único ponto positivo o suporte a orientação a objetos, definindo o que são classes e suportando herança entre elas; só.” <- Realmente, aqui você reforça o ítem 1. Sua experiência é suficiente para tirar conclusões erradas.
3. “demora para compilar, seus programas são lentos (apesar de dizerem o contrário, Java é mais rápido que C++, por exemplo)” <- Em muitos casos, demora pra compilar sim, pois o indivíduo não usa objetos pré-compilados, e recompila tudo sempre.. você sempre faz isso, certo? Como você descobriu que Java é mais rápido que C++? Usou o relógio do windows pra cronometrar? Algumas coisas são muito mais rápidas em Java, e outras em C++. Procure alguns benchmarks e verás.
4. “suporta herança múltipla (ou seja, apóia o uso de hierarquias malfeitas)” <- Herança múltipla == hierarquia malfeita? Suportar não significa que você deve utilizar. Desde quando utilizar 3 ou mais níveis de herança é mais elegante ou “menos mal feito” que utilizar herança múltipla?
5. “mistura paradigmas diferentes de programação (procedural e orientado a objetos)” <- Você ainda não parou com as drogas? Desculpe, mas quem mistura esses conceitos no código é o próprio amador, ops, quis dizer programador.
6. “torna os programas difíceis de serem refatorados” <- Que *diabos* de IDE você usa? Tente algum Eclipse da vida e leia sobre Boost, STL, etc.
7. “exige que o programador se preocupe com alocação de memória” <- Sim. Mas existem algumas dezenas de implementações de garbage-collector para C++. Mas você já deve saber, afinal não é novidade.
8. “Em resumo, se você quer C com orientação a objetos, prefira Java ou C#” <- Só quando você publicar sua JVM suficientemente pequena para ser utilizada em micro-controladores.
Concordo que Java e .NET sejam muito mais produtivos e “fáceis”. Você só deveria utilizar argumentos com fundamento.
Acho que o restante não necessita comentários.
esse post vai gerar muita confusão! principalmente quando vc fala sobre POG.
eu tb vou ter que discordar. quem programa com POG, faz isso em qualquer linguagem. java nem sempre é mais rápido que c++ e nem sempre podemos utilizar java.
um bom programador, com uma boa metodologia de desenvolvimento, programa muito bem em qualquer linguagem.
A propósito, isso não é pegadinha né? :)
1o de Abril atrasado?
C++ mais rapido que java?
Não vou falar mais nada porque o Jardel já disse tudo. O autor usa drogas pesadas ou deveria se informar melhor.
Olá, Eduardo.
Critiquei o C++, não o C. Gosto muito de C (aliás, teremos um post falando só sobre C), mas acho que C++ é feio e desnecessário. Sim, herança múltipla só é um problema com programadores ruins, mas deles o mundo está cheio, então acho melhor que a linguagem não dê brecha.
Olá, Jardel.
Vou rebater algumas de suas críticas (apenas as que não são pessoais):
“Como você descobriu que Java é mais rápido que C++?”
Já li benchmarks realizados com seriedade, utilizando uma virtual machine boa para Java e, sim, Java foi mais rápido do que C++.
“Herança múltipla == hierarquia malfeita?”
Sim.
“Desde quando utilizar 3 ou mais níveis de herança é mais elegante ou “menos mal feito” que utilizar herança múltipla?”
Isso mostra que você não sabe do que eu estou falando. Herança múltipla não é ter uma hierarquia grande, mas sim uma classe ter mais de uma classe mãe.
“Desculpe, mas quem mistura esses conceitos no código é o próprio amador, ops, quis dizer programador.”
Sim, mas se a linguagem permite programas malfeitos, ela é ruim (eu não disse que eu uso isso).
“Tente algum Eclipse da vida e leia sobre Boost, STL, etc.”
Já usei Eclipse, NetBeans e Visual C++. Nenhum deles ajudou tanto a vida neste ponto.
“Só quando você publicar sua JVM suficientemente pequena para ser utilizada em micro-controladores.”
Em micro-controladores, é muito melhor usar C, logo. Não faz sentido, para mim, usar orientação a objetos em micro-controladores. Se você puder exemplificar um caso em que isso não é verdade, seria ótimo.
Olá, Rafael.
“eu tb vou ter que discordar. quem programa com POG, faz isso em qualquer linguagem.”
Sim, mas se a linguagem facilita isso, pior ainda!
“java nem sempre é mais rápido que c++ e nem sempre podemos utilizar java.”
Java é mais lento que C++ quando este é usado como C, e não como C++.
Obrigado a todos pela visita e pelos comentários.
Cada macaco no seu galho. Quando o negócio é escrever aplicações para microcontroladores, opa, cai bem um C/C++ da vida.
Para aplicações desktop, cai bem até um (perdão) Delphi =P
Para aplicações WEB, vai um PHP (ó bom e velho PHP).
Além de outras, já trabalhei com essas três. Cada uma no momento em que era mais apropriado.
Só o Java que, na minha opinião, não cai bem em lugar nenhum. Hahahaha. É a bazuca para matar moscas!
[]’s
Cara, vc é o pior tipo de usuário, se for dizer que liberdade é igual a execução errada..ou liberdade pra fazer besteira, vc deveria virar um socialista e vender sua alma para o governo cuidar, ou melhor, programar.
Programar bem com liberdade ou não da linguagem, depende do programador! Não é a linguagem que fez o homem e sim o homem que fez a linguagem e que à usa.
Uma linguagem tão poderosa como essa simplemente cria os seus momentos de diversão como Battlefield, Tibia, e a maioria de jogos. Até mesmo esse seu Windows que está usando(aposto que é…).
#pronto falei
Olá a todos,
Antes de mais nada gostaria de agradecer a iniciativa de todos de defenderem seus pontos de vista. Apenas gostaria de pedir que evitem agressões pessoais, pois é possível destruir uma boa discussão no momento em que ataques pessoais começam a ser feitos.
Voltando a discussão principal (C++), gostaria de acrescentar um pouco de lenha a discussão ;).
C++ é uma linguagem que evito utilizar. Por que isso? Por que me agrada muito mais uma outra linguagem Orientada a Objetos (Java). Essa é a única razão.
Mas mesmo assim, como cheguei a programar em C++ por cerca de 8 meses (infelizmente não foi como profissional, apenas fazendo programas pontuais) acredito que posso mostrar como foi meu contato.
Uma das coisas muito interessantes que c++ possuem (infelizmente não foi colocado no post) é o suporte a Templates (reificados, não como a sun copiou para o Java - com erasure). Isso realmente facilita a vida do programador. Além disso, existe a possibilidade de você criar seu próprio alocador de memória, o que pode deixar seu programa muito mais eficiente do que o uso de um alocador genérico (cheguei a escrever um para C, que aumentava grotescamente a performance dos meus programas. Nunca usei para C++ - nem sei como faria). Uma coisa que me incomoda um pouco é que não existe um GC padrão no próprio C++. Você precisa pegar uma implementação, mas você tem a garantia de que pode não usar se quiser.
Novamente, em sistemas embarcados, embora C++ seja bem cogitado (Java está fora de cogitação), acredito que ainda ficaria com C puro por duas razões: Uma, C me é muito mais familiar do que C++ (mesmo código ansi c compilando em C++. Se for pra usar C, uso C) e C ainda me dá mais controle sobre memória em processamento do que C++. Em um sistema como esse, eu não confiaria em implementações genéricas como as da STL. Sempre é possível ganhar memória e processamento se você deixar seu código mais epecífico.
Jogos? C puro (orientado a objetos) e usando polimorfismo dinâmico com ponteiros de funções e void*+macros (Me desculpem quem acha que Java é bom pra jogos de grande porte, mas terão que me provar isso - e não vale benchmark nem demonstração formal. Tem que fazer o jogo :D)
Uma coisa que sinto falta em todas essas linguagens é um pré-compilador extensível. Já pensou simplesmente colocar um plugin e ter AOP direto na sua linguagem preferida? DbC?
Outros pontos que eu poderia levantar seriam muito presos as tecnologias Java e minha falta de conhecimento de C++ impedir-me-ia de falar algo que preste.
Quanto a discussão secundária (Orientação a Objetos e outros paradigmas) vou ser direto. Tanto faz, desde que você faça direito. Quero ver alguém implementar o quicksort, de forma eficiente, orientado a objetos. Fora de cogitação. É um problema que deve ser abordado de forma procedural. E o sistema do Zé da Padaria ou da Maria do Estoque? OO resolve muito bem. Procedural já fica um pouco mais comlpicado. HOJE, minha preferência (e minha maior experiência) é por OO e por isso me sinto mais a vontade para falar dele.
Um dos objetivos de OO é isolar conhecimento. Quando você cria sua classe CPF, a validação deve estar nela. Ponto (nem tanto. Em alguns casos - são poucos - pelas mais diversas questões você vai ter que separar lógica de dados). Você isola o dado, o comportamento e ganha de graça um free (Ou o GC coleta ;)) na sua memória. Você não vai precisar lembrar de validar seu CPF quando criar um novo. Ele já vai fazer isso pra você. Isso é um grande ganho.
Quanto a Herança, ela viola esse princípio de isolamento. A filha passa a ter conhecimento da classe mãe de uma forma muito próxima. Mudanças na mãe afetam a filha e podem quebrar seu código (estou preparando um post sobre herança e lá explico melhor esse problema). Quando você tem herança multipla, então, a coisa piora. Imaginem o seguinte caso:
A classe A e B tem o método blah. Se C estende A e B e você chama o blah, será chamado o da A ou da B? Se não me engano (por favor me corrijam) C++ deixa para a implementação do compilador decidir. Então o código que funciona quando compilado no g++ pode não funcionar em outro compilado com algum outro.
Desculpem o comentário mais longo que o post, mas foi necessário.
E no momento o que mais me fascina mesmo não é C, C++, Java, Ruby, Perl, Python, etc mas sim Eiffel, Scalla, Erlang e JavaScript (o famigerado hehe)
Ah, esqueci de comentar. Não sou completamente contra herança, apenas quando temos opções melhores. Um Template Method bem usado pode fazer milagres!!!
Acho que voce pegou pesado demais pro lado que voce nao tem conhecimento. Algumas afirmacoes no seu texto precisam ter fontes, como por exemplo, dizer que Java eh mais rapido que C++. Voce leu onde? Mostre as fontes, eh o melhor de jeito de expor suas opinioes.
Se quer C com orientacao objeto, melhor usar C# ou Java em vez de C++? Interessante… Melhor dizer, se nao sabe programar em C++, use C#. Voce sabe o que eh CLR? Voce ja comparou o desempenho de uma linguagem como C++ com VisualBasic? ou C#?
Desculpa, mas eu vejo o beneficio do Java e do C# quando penso em gerenciamento de memoria. Fico despreocupado e deixo o garbage collector desses caras fazer a maior parte do servico.
Se voce usou o Firefox pra escrever este post, voce acharia que ele seria melhor se fosse escrito em Java ou C#? Vamos dizer que voce usou o Internet Explorer. Voce acha que a Microsoft usou C# ou VB pra desenvolver ele?
A Microsoft oferece trabalho na area de CLR. Sabe em qual linguagem o empregado precisa trabalhar pra este posto?
Como dizia aquele cara da escolinha do professor Raimundo: “Nao me venha com churumelas!”
Olá, Leandro.
“Cada macaco no seu galho. Quando o negócio é escrever aplicações para microcontroladores, opa, cai bem um C/C++ da vida.”
Diria que só C cai bem… Ainda não me convenceram que é bom usar C++ em microcontroladores.
“Para aplicações desktop, cai bem até um (perdão) Delphi =P
Para aplicações WEB, vai um PHP (ó bom e velho PHP).”
Sim, para cada aplicação, existe uma linguagem que melhor se adequa às suas necessidades (como disse no post inicial dessa série).
Olá, Seliakile.
“Programar bem com liberdade ou não da linguagem, depende do programador! Não é a linguagem que fez o homem e sim o homem que fez a linguagem e que à usa.”
Concordo plenamente com você. Estou criticando a linguagem, não quem usa ou gosta dela. Apenas dei minha opinião com relação ao suporte a herança múltipla, por exemplo.
“Uma linguagem tão poderosa como essa simplemente cria os seus momentos de diversão como Battlefield, Tibia, e a maioria de jogos.”
Sim, mas não é porque ela foi bem usada que ela é boa.
“Até mesmo esse seu Windows que está usando(aposto que é…).”
Não, não estou usando Windows (mas tenho instalado). Aliás, o Windows não é um exemplo de bom programa feito em C++… ;)
Olá, Tiago.
“Algumas afirmacoes no seu texto precisam ter fontes, como por exemplo, dizer que Java eh mais rapido que C++.”
Tem razão, precisa de fontes. Aqui tem uma:
http://www.kano.net/javabench/index
Tem muitas por aí dizendo o contrário, também. O melhor, mesmo, é você fazer seus próprios testes e ver quando compensa usar Java ou não.
“Se quer C com orientacao objeto, melhor usar C# ou Java em vez de C++? Interessante… Melhor dizer, se nao sabe programar em C++, use C#.”
O que quis dizer é que C# e Java têm praticamente a mesma sintaxe que C e dão um suporte melhor a orientação a objetos.
“Voce sabe o que eh CLR?”
Não. Se você puder explicar, ficaria grato. Mas acho que isso não tem a ver com a qualidade de C++.
“Voce ja comparou o desempenho de uma linguagem como C++ com VisualBasic?”
Sim, e eu sei que é bem mais rápido.
“Se voce usou o Firefox pra escrever este post, voce acharia que ele seria melhor se fosse escrito em Java ou C#?”
Sim, eu usei o Firefox e, não, acho que ele seria a mesma coisa (ou até pior) se fosse escrito em outra linguagem. Não estou criticando os produtos da linguagem, apenas a própria linguagem.
“A Microsoft oferece trabalho na area de CLR. Sabe em qual linguagem o empregado precisa trabalhar pra este posto?”
Provavelmente em C++. A Microsoft adora. Mas quem disse que o que a Microsoft gosta é bom?
Obrigado a todos pela visita e pelos comentários.
Não tendo o que falar é melhor ficar calado, pois calado você até se passa por sábio! Nada mais a acrescentar, Jardel Weyrich disse tudo!
Discutir não adianta, principalmente com quem tem ideias pré-concebidas, mesmo que não sejam coerentes, sic.
1o de abril atrasado realmente
esse post foi um lixo
[...] post nada tem a ver com nossa última polêmica ;) [...]
Gente a justificativa é clara, ele estava precisando de comentários no blog dele (olha os outros posts), ninguém estava comentando, então como estratégia ele colocar um assunto polêmico (e que não entende) no blog para ver se gera alguma verba com adSense. Só isso…
Quem mandou abrir a jaula dos trolls?
Isto não é um post, é um flamewar. Mesma guerra entre linux x windows.
Não tenho nem o que comentar. Já passei da fase do Java, hoje fico com C/C++ e Python.
Realmente Luiz, alguns argumentos tem fundamento, e eu comumente encaro C/C++ como uma coisa só.
Agora uma coisa eu tenho que pontuar, como podem existir tantos [i]tards[/i]?!
Eu ja vi isso em SO x SO, agora eu não conhecia isso entre liguagens de programação.
Quero so ver se tu escrever falando mal do Python, toda a comunidade linux (toda não, os tards somente) vão cair encima de voce, chamando voce de porco capitalista, e americano de merda.
Impressionante isso, só uma polemica pra mostrar como tem gente idiota no mundo.
OK, C++ é horrivel, alguem por favor avise ao google e tantas outras grandes empresas e programadores que mudem já para Java.
Diego Henrique:
E alguns módulos dele são em Java, o Gmail por exemplo :P
Felipe:
Sim, eu sei. O google usa muito java tambem, e python. Mas reza a lenda que o google-bot foi escrito em c++.
Luiz,
Me desculpe, mas você perde muito da moral pra poder pedir que não ofendam quando você pegou pesado no post.
Muito do que você criticou em C++ se aplica a C. Falta de garbage Collector, possibilidade de código porco, etc. Então criticar C++ nesses aspectos perde sentido quando elogia o C.
E isso que você prega de que Java é melhor porque tem GC que te deixa programar despreocupado… Isso sim é Gambiarra. Mas imagino que você falou isso sem pensar.
Faço parte de uma equipe que desenvolve um grande sistema de gerência de redes. Feito em Java. O sistema se conecta via rede a diversos equipamentos, usa também JMS e conecta com servidores de Banco de dados. SEMPRE precisamos cuidar se estamos desconectando, liberando recuros, caso contrário o sistema estoura a memória.
Isso é muito comum em um sistema feito em qualquer linguagem. É NECESSÁRIO atenção para desalocar os recursos quando não são mais necessários.
GC ajuda ? Com certeza. Mas ele resolve tudo só em sistemas pequenos. Em sistemas grandes dá uma falsa sensação de segurança que é muito perigosa.
Mas para um sistema grande, é claro, precisa conhecer bem a linguagem.
Olá, Daniel.
Eu sei que peguei pesado (até demais) neste post, mas discordar do que está escrito não dá direito a ninguém de me xingar. Eu não insultei ninguém, aqui (a não ser que exista alguém chamado C++, mas aí é mera coincidência).
O ponto de vista sob o qual critiquei a falta de GC em C++ não se aplica a C. C++, a meu ver (como já expliquei acima), tem o objetivo de ser uma linguagem de mais alto nível do que C. Portanto, me incomoda a falta de um GC por padrão na linguagem.
“E isso que você prega de que Java é melhor porque tem GC que te deixa programar despreocupado… Isso sim é Gambiarra. Mas imagino que você falou isso sem pensar.”
Não, não falei sem pensar. GC se aplica exclusivamente a gerenciamento de memória, e programar sem se preocupar com quando alocar e desalocar memória não é gambiarra, é liberdade para pensar em mais alto nível (o que é necessário quando se utiliza POO). Outros recursos (conexões de rede, arquivos) não são tratados diretamente pelo coletor de lixo e aí, sim, não liberá-los é gambiarra. Mas note que, quando lidamos com os recursos em Java, fazemos isso de uma maneira orientada a objetos. Em C++, a alocação de memória é procedural.
Obrigado pela visita e pelo comentário educado e pertinente.
Que Java, c++ c# que nada!
O negócio é programar em assemby mesmo, mas sem usar nenhum assembler pra isso: tem que ser tudo no notepad mesmo!!
X5O!P%@AP[4\PZX54(P^)7CC)7}$ESCREVI ESTE CODIGO USANDO NOTEPAD!$H+H*
“Sim, eu sei. O google usa muito java tambem, e python. Mas reza a lenda que o google-bot foi escrito em c++.”
Ué, essa é nova para mim… Sempre ouvi dizer que o google foi desenvolvido em BASIC….
Acredito que precise melhorar, e muito, os seus conceitos/conhecimento:
http://www.google.com.br
Sem comentários.
Abraços!
Sabe qual é a parte mais engraçada de alguém que diz que Java é mais rápido que C++?
É que as JVMs são feitas em C++ \o/
Ai se você pegar só a parte da JVM necessária, e juntar com seu código, e tirar as partes redundantas…
Nossa, O C++ ganha? (doh)
Outra coisa: Eu programo em C++, e não uso smartpointers, GC e qualquer dessas porcarias… Porquê? Porquê EU NÃO QUERO que limpem minha memória! Eu carreguei e quero deixar carregado ué! Quero usar meus recursos “bate-pronto” mesmo porque nos programas que faço (jogos) a parte mais lenta é justamente gravar as coisas na memória…
Se não vou usar os recursos do Java (que vão ficar ligado mesmo assim) porque eu o usaria? É mais fácil (e inteligente) usar algo que tenha exatamente o que eu necessito!
vc merecia uma coça por tantos disparatis eu um único post.
c um kra que não conhece C++ e está tentando aprender ler isso, vc destroy a vida do kra foi irresponsável da sua parte.
Prezado Luiz,
Não me aprofundarei nos seus comentários, que são um tanto infundados e provenientes de alguém que não tem o MENOR embasamento, nem capacidade para argumentar de tal forma sobre C++.
Vc é
Só digo uma coisa, para deixar para vc pensar:
O JVM Hotspot foi feito em C++.
“The HotSpot Java Virtual Machine is written in C++ (this is the leading edge, high performance replacement for Sun’s “classic JVM” which was written in C). ”
“Sun’s compilers have major components written in C++”
Antes de tudo, aprenda como programar antes de falar tais coisas.
Você deveria ter vergonha antes de vomitar pelos dedos como acabas de fazer.
Muita coisa que vc utiliza hoje, meu caro, eh produto de um processo que utilizou C/C++ como ferramenta.
Para vc brincar:
http://www.research.att.com/~bs/applications.html
Se ele queria popularidade, conseguiu. Mas, de brinde, levou uma bela indexagem no google negativa. Todo mundo que procurar por c++ , java , c++ x java , c++ melhor que java , java melhor que c++ , c++ java benchmark , vai cair aqui e vao ler que o blog não é idôneo.
Luiz, acredito que o mais sensato que você tenha a fazer é remover esse post, ou publicar um post falando que você não vai tocar em assuntos que não conheça. Eu programo em C++ ha 10 anos, ja programei em PHP e com Java. C++ resolve muito dos meus problemas com uma produtividade e eficácia muito grande. (e sem problemas de deploy tão complicados como o Java). Não critíco o Java, como disse o amigo, cada macaco no seu galho. Logo se você não gosta por birra, ou por supertição, azar o seu. Mas cuidado com o que você publica na internet, há muitos novos programadores em potencial surgindo todos os dias, se eles lerem mentiras podem acabar ficando confusos. Logo, é melhor que você saiba sobre o que fala, e fale fundado por fatos, e não por “achismos” ou “crendices”.
Bem,
Pelo breve texto que você escreveu e o suficiente para ver que você e uma pessoa muito VERDE e completamente limitada para poder falar inúmeras bobagens num pequeno intervalo de tempo!
OBS: Procure ler e se informar um pouco mais, pois assim você irá evitar gerar tantos “flames” em seus POSTS
[]s
Posts como esse so mostrar o nível de vários ‘profissionais’ do mercado de informática…
Trabalho a 15 anos com C (e C++ posteriormente), posso te dar uma resposta com fundamento: C++ pode sim ser mais lento do que Java (ou o .NET), desde que o programador não saiba o que está fazendo… com C/C++ (e ASM) você pode tirar o limite de um particular hardware, o que não acontece com linguagens interpretadas (mesmo suportando JIT, pois há ainda os padrões da VM que interpreta, alias VM implica em um outro nível em cima de um nível inferior, o que, sem sombra de duvidas, causa overhead, além da total FALTA DE CONTROLE sobre o seus recursos (memória, etc).
Portanto, pra aplicações que não são resource-hogs ou resource-intensives, pode-se (ou deve-se, dependendo do caso) usar uma coisa mais ‘facil’ (afinal, a ‘onda do momento’ para o pessoal é o famoso ‘RAD’) como o .NET ou Java, pois não se há necessidade de coisas como segurança da memória ou tempo real, ou alto volume de processamento.
Não vou me aprofundar mais, sugiro que antes de se criar um post desse genero, pense bem como e o que falar.
Olá a todos!
Nossa, quantos comentários de uma vez! Não vou responder todos de uma vez. Vou responder num geral:
Expressei, neste artigo, minha _opinião_ sobre a linguagem, não apenas _fatos_ sobre ela. Dizer que uma linguagem de programação não é boa não implica que os programas feitos com ela vão ser ruins, apenas que os programadores vão “sofrer” mais para fazer um programa bom com ela.
Concordo com a liberdade para o programador em poder alocar memória, brincar com ponteiros e tudo o mais, e gosto disso. Mas acho isso incompatível com o paradigma de orientação a objetos que o C++ traz para o C, e é isso que eu critico nessa linguagem, principalmente.
Mais uma vez: esse post também foi para expressar uma opinião, não apenas falar de aspectos técnicos da linguagem. Essa última parte está amplamente disponível na Internet; queria acrescentar algo, não repetir o que já existe. Se você não concorda com a minha opinião, tudo bem. Não tenho a pretensão de estar certo. Mas não comente só para dizer que não devo expressar minha opinião só porque você não concorda com ela.
Atenciosamente,
Luiz
Não tem problema você expressar sua opinião, mas você deve argumentar ou dizer que você provavelmente está errado, porque pessoas desenformadas podem vir, ler as porcarias que tu escreve e acreditar.
Tenho visto uma sequência de barbaridades e, apesar de acreditar que dar atenção a esse tipo de sandice é perda de tempo, entro na discussão pois me preocupo com o futuro do desenvolvimento de software no Brasil. Sou desenvolvedor C/C++ a 14 anos, e Java a 10, então acho que posso falar alguma coisa.
Ver um site cujo lema é “Linux, Open-source, Programação e Produtividade” falar que C++ é ruim me parece piada. O tal Luiz deve ser um desses adolescentes que não sabe que o Linux, citado no lema do site, é feito em parte em C++. Não deve saber que JVM, o hotspot, os compiladores da Sun e afins também possui partes em C++.
Dizer que Java é um C com orientação a objetos então é o tipo de piada que me deixa de cabelo em pé. Java não é C, e C não é Java. Java é uma linguagem nova, criada do zero, inspirada por C++. C# é uma linguagem nova, inspirada pela necessidade da Microsoft de ter o “seu Java”, visto que o J++ foi um tiro nágua.
Java e .NET são linguagens pra uma coisa, C++ é pra outra. Apesar de todas serem linguagens para multiplos propósitos não dá pra escrever um sistema operacional em .NET ou Java, pois o sistema operacional dessas é a máquina virtual. Em C++ dá.
Não bastasse o artigo ridículo e técnicamente limitado ainda vêm a justificativa, “acho que C++ é feio e desnecessário”. Só faltou chamar a linguagem de “boba”. Tem gente que deveria parar de perder tempo escrevendo artigos ridículos e estudar.
Ps.: Jonas, a linguagem chama-se Scala, não Scalla, e ela roda na VM do Java. Leia a minha tradução da documentação oficial no meu site, em http://www.hypequino.com, e diga o que acha.
De fato, Java é mais rápido do que C++.
Pena que esqueceram de avisar as empresas que fazem grandes jogos (EA, Activision), o Google, entre outras.
Na boa, você é um AMADOR.
Nossa cara, você foi muito infeliz nesse post seu!
Sem fundamentação nenhuma esses seus argumentos.
Eu sou intermediario em C, faço ciencia da computação e tenho muitas duvidas sobre a linguagem , nao vim aqui para falar do tópico, mas uma coisa é certa os COMENTARIOS estão me ajudando muito, exceto aqueles de agressão.
Agora por exemplo vou ler sobre benchmarks, boost, stl , me informar.
Bom, desconsiderando as ofensas pessoais (dos que se acham melhores que o amador aqui):
Marcelo, leia os comentários com atenção, por favor. Disse que a linguagem é feia e ruim para mim, mas isso não significa que não possam sair coisas boas dela. Também não leve as coisas ao pé da letra: Disse que Java é C com orientação a objetos apenas no sentido da sintaxe, que é praticamente idêntica (embora a comparação seja melhor com C++).
Eduardo, você está no caminho certo indo estudar por sua própria conta. Boa sorte com seus estudos. Só espero que você chegue à mesma conclusão que eu: C++ é feio (opinião que não é apenas minha, mas de muitos programadores bons que conheço) mas tem muita coisa boa feita em cima dele.
Obrigado àqueles que comentaram algo de útil.
[...] » Um dia desses passeando por blogs ví um post que me chamou a atenção. O título é Linguagens de programação - C++ e, claro, chamou minha atenção, não apenas por causa do post assim com [...]
Luiz citei seu post em um post meu.
Gostaria de saber o que acha após ler o que escrevi.
Se algo muda, se viu algo que não tinha pensado sobre ou se continua com o mesmo pensamento.
O post está em:
http://murilo.wordpress.com/2008/11/14/direito-de-defesa-ao-cmaismais/
Abraço
Em poucas ocasiões se tem oportunidade de ler tanta besteira junta em tão poucas linhas. Criticar algo que já admite que não conhece é, no mínimo, um grande irresponsabilidade. Tenho pena do sujeito que está iniciando e que ao ler bobagens do tipo, as aceita como verdadeiras.
A bobagem da qual mais ri foi “Java é mais rápido que C++”. Uma linguagem interpretada por uma máquina virtual mais rápida que um código objeto executado diretamente pelo processador? Essa foi de doer. Cara, você é um completo “sem noção”. :))))
Na boa Luiz
Pára de falar coisa sem fundamento.
Antes de dizer que a linguagem é “feia” e “desnecessária”,
usa teu tempo pra ler os livros do Bjarne , criador da linguagem, p entender o por que das características de C++, em vez de usar o tempo p escrever achismos em blog, dizendo ainda que “bons programadores” concordam contigo.
O mundo não é só OO, não é só linguagem pré-compilada, não é só software de ERP e gestão.
Olá, Murilo.
Gostei bastante do seu post.
Antes de mais nada, deixe-me falar um pouco mais sobre minha experiência com C++, que todos criticam, para ser um pouco mais objetivo: venho trabalhando com C++ há um ano, no meu projeto de iniciação científica. Fora isso, já trabalho com C e Java há quatro anos.
A STL é, sim, um diferencial de C++. Admito que esqueci de comentar sobre ela no post, mas foi porque minha análise foi muito voltada a programação orientada a objetos com C++.
Quis dizer que orientação a objetos é o diferencial de C++ com relação a C. Também não fui muito claro, não é? Tudo bem, também não é o único diferencial. C++ também permite o uso de programação genérica e namespaces, como você disse. Mas Java também não tem como único diferencial de C++ o Garbage Collection, seguindo a mesma linha de raciocínio. Também tem reflection, que é muito útil.
Velocidade é um ponto criticável de C++. Tanto em compilação como em execução. Fui um pouco precipitado em dizer que Java é mais rápido que C++, mas isso acontece sob algumas condições, sim, pois a JVM (da Sun, pelo menos) pré-compila alguns trechos de código de uso mais freqüente, fazendo com que sua execução seja muito rápida. Mas, em geral, não se pode dizer que Java é mais rápido que C++ para execução. Erro meu.
Agora, quanto à compilação, C++ é muito lento! Não importa que você use bibliotecas e código pré-compilado (eu uso, sim), a velocidade de compilação deixa muito a desejar.
Minha crítica à variedade de paradigmas foi, na verdade, ao suporte nativo a orientação a objetos de C++; mais uma vez me expressei mal. Este suporte é ruim a meu ver, pois o C++ continua exigindo que você se preocupe com desalocação de memória (disse alocação no sentido de gerenciamento). É lógico que existem os smart pointers e as bibliotecas de coleta de lixo, mas o primeiro exige a programação dos smart pointers e o segundo não é nativo (não vem com a linguagem).
Para terminar: sim, toda linguagem permite POG, mas o que quis dizer foi que a sintaxe e a flexibilidade de C++ facilitam isso, permitindo código ilegível com menos esforço.
Enfim, eu sei que foi um post bastante xiita, e não sou normalmente assim. Fiquei com um pouco de raiva de C++ neste ano que o usei. Mas espero ter retificado minha visão com este comentário.
Na boa, Luiz, desiste cara. Desculpe-se e apague o post.
Recomendo-lhe estudar sobre hardware, assembly e sistemas operacionais. Parece que o seu mundo é o de software de gestão, etc.
O mundo não é só isso, viu, tudo isso depende das inovações de baixo nível, assim como estas são dependentes dos recursos oferecidos pelo hardware.
Por exemplo, MS-DOS não é seguro porque foi projetado para processadores em que a proteção de instruções / memória não estavam disponíveis.
Faça um curso superior de Engenharia ou Ciência da Computação ao invés de ficar lendo tutoriais para noobs pela Web
Olá, Douglas (e aqueles que duvidam do que sei)
Em primeiro lugar, gostaria de dizer que estou no último ano da graduação em Ciência da Computação pela Universidade de São Paulo. Não me venham dizer para estudar algo que já sei.
Em segundo lugar, leiam o comentário que fiz sobre o post do Murilo. Acho que ele esclarece meu ponto de ataque ao C++.
Por fim, gostaria de dizer que programo em C++ e recomendo seu uso em alguns casos (leia-se casos em que faz falta C não ter STL), mas não para orientação a objetos nem sistemas operacionais nem microcontroladores. Nestes dois últimos, C é preferível, a meu ver.
Obrigado a todos pelos comentários (pelo menos pelas partes construtivas)
Conheço um projeto de embarcado que usa C++ com STL. Orientado a objetos e com threads. Tudo isso para ser eficiente, bem arquitetado e caber em 2K.
Conheço um projeto de embarcado que usa C++ com STL. Orientado a objetos e com threads. Tudo isso para ser eficiente, bem arquitetado e caber em 2K.
Ah, reitero a minha primeira afirmação.
Luiz, obrigado pelo elogio.
Fico feliz que tenha entendido o motivo de meu post, quero dizer, que não tenha entedido mal (uma provocação ou sei lá o que).
Esse seu comentário nº 47 sim daria um post interessante sobre sua opinião a respeito do C++.
Ah, e fiz um update falando dessa compilação do código Java.
Até outra esbarrada pela web :p
Olá, Murilo.
Obrigado. Eu tinha pensado em escrever um outro post falando mais sobre C++, mas acho que agora todos os comentários já foram feitos aqui…
Até mais!
Os gurus do software livre adoravam C e faziam de tudo para o gcc ficar ótimo, e quase sempre esqueciam do g++. Mas por causa de projetos grandes, e extremamente bem feitos, como o KDE, o g++ ficou bem mais rápido e gera binários muito bons.
Sobre C com objetos, um excelente exemplo é a biblioteca gráfica gtk, que usa gobject para implementar herança, polimorfismo e algumas outras coisas interessantes de POO.
O mais interessante do gobject é a incrível facilidade de criar binds para outras linguagens. É tão fácil que um único script em python pode criar um bind sem nenhum defeito de um projeto bem escrito. Eu testei com gtk e gksu.
E, errr, linux é um kernel, como você pode falar em kernel do linux?
Ah! Só para completar, um estudante do BCC da USP deveria conhecer o mais do que fantástico http://l4ka.org/
Nada como um microkernel feito em C++ com um rapidíssimo sistema de IPC, para servir de contra exemplo, hein?
Depois de uma olhada nos projetos relacionados, como pistachio, l4hurd e l4linux, que são excelentes provas de conceito.
Olá, Max
O g++ realmente é rápido (pelo menos comparado ao cl, da Microsoft), mas ainda é bem mais lento que o gcc e o javac, da Sun (uma comparação um pouco injusta do ponto de vista técnico, mas não do ponto de vista prático).
Disse kernel do Linux porque costumo me referir ao GNU/Linux (sistema operacional) como Linux.
É, infelizmente não temos um aprofundamento tecnológico muito grande em sistemas operacionais na graduação. Mexemos um pouco com o Linux, mas a maior parte nós vemos na teoria somente. Parece legal esse projeto, mas nunca mexi com ele, então não sei se o IPC dele é realmente rápido. Se você diz… :)
Obrigado pelo comentário!
O g++ está mais rápido que o javac da sun, eu *testei* com os códigos disponibilizados na comparação de c++/java que você passou.
Tem uns benchmarks do l4 no site, eu testei uma imagem no bochs e o treco realmente se comunica rápido!
Cuidado, você anda fazendo afirmações demais, sem verificar ou pensar o suficiente. Já vi isso em outros posts e eu não quero meus colegas do bcc passando vergonha por aí. :)
Olá, Max
Pode ser que, para códigos pequenos, o g++ seja mais rápido do que o javac por causa do tempo de inicialização. Mas tente compilar um projeto com 10 bibliotecas de dependência e 20 classes com cada um deles, e você vai ver do que estou falando… :)
Para você ter uma idéia: meu projeto de iniciação científica, escrito em C++, depende de umas 5 bibliotecas; até aí, sem problemas (não influencia muito). O problema são as 20 classes… Demora mais de 1 minuto para compilar. Agora, um projeto que estou desenvolvendo onde trabalho, em Java, tem muito mais bibliotecas de dependência e também tem umas 20 classes, e demora 10 segundos para compilar.
Muito bom! Espero que esse l4 seja realmente bem programado além de eficiente.
Sobre as afirmações: posso estar enganado, às vezes, mas acho melhor expor minhas opiniões e aprender com os outros do que guardar “minhas verdades” para mim, achando que estou certo sem ninguém para me contrariar. E é muito bom que pessoas como você ajudem nesse processo. :)
Obrigado!
Eu programei pouco em C++ e menos ainda em Java, mas isso está mudando, tenho começado a fazer coisas em Java, “Java para o Android”, na verdade. Logo eu devo tentar comparar melhor o c++ com o java.
Estou pensando em tentar fazer um programa “grande” em C++ e um equivalente em Java, só para ter uma idéia do desepenho do compilador e do programa.
Sobre as críticas ao C++, claro que o desempenho do código é evidentemente bom, basta comparar dois grandes projetos com objetivos semelhantes. KDE e GNOME, um feito em puro c++ outro puro C.
Ambos chegaram a uma qualidade nunca vista antes no mundo opensource, e estão mais ou menos no mesmo nível de qualidade.
O que posso dizer é que o KDE, mesmo sendo feito em C++, tem um desempenho muito parecido com o GNOME. Falo em desempenho tanto no sentido uso do processador, quando em uso de memória.
Além disso, pode até ser que C++ permita POG, mas programadores bons conseguem fazer códigos elegantes e bonitos em C++. Não podemos criticar o C++ nesse caso.
Existem linguagens que forçam o programador a ter um estilo legível e elegante, como python, existem outras que forçam o programador a escrever algo completamente bizarro, como brainfuck.
Brainfuck sim é uma linguagem horrível, não tem como fazer programa bom nela. Apesar de que acho que era esse mesmo o objetivo da linguagem.
Desde que a linguagem não atrapalhe o desenvolvimento, acho que ela não pode ser chamada de ruim.
Ah, vou interromper esse papo, acho que já devo ter te incomodado demais. :)
Olá, Max
Que legal! Programando em Java para o Android, hein? Muito bom!
Sim, o desempenho do código C++ é bom. Fui exagerado no post dizendo que C++ era lento. Ele só não é tão rápido quanto C, em geral (é lógico que, se você escrever C e usar só uma coisa ou outra em C++ o código vai ter velocidade de C). Espero que tenha corrigido isso depois nos comentários :P
Discordo um pouco do desempenho do KDE ser parecido com o do GNOME. Nunca fiz nenhum benchmark, mas tenho a impressão de que o KDE é mais lento. Mas não necessariamente por causa da linguagem.
Sobre o POG, eu me expliquei num comentário aí para cima… Inclusive, disso isso mesmo que você disse.
Ah, Brainfuck é uma ótima linguagem! Estou desenvolvendo um sistema operacional nela! Brincadeira… Brainfuck foi feita com esse objetivo (dentre outros), mesmo: ser ilegível. Daí o nome. :)
Então, para mim C++ atrapalhou o desenvolvimento do meu projeto de iniciação científica. Por isso disse que a linguagem é ruim. Mas esse é um critério que depende bastante do programador e do que se define como “atrapalhar”, então C++ ser ruim é minha opinião, não uma verdade universal.
Não incomodou nem um pouco, pelo contrário! Obrigado pelos comentários!
Olha só, não li todos os comentários e acho que não vai ser preciso pra dar minha opinião.
Discordo (também) do que você disse no post.
A questão de performance depende MUITO da implementação.
“Herança múltipla == hierarquia malfeita?”
Sim.
De onde tirastes isso? Herege. Usar herança múltipla não significa ter uma hierarquia mal-feita, jamais.
C++ não é POG e como já foi dito, qualquer um pode POGar em qualquer linguagem.
Cada linguagem tem sua funcionalidade e aplicação, C++ tem propósito geral e se adequa bem a MUITOS casos.
Não sou programador C++ experiente, estudei um pouco a respeito e não vim jogar pedras.
Desculpe, mas não foi convincente o post.
Olá, Hugo
Sobre o POG eu já falei, então não vou comentar de novo. Concordo em parte com você.
Agora, sobre herança múltipla, aí sim eu discordo totalmente de você. Herança múltipla é péssimo. Herança já é ruim; múltipla, então, nem se fala!
Obrigado pelo comentário!
Você não está falando sério, está?
Olá, Felipe
Se você estiver se referindo ao uso de herança, estou, sim. Vide esse post: http://blog.caelum.com.br/2006/10/14/como-nao-aprender-orientacao-a-objetos-heranca/
Herança é o tipo mais forte de aclopamento possível entre duas classes, ou seja, você precisa conhecer muito bem uma classe para mexer na outra. Quando o código é seu, até que vai, mas a partir do momento que outras pessoas passam a mexer nele, isso se torna péssimo.
Obrigado pelo comentário!
Olá Luiz,
Infelizmente vc pisou fundo demais, e não teve uma base sólida de C/C++, porque eu digo isto? Simples o lema do C++ é “deixe tudo por conta do programador, não atrapalhe ele”, agora uma coisa eu concordo c++ é “feio” porque é uma linguagem que exige muito do programador para que ela possa cumprir o seu lema.
Velocidade de compilação você pisou extremamente fora, meu caro Luiz, enquanto um fonte em c++ demore 1 minuto (hipotéticamente falando), e em java ele demore 30 segundos, mas você não contou o tempo de compilação na execução, já que o java é em byte-code enquanto c/c++ é em binário, ou seja a cada execução (java) é (hipoteticamente) 10 segundos enquanto o c++ é zero. É claro que há casos em que o c++ deixe no chinelo o java e há casos até em que o basic deixe para tras as duas, isso depende unica e exclusivamente do programador e sua capacidade.
Agora uma coisa a todos os programadores: Vocês querem saber velocidade?
Façam uma vez na vida dois programas de nivel médio, um C++ e um Java, e rodem numa máquina de baixo porte (1… ghz de processamento).
E mais uma coisa programadores tentem compilar (e de repente testar) um programa num 200mhz, num 500mhz, num 90mhz… E não num X2 2.6, C2D, C2Q… Dai dá para falar em velocidade e estabilidade ok? Ah! Mas quem é o louco que vai fazer isso? Só digo uma palavra: “Slackware”.
Agradeço se me responder Luiz,
PS: Desculpe-me qualquer erro ou grosseria que tenha escapado.
Olá, André.
Desculpe a demora em responder.
Discordo de você em muitos pontos. Vamos lá:
“[...] c++ é “feio” porque é uma linguagem que exige muito do programador para que ela possa cumprir o seu lema.”
Não acho C++ feio por exigir muito do programador. C também exige mas, como você pode ver no post de hoje, gosto de C. Acho C++ feio por causa da sintaxe carregada, que acrescenta muitos símbolos e palavras reservadas à sintaxe de C e torna o código mais difícil de ler. Os outros pontos que já comentei não são “feios”, apenas desvantagens (ou vantagens, dependendo da ocasião).
“[...] ou seja a cada execução (java) é (hipoteticamente) 10 segundos enquanto o c++ é zero”
Você forçou a barra nesse “hipoteticamente” :)
Além de, em alguns casos, o programa Java rodar mais rápido do que um similar em C++ (como já comentado anteriormente), quando o Java é mais lento, a diferença não é nem da ordem da diferença do tempo de compilação: enquanto o Java acaba levando, no máximo, meio segundo a mais para rodar do que o C++ (pelos testes que lembro de ter visto).
“[...] isso depende unica e exclusivamente do programador e sua capacidade”
Não só. Depende também dos recursos que sua aplicação utiliza e de como seu compilador/máquina virtual trata desses recursos. Pode ser que o compilador não otimize como deveria em alguns casos, e daí você vai notar que uma linguagem vence em alguns casos e perde em outros para programas escritos pelo mesmo programador (supondo que ele tenha experiência em ambas).
Agora, comentando um pouco a parte final do seu comentário, se Java fosse tão pesado e instável assim, não seria utilizado para fazer aplicativos para celulares nem para controlar o sistema de tráfego aéreo de São Paulo (que é exemplo em muitos lugares do mundo).
Obrigado pelo comentário!
Como conheço as três liguagens e suas tecnologias (C, C++ e Java) posso afirmar algumas coisas:
Coisas que odeio em C:
A ausência de um typo boleano para evitar confusões.
Coisas que amo em C:
O resto.
Coisas que odeio em C++:
1 - Herança multipla, atrapalha mais que ajuda, e tenho de concorda que a herança normal também atrapalha, na maioria das vezes eu não uso herança justamente, pois primeiro não é necessário e segundo evitar overhead, claro que Herança pode ser uma grande vantagem quando bem usada, principalmente para jogos, mas geralmente ela só serve a casos muito específicos, muitas vezes é melhor usar uma classe abstrata do que herança.
2 - Friend Class, ainda não vi uma utilidade boa para este tipo de recurso, na maioria das vezes acaba por originar mais falhas de segurança que realmente uma programação mais efetiva.
4 - Template Class, sei que é bom e útil, mas é muito perigoso, pois pode ocasionar um excessivo overhead da aplicação se usar demais, neste caso é obrigado a ser seletivo quando realmente for usar.
Coisas que gosto de C++:
1 - Suporte a Orientação a Objetos
2 - O tipo bool
3 - O nível de flexibilidade para se programar.
Mas agora uma coisa interessante, é sabido que assembly é horrível para programar, no caso uma verdadeira porcaria, contudo com assembly podesse criar coisas incríveis, entretanto só se for um bom programador para assembly, pois é extremamente fácil fazer um programa que seja mais lento até que um programa em Java, justamente devido a uso do circulo de processamento, o que obriga o desenvolvedor a buscar aprender a fundo o hardware em questão para poder fazer uma coisa bem feita, o mesmo vale para C++ e o próprio C, muita liberdade também torna mais fácil em fazer besteira, mas no caso de C++ os recursos da própria tecnologia como Herança multipla, Template Class e Friend Class acaba por muitas vezes prejudicar mais o programa do que realmente fazer algo bom nele.
Outro fato interessante é que a maioiria dos projetos opensources que usam C++ raramente abusar da OO do mesmo, somente alguns projetos usam a fundo e com muito cuidado a OO de C++, principalmente quando se fala de Herança Multipla.
Agora sobre Java, também tem coisas que amo na tecnologia e coisas que odeio, como é o caso da ausencia de linkagem estática, coisa que me faz muita falta geralmente, ou mesmo alguns recursos que geralmente evito usar, como herança, por exemplo, mas entre as coisas boas posso considerar a classe abstrata e interfaces.
Outros recursos também são ótimos, mas cita-los fugiria muito do assunto.
Luiz,
Respondendo:
O C++ exige mais: pelo que você mesmo falou tem que ter muita memória pelas palavras chaves…
Bem quanto ao tempo não posso dizer corretamente, porque ainda não estudei o java (só passei por cima porque nas apostilas java o POO é explicado melhor). Mas o que eu posso dizer é que querendo ou não querendo C/C++ são as últimas linguagens compiladas (como você deve saber o resto das mais utilizadas são interpretadas: BASIC, JAVA…) e por serem compiladas é mais demorado a preparação tanto do código como do executavel(a compilação) não digo é claro que para um programa de até médio nível é melhor o Java porque não tem que ser escrito tanto (a VM já entra com a parte não necessária) mas tu falaste lá em cima no tempo de compilação então eu quis dizer isso: uma linguagem compilada perde feio para uma linguagem interpretada. (Pô o hipotéticamente era o tempo, ou seja dez segundos, não era para levar ao pé da letra era só para exemplificar. heheheh)
(A instabilidade)O final não era bem para ti falei mais era pros mal educados que acham que na internet pode ofender outros.(Pesado) Não digo que um programa pesado não seja bom, o open office é bom (no meu ver melhor que o Office), mas vai carregar num 500mhz, 1.4ghz, vai…(tenho um 500mhz em casa só para isso, testar e tentar dar mais velocidade aos programas)
Mas agora só digo uma coisa não diga mais coisas com tu disses ao Marcelo, não é só porque tu achas o C++ feio que os outros tem que achar também (também acho ele feio , mas o C sinceramente é horrivel, printf é um exemplo das funções esquisitas), eu antigamente antes de começar no C++ acharia ruim começar a estuda-lo…
Uma sugestão: de agora em diante (para os mal educados) coloque sempre que é a sua opinão, um review…
Obrigado pela resposta!
OBS:Gostaria que respondesse, mas se não quiser transformar esse post numa troca de email’s pode enviar a resposta para: fenixagua gmail.com, tá?
Olá aos dois!
cristo,
Concordo com você! Tanto em C++ como em Java como com relação à flexibilidade. E não só projetos opensource em C++ que não utilizam devidamente a OO. Já peguei um projeto em Java que era de doer!
André,
Agora entendi o que você quis dizer com “exigir mais do programador”; tem razão.
Sobre a compilação, algumas linguagens interpretadas também podem ser compiladas (para uma máquina virtual, no caso). Neste caso, pode-se comparar, sim, com o tempo de compilação de uma linguagem puramente compilada, afinal também é necessário processar o código, as dependências e fazer as substituições de símbolos. Não é exatamente o mesmo processo, mas é comparável.
E desculpa por ter levado ao pé da letra seus 10s :)
Obrigado pela sugestão. Como você viu, eu fiz isso no post de C. :)
Obrigados aos dois pelos comentários!
Sobre a questão da segurança, o próprio Bjarne Stroustrup responde:
http://www.research.att.com/~bs/bs_faq.html#unsafe
Sinceramente sou adepto da seguinte idéia: cada linguagem tem o seu uso. Eu particularmente também tenho um certo horror qualquer sistema em C++ e também acabo usando Java. Mas isso apenas quando o foco do meu trabalho é a PRODUTIVIDADE, ou seja, minha única preocupação é fazer funcionar. Quando penso em outras coisas, como VELOCIDADE, ACESSO DIRETO AO HARDWARE, ACESSO DIRETO ÀS FUNÇÕES DA API DO SISTEMA OPERACIONAL, CONTROLE PRÓPRIO DA MEMÓRIA. Usar uma linguagem “restritiva”, como Java, permite que o programar só tenha preocupação com a regra de negócio, enquanto usar uma linguagem “liberal”, como C++, dá ao programador a possibilidade de preocupar-se com outros aspectos da aplicação que está sendo desenvolvida.
A propósito, a própria definição da POO é baseada no fato de deixar o programador apenas preocupado com fazer aquilo que lhe é solicitado, a regra de negócio.
Por fim, benchmarks de Java e C++ são extremamente inconclusivos. O fato de existir uma camada a mais de software em Java sempre foi motivo de discussão, mas sinceramente, você já parou para pensar que o número de chamadas de funcão geradas por um System.out.println(”Hello!”) pode ser igual a um printf(”Hello!\n”)?
Abraços, e não use mais este marketing negativo no blog. Conheça antes de criticar. Saber o suficiente sobre alguma coisa não lhe torna melhor que ninguém, pelo contrário.
Olá, Tasso
Concordo com você na maioria dos aspectos. Realmente, também acho que cada linguagem tenha seu uso (como comentei no primeiro post dessa série, se não estou louco ainda). Mas uns dos meus argumentos para criticar C++ é justamente o fato de ele ser uma “evolução” do C com a adição de OO (dentre outras coisas), sendo que OO não “combina” (a meu ver) com controle detalhado de recursos físicos. Não que seja da definição de OO esquecer o hardware, como você disse, mas simplesmente porque o hardware é procedural, e não orientado a objetos.
Não só já parei para pensar nisso (do printf) como, se não me engano, é isso mesmo. Os compiladores e máquinas virtuais são “espertos” e otimizam esse tipo de coisa.
Por fim, obrigado pelo comentário e me desculpe se pareci querer ser melhor que os outros. Não foi a intenção.
Tudo bem, todo mundo erra. :) Só que, como pode se ver, seu tópico bombou pelo simples fato de que você não se aprofundou muito no assunto, ficou mais na sua opinião expressa como sendo “a verdade”, daí malandragem achou que isso era estratégia para cair aqui, tal qual a minha pessoa…
“[...]OO não “combina” (a meu ver) com controle detalhado de recursos físicos.”
Eu tenho a mesma crença, mas depois que se começa a trabalhar com POO, é difícil voltar a usar apenas linguagem estruturada… Sinceramente, vejo C++ como algo próximo de POO, não um implementação completa. Até porque, sejamos realistas, quando um cara que aprendeu C vai trabalhar com C++ ele ainda quer utilizar os mesmos conceitos de antes, pois, como tu argumentaste, C++ é um “linguagem derivada da C”. Eu particularmente acredito que C++ está longe de “sua mãe”, não na ortografia, mas a própria sintaxe contém dúzias de operadores que os programadores C jamais sonharam que iram existir (eu mesmo descobrir que a vírgula pode ser um operador). Mas para evitar-se um mal-estar coletiva, muita coisa manteve-se igual, é verdade.
Por fim, sobre a questão da diferença de Java e C++, acredito que o gargalo pode ser sempre o sistema operacional, pois, como uma vez me esclareceu Vinícius Godoy, chamadas de funções não prejudicam muito a performance (até um limite aceitável, claro).
Abraço!
Fiquei curioso para ver onde tem “programas escritos orientados a objetos em C” no “kernel do Linux”. A não ser que você queira dizer que a estrutura file_operations com funções de callback lembre polimorfismo…
Citando Linux Torvalds: “In fact, in Linux we did try C++ once already, back in 1992. It sucks. Trust me - writing kernel code in C++ is a BLOODY STUPID IDEA.”
http://answers.google.com/answers/threadview/id/718661.html
http://kerneltrap.org/node/2067
Nunca vi tanta bobagem junta.
Olá, Augusto
Referia-me a essa parte do código, sim. Apesar de não ser OO de verdade, a idéia de colocar dados + comportamento em struts é praticamente a idéia de objeto. No fundo, aquilo é uma implementação de orientação a objetos em C, só que tendo que construir o objeto na mão, preenchendo os ponteiros de funções.
Olá, Alan
Bom, só tenho uma coisa a dizer: cada um com sua opinião.
Obrigado pelos comentários!
“Em resumo, se você quer C com orientação a objetos, prefira Java ou C#. Qualquer um dos dois é melhor do que C++ e, provavelmente, mais eficiente. Agora, se você gosta de POG (programação orientada a gambiarras), C++ é uma boa.” Rá!!!! Pegadinha do Malandro.
Meus Irmão voçês metem o pau em C++ assim não da!!
Eu acho e que voçês estão é com C C mental isso sim
Vim ao site para buscar novidades de C++, mais ao ver a opniao do do mesmo vou é sair fora deste site
já eu conheço muita gente esperta que usa c++. Por onde vc tem andado ?
Sem querer ofender, como dizem (Linguagem de alto nivel, programador de baixo nivel).
Eu uso c++ para programar jogos, ja programei em java (muito pouco) e nao voltaria.
C++ é mais hardcore para mim, eu prefiro, gosto de ter controle total, GC do java me deixa grilado, nao curto essa ideia de “liberdade” quero fazer o programa da “minha maneira”.
Para mim, me pareceu que você nao curtiu a ideia de herança multipla e por isso “meteu o pau em c++”.
A questao é que talvez você nao tenha tido “um bom tempo com o c++” da mesma forma que nao tive meu bom tempo com java.
Eu penso, se for pra usar java para fazer algum software mais simples uso c#. Claro que eu ja pensei em fazer um server e java (ainda bem que só pensei) para o meu jogo. Agora quero fazer em c++. Todos tem uma linguagem que gosta, eu particularmente sempre volto pro c++, nao importa o que. Gosto do c++ ainda mais para desenvolver jogos e creio que o post foi “mal escrito” pois só aborda pontos negativos mesmo o c++ sendo uma linguagem tao usada.
Olá, Alex
Entendo seu ponto de vista. Também gosto de programar “da minha maneira” (como você disse) às vezes. Mas não o tempo todo. E o que me incomoda nesse ponto do C++ é que, para mim, ele mistura um pouco de cada um desses mundos - o controlado pela infraestrutura e o controlado por você.
Não, eu não curto a ideia de herança múltipla (e não sou só eu), mas não foi por isso que eu não gostei de C++. Aliás, nem cheguei a usar essa característica da linguagem (diretamente, pelo menos). Mas não sei se é só questão de ter tido “um bom tempo com C++”, como você disse. Afinal, eu continuo mexendo com C++ e continuo não gostando. Claro, ficou um pouco melhor mas, ainda assim, não gosto.
Sim, deixei de abordar alguns pontos legais da linguagem; tentei corrigir isso nos comentários, mas talvez fosse o caso de escrever um novo post (mas falta ânimo para isso). Só de curiosidade: por que a preferência por C# sobre Java?
Obrigado pelo comentário!
Aff….
Quanta asneira pra um post só.
Impressionante como qualquer zé mané escreve qualquer merda na internet e ainda perde o seu tempo respondendo as infinitas críticas que chegam ao seu post ao invés de simplesmente deleta-lo.
Meu caro, escrever merda, cometer um erro é passível.
Continuar nele e ainda defender o seu ponto de vista tosco e inexperiente, é burrice total.
Linguagem de programação é muito difícil de se comparar, cada uma é boa para um propósito. Se você fosse um pouquinho experiente, nem perderia seu tempo escrevendo um lixo como esse.
Falar sobre uma linguagem é muito mais sobre as vantagens do que: “Linguagem X não presta porque linguagem Y faz isso melhor do que X.”
E a idéia de que a linguagem deve ser limitada para “evitar erros de programadores inexperientes” demonstra o quanto você é amador.
“O UNIX não foi feito para impedir seus usuários de fazerem coisas estúpidas, porque isso também impediria eles de fazerem coisas espertas.” – Doug Gwyn
Use BSD.
Olá, Programador
Em primeiro lugar, se você tivesse lido os comentários provavelmente não teria escrito esse. Teria visto que fui mudando alguns pontos de vista ao longo da discussão. Se eu tivesse deletado o post, não só seria covarde como não teria aprendido como aprendi.
Concordo que algumas linguagens são melhores para alguns propósitos que outras, mas isso não impede a comparação de umas linguagens com outras, ainda mais quando elas pretendem ser boas para as mesmas aplicações.
Em nenhum momento falei de “limitação” da linguagem. Se você vê alocação de memória transparente e coleta de lixo como limitações, esse é um ponto de vista seu. Eu vejo como ferramentas de produtividade. Mais especificamente sobre permitir asneiras por parte do programador, esse foi um ponto de vista que mudei com a discussão. Todas as linguagens permitem o programador fazer código feio. Mas isso não retira minha crítica à feiura do C++. Lógico, feiura é um critério subjetivo, mas esse post (essa série inteira, na verdade) não é para ser objetivo. É para expor a opinião de cada um. Se você não concorda, tudo bem; é um direito seu.
Obrigado pelo comentário.
Eu quis dizer limitada em recursos como você disse que C++ não deveria ter heranças múltiplas e que isso é ruim.
É Realmente não li os comentários, vi um outro blog
http://murilo.wordpress.com/2008/11/14/direito-de-defesa-ao-cmaismais/
falando em defesa do C++, e então vim conferir.
Não poderia perder lendo 80 comentários de um post totalmente sem noção.
Foi, mas realmente tenho que concordar que não ter deletado foi corajoso da sua parte e admitir os erros, melhor do que persistir neles.
Comentei aqui já faz um bom tempo. E de lá pra cá aprendi outra coisa sobre C++: não foi feito para humanos. :P
Se todos pararem para pensar um minuto sobre qual a função de uma linguagem de ALTO NÍVEL, vão se ligar que C++ comete alguns pecados. A maioria, acredito, tenha a ver com a maldita retrocompatibilidade.
Esses tempos até estava teorizando que o uso atual da keyword struct poderia abranger a semântica de class e esta, por sua vez, seria usada para implementar objetos com polimorfismo.
Por esses e outras estou estudando teoria de compiladores. Pego o melhor de cada linguagem PARA MIM e faço a minha. Morreu.
Olá novamente, Tasso
Concordo com você. Aliás, foi isso que eu quis dizer com a linguagem ser “feia” e foi esse o principal motivo para eu escrever esse post, inicialmente. Acabei criticando o que não devia, mas para esse aspecto da linguagem mantenho minha crítica.
Sobre criar sua própria linguagem, acho que é muito bom ter várias alternativas para programar. Só que eu acho que já dá pra aproveitar boa parte do trabalho feito e das lições aprendidas pelas outras linguagens quando for fazer isso.
Eu, particularmente, tenho vontade de criar uma linguagem. Quando você tiver feito a sua, conte pra gente!
Abraços e obrigado pelos comentários!
Ola luiz,
Eu li todos os comentarios..e fico triste de saber que vc é estudante de Ciência da computação.eu estou no segundo periodo de Ciência C. minha facu oferece java como POO..eu estou saindo fora e caindo no C++,vc não tem conhecimento nenhum em C++,digo nenhum pq vc não sabe o proposito da linguagem..procure ler um livro de C++. como já li em varios blogs..Java é para “Dummies ” e não cabe a comparação de java com C++.java se compara com C# .
tenho muito para dizer…mais vou dizer só isso.
Olá, Rogério
Eu tenho, sim, conhecimento em C++. Posso não ser nenhum expert, mas já desenvolvi (e continuo desenvolvendo) um projeto científico em C++. Também sei o propósito do C++; assisti esses dias, inclusive, uma palestra que um dos criadores do C++ deu no CERN. Tampouco Java é para “Dummies”; tente fazer a prova de certificação em Java, por exemplo. Não é só porque a linguagem trabalha num nível mais alto que ela é tosca. Isso é preconceito de quem acha que o código não precisa ser expressivo.
Mais comentários são bem-vindos.
Leave a reply