C++ é a linguagem mais completa atualmente?

37 respostas
J

A uns 3 anos atrás fiz um plano de conhecer diversas linguagens de programação,
passando desde Lisp, Ruby(Rails), Groovy(Grails), Scala(Play) e C++.

Realmente aprendi conceitos novos que jamais iria aprender se ficasse somente no java.
A linguagem que mais gostei foi sem dúvida Scala, mas cheguei a conclusão final que a
linguagem mais completa que existe é o C++, (mesmo pessoalmente não gostando da sintaxe)
pois além de ser super atualizada, já está consolidada no mercado de trabalho, e é uma realidade, não uma promessa.

na opinião de vocês, existe alguma outra linguagem que tenha mais recursos do que o C++ proprociona ?

37 Respostas

I

Como já foi dito aqui em outros lugares várias vezes, a discursão que voces está tentando levantar é se uma chave de fenda é melhor ou, no caso, mais completa que um martelo.

Quanto a pergunta, é meio inútil contar os recursos de cada linguagem ou fazer uma lista das ‘mais completas de recursos’.
Se eu preciso fazer uma carga massiva de dados de um BD oracle eu, provavelmente, vou fazer isso através de um script em PL/SQL e não em C++ ou JAVA. Pouco importa se elas tem mais recursos que PL/SQL. Se vou desenvolver uma app para android, provavelmente vou usar a linguagem java… A mesma lógica se repete para qualquer outra situação.

M

Mais completa em relação ao quê? Em recursos sintáticos? Em número de bibliotecas? Em número de arquiteturas suportadas? Sua pergunta é um pouco genérica.

J

No Silver Bullet!

R

Acho que a seguinte afirmação não faz sentido:

“a linguagem mais completa que existe é o C++, (…) pois (…) já está consolidada no mercado de trabalho”

Estar consolidada não implica em ser completa.

Sobre a outro argumento:

“a linguagem mais completa que existe é o C++, (…) pois além de ser super atualizada”

Como o outro colega disse, o que você quer dizer com super atualizada?

L

johnny quest:

A uns 3 anos atrás fiz um plano de conhecer diversas linguagens de programação,
passando desde Lisp, Ruby(Rails), Groovy(Grails), Scala(Play) e C++.

Realmente aprendi conceitos novos que jamais iria aprender se ficasse somente no java.
A linguagem que mais gostei foi sem dúvida Scala, mas cheguei a conclusão final que a
linguagem mais completa que existe é o C++, (mesmo pessoalmente não gostando da sintaxe)
pois além de ser super atualizada, já está consolidada no mercado de trabalho, e é uma realidade, não uma promessa.

na opinião de vocês, existe alguma outra linguagem que tenha mais recursos do que o C++ proprociona ?

Rapaz, como o amigo acima falou, isso é relativo. Se quer ter um domínio profundo do hardware, precisa de C, C++ e as vezes assembly.
Mas se estiver lidando com dados, sem preocupação com hardware, linquagens como o Java e C# são mais fáceis de trabalhar.

Faz um tempo que não tenho trabalhado com C ou C++ e gostaria de saber como elas tem evoluido em “metadados” e reflexão (Annotations e reflection no Java).

J

Acho que é completa porque possui tudo isso. Sem dúvida é mais complexa mas é muito mais flexível.

I

Só uma observação:
A questão original da tal ‘bala de prata’ não se refere a linguagem de programação.
Ela se refere ao desenvolvimento de software como todo e o ponto alto é quando diz que o gargalo no desenvolvimento de software já não está mais nas ferramentas utilizada no desenvolvimento, mas sim na parte da engenharia da coisa.

O que é importante é que o desenvolvimento do software não é influenciado somente pela questão tecnologica (qual lingaugem, qual framework vai ser utilizado, qual ambiente e etc.).Podemos considerar inclusive que essa questão já está relativamente estabilizada.
Na verdade desde que o artigo (que deu origem ao livro) o autor já havia percebido que o grande no desenvolvimento ocorria por fatores bem mais complexo, como a próprio negócio ou mesmo as caracteristicas inerentes de um software (como o fato de ser algo ‘invisível’).

Infelizmente começaram a usar com frenquancia o termo também para questões mais tecnicas como resposta para pergunta ‘Qual linguagem é a melhor?’. O problema com a pergunta não é que ela não tenha resposta, é só que ela está incompleta.

R

E por causa disso a linguagem tem menor relevância para o “gargalo”.

Respondendo com “no silver bullet” a essa pergunta o que se quer dizer é: A melhor linguagem é pouco relevante para o desenvolvimento de software.

Mas existem outras características relevantes, inclusive do artigo, que não dá pra discutir aqui no fórum, pois alongaria demais o tópico. Mas o que você falou tem fundamento também. O que quis dizer é: “no silver bullet” não é assim tão sem fundamento para responder a pergunta de qual linguagem é melhor.

J

rogelgarcia:
immortalSoul:

o gargalo no desenvolvimento de software já não está mais nas ferramentas utilizada no desenvolvimento, mas sim na parte da engenharia da coisa.

E por causa disso a linguagem tem menor relevância para o “gargalo”.

Respondendo com “no silver bullet” a essa pergunta o que se quer dizer é: A melhor linguagem é pouco relevante para o desenvolvimento de software.

Mas existem outras características relevantes, inclusive do artigo, que não dá pra discutir aqui no fórum, pois alongaria demais o tópico. Mas o que você falou tem fundamento também. O que quis dizer é: “no silver bullet” não é assim tão sem fundamento para responder a pergunta de qual linguagem é melhor.

Ferramentas específicas para projetos específicos. A linguagem c++ tem uso mais genérico que as outras. A questão de mercado citada acima é verdadeira porque nossos sistemas, aplicações e ferramentas são escritas em c++(uns 90%). E isso não tem nada a ver com software legado. Simplesmente foi a linguagem escolhida para isso. Poderia ser uma outra que provesse as mesmas funcionalidades como objective c, vala ou d.

L

Acho que é completa porque possui tudo isso. Sem dúvida é mais complexa mas é muito mais flexível.

Em algum momento terá que escolher as vantagens e desvantagens.
A linguagem pode se tornar bem complexa quando nos referimos a alguma instrução em assembly. Em compensação podemos ter completo domínio (flexibilidade).
Tenho visto muitos frameworks que necessitam muitas configurações e geram quantidades masivas de código.
Algo que precisa de muito tempo para configurar pode se tornar um problema em uma manutenção futura, nos obrigando a fazer uma documentação muito extensa e muito detalhada.

Um paralelo:
Alguns dias atras eu tava conversando com uma amigo alemão sobre as dificuldades e estranhesas das linguas inglesa, alemã e portuguesa.
Ele considera a lingua inglesa pobre porque depende muito do contexto, enquanto que no alemão se aposta mais no vocabulário.
São dois pontos de visões diferentes: Um que prefere reduzir o vocabulário e concentrar no contexto enquanto que para o outro ocorre o inverso.
A complexidade nesse caso existe em ambas as linguas, só que uma aposta no vocabulário e outra no contexto.

Uma das coisas que mais me fascinam nas linguagens (tanto computadores como humanas) é simlpificar sintaxe, contexto, vocabulário e gramatica para tentar reduzuir os custos e tempos do treinamento da equipe de desenvolvimento, produção, implantação, adaptação e manutenção do sistema. Será que isso é um sonho utopico meu?

S

Defina completa compadre…
Quanto a conhecimentos, eu entendo que quem faz a linguagem é o programador, muitos recursos usados em c ++ em java foram facilitados e reavaliados. Nao concordo com uma linguagem mais ou menos completa, o que concordo é que algumas realizam melhores funcoes em alguns ambitos do mercado que outras. Eu trabalho com C, para rotinas de AIX e Terminais Monetarios, e também com java em aplicacoes que interagem com esse mesmo AIX, mas como é WEB o banco optou por fazer com java. Mas nao significa que seja melhor ou pior, mais o menos completa, voce como desenvolvedor, se tiver vontade e tempo faz a liguagem “trabalhar para voce”.

Bom é isso

Slds
Skulgy

S

O que significa “completa” ? Sem responder a isto a pergunta é vazia.

Se o C++ ultima versão tem um monte de recursos novos é porque copiou de outras ( o pai aprender com os filhos). Lambdas , inferencias de tipos, enums, modelo multithread, threadlocal, tuplas e regex - para citar algumas, não são coisas novas. Se vc for ver em scala ou C#, vc tem as mesmas coisas. Portanto, C++ não é a mais completa, simplesmente porque existem outras tão completas quanto.

Os detalhes que matam. Em C++ e C# enuns são inteiros difarçados. Isto não é OO de verdade. É gambe. Deveria-se chamar “Named Ints” e não “enum”. Em java enums são objetos de verdade. São classes que vc pode criar métodos, implementar interfaces, etc…
Java não tem tuplas. Ok. E quem precisa disso ? Milhões de projetos de java e não ha uma API de tuplas … e daí ? tem coisas que são modismos mais do que necessidade.
Lambdas , java não tem ainda (só no java8) , mas groovy, scala, e um monte de outras linguagens que correm na jvm têm. Se vc precisa muito disso, use. E mais, java não tem lambdas, mas tem a mesma funcionalidade com inner classe. Tudo bem que é mais verboraico e tal, mas é a mesma coisa. Funciona do mesmo jeito. é só porque o pessoal é preguiçoso de usar o que tem.
Scala tem um mecanismo de generics que é absurdamente completo e complexo mais do que qualquer outro. C++ nem tem isso. Ele tem templates, que é um negocio diferente de generics. Java tem type erasure, mas outras linguagens da jvm não. E assim vai.

Então, ser completo ou nao é meio ambiguo porque todas as lingaugens que valem alguma coisa hoje em dia meio que fazem o mesmo. A questão é com que facilidade e como é a API que as acompanha. Scala é muito bom para coisas matemáticas porque permite criar mecanismos de herança para usar com generics e definir operadores (não como no groovy onde vc tem overriding dos operadores já previamente definidos). Não admira que muitos bancos e financeiras lá fora comecem a usar scala. Além disso ela é feita para escalar facilmente e isso em finanças é importante. E não só em finanças , em todo o lugar onde modelos matemáricos seja relevantes. C++ é muito ruim para matemática. Ele não garante que uma mesma conta feita em máquinas diferentes dê o mesmo resultaod , scala, através do java, garante. Podemos até dizer que o scala é novo fortran. Só não é mais porque matrizes não são tipo padrão do scala ,e e vai dai, nunca serão em nenhuma linguagem OO.

O ideia seria ter uma linguaem com o melhor de cada uma. Mas ainda estamos numa fase de entender o que é “melhor”. Mais prático nem sempre é melhor.

M

Acho que é completa porque possui tudo isso. Sem dúvida é mais complexa mas é muito mais flexível.

Sim, você está correto, mas queria saber ao que o autor se referia para definir uma linguagem completa.

Outra observação, uma linguagem com muitos recursos não quer dizer que é a melhor. Não adiante trocentros recursos se o desenvolvedor não souber usá-los. Além do mais, como já foi dito, existem ferramentas mais adequadas para resolver determinados problemas.

J
sergiotaborda:
O que significa "completa" ? Sem responder a isto a pergunta é vazia.

Se o C++ ultima versão tem um monte de recursos novos é porque copiou de outras ( o pai aprender com os filhos). Lambdas , inferencias de tipos, enums, modelo multithread, threadlocal, tuplas e regex - para citar algumas, não são coisas novas. Se vc for ver em scala ou C#, vc tem as mesmas coisas. Portanto, C++ não é a mais completa, simplesmente porque existem outras tão completas quanto.

Os detalhes que matam. Em C++ e C# enuns são inteiros difarçados. Isto não é OO de verdade. É gambe. Deveria-se chamar "Named Ints" e não "enum". Em java enums são objetos de verdade. São classes que vc pode criar métodos, implementar interfaces, etc...
Java não tem tuplas. Ok. E quem precisa disso ? Milhões de projetos de java e não ha uma API de tuplas .. e daí ? tem coisas que são modismos mais do que necessidade.
Lambdas , java não tem ainda (só no java8) , mas groovy, scala, e um monte de outras linguagens que correm na jvm têm. Se vc precisa muito disso, use. E mais, java não tem lambdas, mas tem a mesma funcionalidade com inner classe. Tudo bem que é mais verboraico e tal, mas é a mesma coisa. Funciona do mesmo jeito. é só porque o pessoal é preguiçoso de usar o que tem.
Scala tem um mecanismo de generics que é absurdamente completo e complexo mais do que qualquer outro. C++ nem tem isso. Ele tem templates, que é um negocio diferente de generics. Java tem type erasure, mas outras linguagens da jvm não. E assim vai.

Então, ser completo ou nao é meio ambiguo porque todas as lingaugens que valem alguma coisa hoje em dia meio que fazem o mesmo. A questão é com que facilidade e como é a API que as acompanha. Scala é muito bom para coisas matemáticas porque permite criar mecanismos de herança para usar com generics e definir operadores (não como no groovy onde vc tem overriding dos operadores já previamente definidos). Não admira que muitos bancos e financeiras lá fora comecem a usar scala. Além disso ela é feita para escalar facilmente e isso em finanças é importante. E não só em finanças , em todo o lugar onde modelos matemáricos seja relevantes. C++ é muito ruim para matemática. Ele não garante que uma mesma conta feita em máquinas diferentes dê o mesmo resultaod , scala, através do java, garante. Podemos até dizer que o scala é novo fortran. Só não é mais porque matrizes não são tipo padrão do scala ,e e vai dai, nunca serão em nenhuma linguagem OO.

O ideia seria ter uma linguaem com o melhor de cada uma. Mas ainda estamos numa fase de entender o que é "melhor". Mais prático nem sempre é melhor.

O forte da c++ é a flexibilidade de ser multiparadigma. A questão da metodologia e qualidade de código não está totalmente relacionada com a linguagem mas com o programador. Por exempĺo o código fonte linux consegue chegar a algo próximo ao paradigma OO usando uma linguagem estruturada como a c. A linguagem vala nada mais é que macros da linguagem c que expandem seu código nessa linguagem e são posteriormente compiladas pelo gcc.

Um exemplo:

using GLib;

class Teste: Object{
	
	public static void main(string[] args){
		stdout.printf("Testando.....123");
	}
	
}

Expande:

* teste.c generated by valac 0.18.0, the Vala compiler
 * generated from teste.vala, do not modify */


#include <glib.h>
#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>


#define TYPE_TESTE (teste_get_type ())
#define TESTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TESTE, Teste))
#define TESTE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TESTE, TesteClass))
#define IS_TESTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TESTE))
#define IS_TESTE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TESTE))
#define TESTE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TESTE, TesteClass))

typedef struct _Teste Teste;
typedef struct _TesteClass TesteClass;
typedef struct _TestePrivate TestePrivate;

struct _Teste {
	GObject parent_instance;
	TestePrivate * priv;
};

struct _TesteClass {
	GObjectClass parent_class;
};


static gpointer teste_parent_class = NULL;

GType teste_get_type (void) G_GNUC_CONST;
enum  {
	TESTE_DUMMY_PROPERTY
};
void teste_main (gchar** args, int args_length1);
Teste* teste_new (void);
Teste* teste_construct (GType object_type);


void teste_main (gchar** args, int args_length1) {
	FILE* _tmp0_;
	_tmp0_ = stdout;
	fprintf (_tmp0_, "Testando.....123");
}


int main (int argc, char ** argv) {
	g_type_init ();
	teste_main (argv, argc);
	return 0;
}


Teste* teste_construct (GType object_type) {
	Teste * self = NULL;
	self = (Teste*) g_object_new (object_type, NULL);
	return self;
}


Teste* teste_new (void) {
	return teste_construct (TYPE_TESTE);
}


static void teste_class_init (TesteClass * klass) {
	teste_parent_class = g_type_class_peek_parent (klass);
}


static void teste_instance_init (Teste * self) {
}


GType teste_get_type (void) {
	static volatile gsize teste_type_id__volatile = 0;
	if (g_once_init_enter (&teste_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (TesteClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) teste_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (Teste), 0, (GInstanceInitFunc) teste_instance_init, NULL };
		GType teste_type_id;
		teste_type_id = g_type_register_static (G_TYPE_OBJECT, "Teste", &g_define_type_info, 0);
		g_once_init_leave (&teste_type_id__volatile, teste_type_id);
	}
	return teste_type_id__volatile;
}

Esse código c já possui coletor de lixo e diversas funcionalidades que um programa java teria com a jvm. A vantagem é que ele não tem uma dependência grande como uma vm instalada na máquina. Já é o padrão para desenvolvimento na Fundação Gnome.

Para mim essa é uma das melhores linguagens que já vi. Ela possui todas essas funcionalidades citadas e recursos funcionais como lambdas etc.

Vale a pena ler um artigo sobre ela

https://live.gnome.org/Vala/Tutorial

J

Acho que é completa porque possui tudo isso. Sem dúvida é mais complexa mas é muito mais flexível.

Sim, você está correto, mas queria saber ao que o autor se referia para definir uma linguagem completa.

Outra observação, uma linguagem com muitos recursos não quer dizer que é a melhor. Não adiante trocentros recursos se o desenvolvedor não souber usá-los. Além do mais, como já foi dito, existem ferramentas mais adequadas para resolver determinados problemas.

Tem toda razão. A minha opção pelo c++ é pelo fato de ser multiparadigma.

J

Digo que C++ é mais completa no sentido de ser multiparadigma, sempre sendo atualizada com recursos novos, por ser utilizada massivamente no mercado de trabalho
em diversas áreas, podendo trazer lucro real hoje pois tem muitas vagas de emprego.

Meu objetivo não é fazerem concordar comigo, porque cada um pensa diferente, mas ao fazer um tour por diferentes linguagens
em diferente paradigmas, notei que c++ é a que tem mais beneficios, tanto na parte financeira quanto nos 30 anos de evolução da linguagem.

Claro que considero Scala uma linguagem excelente também, pois foi projetada desde o começo a conectar a parte Funcional e OO com simplicidade,
ao contrário do c++, que se foram adicionando recursos novos. Mas o problema do Scala é que não se tem vagas de emprego.

R

Minha opinião: C++ como linguagem e APIs disponíveis (mesmo as padrão) são uma zona.

M

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

Nem tanto. Já viu o Qt? Framework OO, bem documentado, bem escrito e com uma quantidade grande de API’s. Tudo feito em C++.

J

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

Nem tanto. Já viu o Qt? Framework OO, bem documentado, bem escrito e com uma quantidade grande de API’s. Tudo feito em C++.

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

V

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

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?

J

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

V

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

Fontes?

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

J

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!!!

R

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

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.

É… 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:

V

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. :)

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).

M

juliocbq:
matheuslmota:
rogelgarcia:
Minha opinião: C++ como linguagem e APIs disponíveis (mesmo as padrão) são uma zona.

Nem tanto. Já viu o Qt? Framework OO, bem documentado, bem escrito e com uma quantidade grande de API’s. Tudo feito em C++.

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

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

V

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.

R

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)

J

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)

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

F

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

J

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 ?

V

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 ?

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.

J

ViniGodoy:
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 ?

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.

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; }

E

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).

J

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 ?

E

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.

E

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).

Criado 4 de janeiro de 2013
Ultima resposta 16 de jan. de 2013
Respostas 37
Participantes 13