C++ é a linguagem mais completa atualmente?

[quote=rogelgarcia]Minha opinião: C++ como linguagem e APIs disponíveis (mesmo as padrão) são uma zona.
[/quote]

Não viu nem o QT, nem a POCO, nem outras bibliotecas fortíssimas. Por mim, é tão zona quanto o que temos em Java hoje.

Quanto a ser mais “completa”, a pergunta fatídica sempre vem na sequencia: Mais completa para que?

Se seu objetivo é mercado, as três linguagens mais usada pelo mercado são C, Java e Objective-C.

[quote=JoseIgnacio]Se seu objetivo é mercado, as três linguagens mais usada pelo mercado são C, Java e Objective-C.
[/quote]

Fontes?

Eu não entendo como C++ e C# não entraram nessa conta…

Acho que discutir “Qual a linguagem mais completa” é discutir sexo dos anjos, e não será este tópico que trará a luz para o mundo.
Na minha humilde opnião, acho super importante conhecer bem várias linguagens, plataformas e paradigmas, justamente para saber “o que”, “como” e “quando” usar.

E o com relação ao termo “no silver bullet”, pode ser usado parar se referir a linguagens de programação e a muitos outros fatores em nosso cotidiano, assim como não precisamos de “Sheldon Cooper”.

Obviamente, muito pode se aprender com os livros de Frederick Brooks, recomendo para quem não conhece!!!

[quote=ViniGodoy][quote=rogelgarcia]Minha opinião: C++ como linguagem e APIs disponíveis (mesmo as padrão) são uma zona.
[/quote]

Não viu nem o QT, nem a POCO, nem outras bibliotecas fortíssimas. Por mim, é tão zona quanto o que temos em Java hoje.[/quote]

É… em Java tem várias bibliotecas fortíssimas que tem que propor até substitutas para a classe String porque a padrão de java nao serve.

Em Java até padrão de nomenclatura tem… não existe funções tipo ‘atoi’ e bibliotecas que não são feitas por newbies seguem padrões mínimos de organização… O que em C/C++ é exceção… C ainda é mais organizado… mas C++, muitas vezes o pessoal abusa…

Não to falando que não pode ter coisas boas em C++ não… to falando que em geral é uma zona… E programadores c/c++ geralmente gostam de escrever códigos que só eles entendem… já vi isso muitas vezes…

De qualquer maneira, minha opinião… é minha opinião… não necessita explicação. :slight_smile:

[quote=rogelgarcia]É… em Java tem várias bibliotecas fortíssimas que tem que propor até substitutas para a classe String porque a padrão de java nao serve.

Em Java até padrão de nomenclatura tem… não existe funções tipo ‘atoi’ e bibliotecas que não são feitas por newbies seguem padrões mínimos de organização… O que em C/C++ é exceção… C ainda é mais organizado… mas C++, muitas vezes o pessoal abusa…

Não to falando que não pode ter coisas boas em C++ não… to falando que em geral é uma zona… E programadores c/c++ geralmente gostam de escrever códigos que só eles entendem… já vi isso muitas vezes…

De qualquer maneira, minha opinião… é minha opinião… não necessita explicação. :)[/quote]

O problema é esse tipo de generalização. Quem é “o pessoal”? Quando vc fala do desenvolvimento profissional de C++, é bem diferente disso que você está descrevendo. Eu mesmo atuo com essa linguagem há pelo menos 15 anos e, se no seu time tem gente com essa cultura, significa ou que são maus profissionais, ou são mau gerenciados.

Realmente, não existe um code-convention único em C++. Essa deficiência foi tratada no Java. Mas as bibliotecas tem suas code-conventions fortes, assim como a comunidade de maneira geral hoje já codifica de forma próxima.

Outra coisa, no Java também existe lá suas bizarrices. A função matemática do Java para valor absoluto, chama-se abs. Para raiz cúbica, chama-se cbrt. Para fator de escala é scalb. Além disso, atoi é uma função do C, não do C++ (ela pode ser usada, mas não deve).

[quote=juliocbq][quote=matheuslmota][quote=rogelgarcia]Minha opinião: C++ como linguagem e APIs disponíveis (mesmo as padrão) são uma zona.
[/quote]
Nem tanto. Já viu o Qt? Framework OO, bem documentado, bem escrito e com uma quantidade grande de API’s. Tudo feito em C++.[/quote]

a versão 5.0 já saiu. A blackberry está usando nos seus produtos novos novos.[/quote]

Sim, fora que o Qt tem muita coisa interessante, como o WebKit, que permite embarcar páginas Javascript e HTML5 em aplicações Qt.

Sobre a pergunta original, vale ressaltar uma das premissas da linguagem C++:

Isso significa que do ponto de vista de “poder fazer a coisas”, creio que sim, o C++ seja uma das linguagem mais completas. Você tem liberdade total, interopera do jeito que quiser. Entretanto, sobre facilidade de uso… facilidade de fazer aplicações multiplataforma, aí ferrou.

C++ é completo, mas é bastante orientado a cabelos no peito. Você deverá saber as boas práticas, você deverá saber gerenciar recursos e a linguagem não irá te ajudar em nada. Pelo contrário, ela te dá construções extremamente perigosas, confiando em você sempre.

Se você não se cuidar, irá programar em C++ como se programava em 1980, pois a linguagem não te impõe coisas ou te ajuda. Programar em C++ moderno é saber práticas modernas, é saber com efetividade a STL e é entender conceitos novos, sabendo fugir de construções antigas (como atoi). Por isso que digo que muita gente que supostamente diz que programa em C++, ainda não programa. Faz aquilo que viu na faculdade, que já não corresponde mais a usar a linguagem (é como se você fosse programar em Java 7, mas só usando as práticas do Java 2).

Se o propósito é facilidade de uso, C++ puro e simples deve estar entre as linguagens menos completas que existe (isso falando da linguagem pura, sem considerar bibliotecas como as que citei, ou a boost).

Essa política é bem diferente da de várias linguagens, inclusive o Java e o C#. Na documentação dessas linguagens, você lerá constantemente que determinado recurso não existe por ser sujeito a erros, ou que uma construção foi criada para facilitar a vida ou evitar incoerências. A linguagem é defensiva, mesmo que isso impacte em menos liberdade (como não deixar você liberar memória explicitamente, ou comandar o gc). São, portanto, linguagens onde é muito mais confortável programar.

ViniGodoy… acho que voce entendeu e até concorda de certa forma com o que eu falei … Você inclusive deu argumentos que corroboram com minha opinião. :slight_smile:

Sim… o que eu falei foi uma generalização… então… não leve ao pé da letra… :wink:

(Só para complementar aqui… e não passar por mal entendidos… não estou falando que Java é melhor que C++… estou falando que C++ peca em organização… comparativamente a Java… que é a linguagem que trabalho comumente)

[quote=rogelgarcia]ViniGodoy… acho que voce entendeu e até concorda de certa forma com o que eu falei … Você inclusive deu argumentos que corroboram com minha opinião. :slight_smile:

Sim… o que eu falei foi uma generalização… então… não leve ao pé da letra… :wink:

(Só para complementar aqui… e não passar por mal entendidos… não estou falando que Java é melhor que C++… estou falando que C++ peca em organização… comparativamente a Java… que é a linguagem que trabalho comumente)[/quote]

C++ não peca em organização, quem peca é o profissional que usa a linguagem. Dá para escrever código de várias maneiras inclusive usar o preprocessador para criar macros e expandir a linguagem. Como código fica é por conta do profissional. Ela é complexa mas é de longe a mais flexível.

Sobre documentação pelo menos a do qt é melhor que a do java. Possui imagens, A api é camel case, tudo organizado.

http://doc.qt.digia.com/sdk-1.2/index.html

tenho muita vontade de estudar c++… pois quero fugir dessa crudelagem que assola a nossa àrea.
mas tbm nao tenho forca pra comecar rs…

não tecnicamente falando, um dos pontos que considero c++ uma excelente linguagem é que praticamente todo o mercado de jogos
utiliza por padrão c++…

tem momentos que quero sair um pouco desse lado business legado para à area de jogos…

vinigodoy… em projetos profissionais de games, a boost e a std são muito utilizadas ? ou normalmente se utilizam
bibliotecas especificas para cada jogo em si ?

[quote=johnny quest]vinigodoy… em projetos profissionais de games, a boost e a std são muito utilizadas ? ou normalmente se utilizam
bibliotecas especificas para cada jogo em si ?[/quote]

A STL sim, pois é padrão. A EA inclusive contribuiu com a comunidade com uma versão mais apropriada para games:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html

Agora, a boost nem tanto, pois é mais difícil porta-la para consoles.
Geralmente ela não é necessária e as engines já tem suporte a boa parte do que você necessitaria para ela.

[quote=ViniGodoy][quote=johnny quest]vinigodoy… em projetos profissionais de games, a boost e a std são muito utilizadas ? ou normalmente se utilizam
bibliotecas especificas para cada jogo em si ?[/quote]

A STL sim, pois é padrão. A EA inclusive contribuiu com a comunidade com uma versão mais apropriada para games:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html

Agora, a boost nem tanto, pois é mais difícil porta-la para consoles.
Geralmente ela não é necessária e as engines já tem suporte a boa parte do que você necessitaria para ela.
[/quote]

E ela é toda otimizada em assembly como podem ver. Coisa fina. Não dá nem pra comparar escrever jogos usando ela com outras ferramentas de alto nível aí. Qualidade total:

float min(float a, float b) { float result, test(a - b); __asm__ ("fsel %0, %1, %2, %3" : "=f" (result) : "f" (test), "f" (b), "f" (a)); return result; }

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.aixassem/doc/alangref/fsel.htm é a descrição dessa instrução (PowerPC 603 e posteriores).

Que show essa std otimizada da EA. Muito boa a documentação.

Jamais saberia disso se continuasse só no java.

Mas pelas qualidades que essa biblioteca traz, será que não vale a pena utilizar em todos
os problemas essa std da EA em vez da std padrão ?

Não, justamente porque a EASTL não é uma reimplementação otimizada da STL - há algumas divergências que impedem que você pegue um código pronto que use a STL padrão e simplesmente substitua cegamente em todos os programas.
Veja como é que são as coisas: você não pode, simplesmente, fazer algo cegamente - você precisa analisar antes de fazer.

De modo geral, se você tem um código novo (ou portado) que não precisa interoperar com outros códigos em C++ que já existem, você poderia até usar a EASTL. Mas se você tem um código que é 20% de um sistema que já está 80% pronto e usando a STL padrão, você provavelmente não vai mudar tudo para a EASTL (até porque você precisa ver se ele tem de interoperar com outro código já existente).