Ir ao conteúdo
  • Cadastre-se

C C muda e fica melhor como python ou é estática?


Posts recomendados

 

Estou aprendendo C, mas antes aprendi um pouco de Python e Python constantemente se aperfeiçoa e utiliza comandos mais "secos" e de fácil utilização. Por exemplo, antes se usava

print(''.format) e agora se usa print(f'{}')

 Isso acontece com C e C++? Ou C é uma linguagem estática? Se ela muda então onde posso me atualizar sobre as mudanças da linguagem?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

o C tem um desenvolvimento mais lento, tivemos o C11 em 2011 e depois o C18 em 2018.

 

O grupo de trabalho do C++ é mais atuante, a linguagem vem passando por constantes atualizações desde de 98 mas acredito que não da pra fazer uma comparação direta com o Python porque são nichos diferentes.

 

Enquanto Python visa abstração máxima mas paga o´preço quanto a velocidade e performance, o C++ visa alta performance e velocidade trabalhando mais próximo da maquina portanto o desenvolvimento de cada uma segue rumos totalmente diferentes, não espere ver comandos que só falta a se escreverem sozinhos em C++, logicamente a não ser que alguém o faça hehe

 

https://isocpp.org/

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Pessoalmente, eu acho que C possui uma vantagem por ser mais tradicional. Ela possui umas 35 palavras-chave em mais de 40 anos e com isso as pessoas fazem kernels de sistema operacionais, engine de jogos, programas científicos, drivers, outras linguagens de programação como Python etc.

Então você vai investir uma pequena quantidade de tempo e produzir muito com aquele conhecimento. Em comparação, C++ é enorme. A documentação de C++ é ainda maior (e por vezes pior). Toda vez que você vai usar alguma coisa, você tem que voltar pra documentação pra se certificar que aquilo ainda obedece as mesmas regras de antes.

 

Você pode ter uma sensação com C++ (e Python pode estar indo nessa direção) de que está sempre aprendendo continuamente e produzindo menos por perder tempo com esse aprendizado continuo.

 

Então eu louvo o minimalismo de C.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

8 horas atrás, V!OLADOR disse:

Então você vai investir uma pequena quantidade de tempo e produzir muito com aquele conhecimento

 

Talvez não devesse resumir tanto assim uma realidade tão complexa.

Citando o criador de C++, a linguagem oferece uma coisa que em C não existe: "abstrações a custo zero". Muitas vezes apenas para criar um modelo da solução em C leva uma eternidade e em C++ minutos.

 

Tem uma infinidade de recursos em C++ que economizam um tempo enorme e estão lá há desde os anos 80, estáveis. Classes, polimorfismo, herança. Encapsulamento dá uma segurança que inexiste em C.

E a performance em C++ é praticamente a mesma que em C.

 

E muitos dos recursos das 
 

8 horas atrás, V!OLADOR disse:

35 palavras-chave em mais de 40 anos

 

estão presentes e similares em mais de 30 anos de C++

 

8 horas atrás, V!OLADOR disse:

as pessoas fazem kernels de sistema operacionais, engine de jogos, programas científicos, drivers, outras linguagens de programação como Python 

 

Há muito essas atividades vem sendo migradas para C++. Muito do Windows e Office está hoje em C++ segundo a própria Microsoft, por exemplo 

 

8 horas atrás, V!OLADOR disse:

A documentação de C++ é ainda maior (e por vezes pior)

 

Está falando do standard? tem algum trecho de exemplo em que seja C++ pior? Que documentação seria essa? Esse documento sobre C em relação a esse documento sobre C++

 

O que é pior? Ou fala de algum livro ou autor?

 

9 horas atrás, V!OLADOR disse:

Toda vez que você vai usar alguma coisa, você tem que voltar pra documentação pra se certificar que aquilo ainda obedece as mesmas regras de antes

 

Tem algum exemplo de algo que obedece a outras regras desde o C++ de 98? As mudanças na linguagem em geral não invalidam "regras de antes".  Não me lembro de um único caso desde os anos 80 que tenha tido que mudar um programa por causa de mudança de regras. Em C ou C++. 
 

Em geral se muda quando aparece algo claramente melhor e se pode mudar o código ou está escrevendo algo novo. 

Coisas como declarar variáveis no for em C, as enormes facilidades de inicialização introduzidas em C, o range for de C++, os smart pointers de C++, os novos algoritmos na STL, as facilidades com templates, &&, move semantics, traling return types, lambdas, functors, auto, facilidades de inicialização... São muitas cosias em '11, '14, '17 e a gora em '20.

 

Você tem algum exemplo disso?

 

9 horas atrás, V!OLADOR disse:

Você pode ter uma sensação com C++ (e Python pode estar indo nessa direção) de que está sempre aprendendo continuamente e produzindo menos por perder tempo com esse aprendizado continuo

 

Não dá pra discutir uma sensação. 

Mas provavelmente não se deva associar nunca aprender a produzir menos. 

 

Sugiro postar exemplos ou argumentos objetivos que justifiquem afirmações como
 

9 horas atrás, V!OLADOR disse:

(e por vezes pior).


ou
 

9 horas atrás, V!OLADOR disse:

tem que voltar pra documentação pra se certificar que aquilo ainda obedece as mesmas regras de antes


 ou 
 

9 horas atrás, V!OLADOR disse:

você vai investir uma pequena quantidade de tempo e produzir muito com aquele conhecimento


ao postar em um forum público como esse.

 

Outras como essa

 

9 horas atrás, V!OLADOR disse:

Então eu louvo o minimalismo de C

 

estão perfeitas, classificadas como opinião pessoal em um forum púbico.

 

Também acho C sensacional 🤔

Link para o comentário
Compartilhar em outros sites

31 minutos atrás, Dragon_Extreme disse:

Devo aprender C primeiro para depois is para o C++ ou devo ir logo para o C++? Qual livro e onde você aprendeu C++? Quanto tempo você levou? 

 

São linguagens muito diferentes. 
 

Meu palpite é aprender C++ primeiro. É muito mais simples e os conceitos são similares no início, só que C++ é muito mais poderosa e expressiva e mais interessante desde o início

 

Só que no início noções como ponteiros, variáveis, loops, alocação, funções e estrutura são muito similares e assim poderá programar em C com mais facilidade depois.

 

Por outro coisas como as que listei antes de C++ não tem nenhum equivalente em C.

 

Não sei dizer quanto tempo levei pra aprender uma ou a outra. nem vou dizer que sei uma ou a outra, mas uso as duas desde os '90 então nem sei me lembraria :) Não sei de muitos livros pra recomendar. O livro de C claro é o de Kernighan e Ritchie, o tal "livro branco": "A linguagem de programação C". A bíblia do C. E o de C++ se eu só pudesse ver um seria claro o "The C++ Programming Language". E tem esse Princípios e Práticas de Programação com C++. E esse é muito bom mesmo A Tour of C++


E se quiser opiniões de outros caras tente qualquer coisa de Scott Meyers, Herb Sutter ou Andrei Alexandrescu, acho que são os melhores do mundo C++, exceto pelo Prof. Stroustrup que escreveu todos os outros que listei, e a linguagem em si.

 

Os livros da série Heads First são meio bobinhos com desenhos e quizz e tal mas são legais também.

 

Fuja de qualquer livro que misture C e C++.

 

Livros de estruturas de dados usando C ou C++ são muito legais também, eu acho, porque discutem a linguagem em torno de assuntos legais e já em torno de algo aplicável.

 

Recomendo muito ter um livro.  E sites como cPlusPlus.com e TutorialsPoint.com são bem legais como referência. Queria ter tido isso no passado. Ou a internet pelo menos :) E GeeksForGeeks tem exemplos de tudo. Muito legal.

 

Forums como esse aqui podem ser um bom recurso também. Sempre tem gente disposta a ajudar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

9 horas atrás, arfneto disse:

Talvez não devesse resumir tanto assim uma realidade tão complexa.

Citando o criador de C++, a linguagem oferece uma coisa que em C não existe: "abstrações a custo zero". Muitas vezes apenas para criar um modelo da solução em C leva uma eternidade e em C++ minutos.

 

Tem uma infinidade de recursos em C++ que economizam um tempo enorme e estão lá há desde os anos 80, estáveis. Classes, polimorfismo, herança. Encapsulamento dá uma segurança que inexiste em C.

E a performance em C++ é praticamente a mesma que em C.

 

Bom, devo iniciar dizendo que eu sou um grande fã de C++, uso há anos pra aplicações cientificas. As criticas são positivas e visam alertar os novos estudantes dos cuidados que devem ter ao aprender uma linguagem grande, complexa e em continuo desenvolvimento. Alem de não absorverem certos vícios e mitos que propagam por ai.

 

Por exemplo, muitos desses recursos que são atribuídos a C++ não o são. Encapsulamento era, originalmente, um modelo usado em C (bom, ainda é). Funções, tipos e variáveis declaradas e definidas no mesmo modulo são invisíveis ao resto do programa. De maneira que você compila o modulo e apenas fornece a interface através de um header .h. Assim, o cliente não tem nenhum acesso a implementação dos métodos. De fato, o conceito é tão genial que é a origem da sua popularidade em grandes projetos porque caso um modulo seja modificado, basta linkar o novo modulo ao resto do programa sem precisar recompilar tudo (outra faceta essencial do conceito de encapsulamento).

 

Quando C++ trouxe o conceito (genial, diga-se!) de template, o código template migrou de um modulo diretamente pro header .h, ou seja, o código fonte da implementação fica exposto a quem queira. Num grande projeto open-source encapsulamento quase beira um mero conceito sem efeitos práticos. Obviamente, ao longo dos anos criou-se medidas pra contornar essa situação, sacrificando um pouco de performance, e criando um modelo novo de encapsulamento. Frequentemente você encontra profissionais da área que acham que encapsular significa ter uma variável privada numa classe declarada no header e recompilada toda vez que você modifica uma parte do código completamente independente dela.

 

O meu ponto nesse exemplo é: C++ transformou um conceito original noutro menos efetivo e eventualmente isso vem com um preço na eficiência do código/projeto porque o programador tem que inventar uma gambiarra pra atender ao conceito original. Isso é bem recorrente em C++: uma super-engenharia pra criar algo que já existe mas tornando-o menos eficiente. De fato a maior qualidade de C++ é, também, um grande problema: o fato de ela ter soluções pre-prontas pra varias situações significa carregar necessariamente uma perda de desempenho muitas vezes por fazer coisas adicionais que você não precisa naquele caso.

 

Mas acho melhor não estender esse debate, aqui em particular, porque estamos off-topic ao objetivo original do autor 😄. Podemos criar um tópico próprio, algo como C++ pros vs cons.

 

adicionado 11 minutos depois
5 horas atrás, Dragon_Extreme disse:

@arfneto Devo aprender C primeiro para depois is para o C++ ou devo ir logo para o C++? Qual livro e onde você aprendeu C++? Quanto tempo você levou? 

 

No fim das contas participei do teu tópico sem responder as perguntas que você fez. 😄 Foi mal.

 

Rapidamente, acho que o Benjamin Breeg respondeu tua primeira pergunta perfeitamente: C é uma linguagem minimalista com apenas algumas dezenas de palavras-chaves e quase a mesma em mais de quarenta anos. Isso significa que é muito estável e segura e a relação de aprendizado vs tempo de produção é ótimo. Então ela não muda (propositalmente) com a frequência de Python.

 

Sobre aprender C ou C++ eu sugeriria C primeiro porque é mais simples alem de ser a raiz de C++, C# etc. Todas essas linguagens desenvolve conceitos originalmente criados por C, se você entende o funcionamento original fica mais fácil entender a respectiva versão do mesmo conceito nas outras linguagens. Recomendo o livro clássico "The C prgramming Language". A bíblia, pequeno e fácil de ler. Acho que pode até encontra-lo no google se buscar bem.

 

Link para o comentário
Compartilhar em outros sites

8 minutos atrás, V!OLADOR disse:

Por exemplo, muitos desses recursos que são atribuídos a C++ não o são. Encapsulamento era, originalmente, um modelo usado em C (bom, ainda é). Funções, tipos e variáveis declaradas e definidas no mesmo modulo são invisíveis ao resto do programa. De maneira que você compila o modulo e apenas fornece a interface através de um header .h. Assim, o cliente não tem nenhum acesso a implementação dos métodos

 

Você está vendo isso de um lado corporativo, parece. Nada tem a ver com proteger de clientes e usuários. É um efeito colateral. Encapsulamento, como é garantido por C++ e outras linguagens, não existe em C. Nada tem a ver com headers.

O compilador garante o encapsulamento na classe, no código.

 

Protege você e seu código de você mesmo. Esse é o valor. 

 

10 minutos atrás, V!OLADOR disse:

emplate, o código template migrou de um modulo diretamente pro header .h, ou seja, o código fonte da implementação fica exposto a quem queira. Num grande projeto open-source encapsulamento quase beira um mero conceito sem efeitos práticos

 

A STL --- standard template library --- mostra uma outra coisa: um volume absolutamente enorme de código de qualidade pronto para usar, totalmente baseado em templates. Que acha de poder declarar filas, arvores, hash, mapas, pilhas, vetores de classes escritas por você mesmo com funções, lógica, construtores e destrutores tudo indo dentro de graça? Veja a qualidade e a diversidade dos algoritmos em <algorithm> na STL. Tudo baseado em templates, e pense em como usar isso em C.

 

Como replicar isso em C? Com void*? 

 

14 minutos atrás, V!OLADOR disse:

O meu ponto nesse exemplo é: C++ transformou um conceito original noutro menos efetivo e eventualmente isso vem com um preço na eficiência do código/projeto porque o programador tem que inventar uma gambiarra pra atender ao conceito original

 

Você continua estabelecendo sua opinião como fato, sem qualquer exemplo ou referência. Não acho que deva escrever isso em um forum para iniciantes. Use exemplos, autores, trechos de códigos, exemplos como eu dei.

 

16 minutos atrás, V!OLADOR disse:

De fato a maior qualidade de C++ é, também, um grande problema: o fato de ela ter soluções pre-prontas pra varias situações significa carregar necessariamente uma perda de desempenho muitas vezes por fazer coisas adicionais que você não precisa naquele caso

 

 

Sério? De fato? Tem um argumento? Um exemplo de uma solução pré-pronta de baixo desempenho? 

 

Link para o comentário
Compartilhar em outros sites

Entre C e Python ou 'porcaria' mal acabada C++ prefira a Python 

 

Em 09/07/2020 às 14:01, Dragon_Extreme disse:

Se ela muda então onde posso me atualizar sobre as mudanças da linguagem?

Aqui tem bastante coisa, quiçá tudo de C 😄 http://www.open-std.org/jtc1/sc22/wg14/www/docs/?C=M;O=D.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!