C++ é a linguagem mais completa atualmente?

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 ?

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.

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.

No Silver Bullet!

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?

[quote=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 ?[/quote]

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

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

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.

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.

[quote=rogelgarcia][quote=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.
[/quote]

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. [/quote]

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.

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

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?

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

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.

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

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.

[quote=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.
[/quote]

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:

[code]using GLib;

class Teste: Object{

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

}[/code]

Expande:

[code]* 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;
}
[/code]

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

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

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.[/quote]

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

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.

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

[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=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.