C#/C e C++ : Conheça as diferenças e história de cada uma

C#/C e C++ : Conheça as diferenças e história de cada uma
5 (100%) 4 votes

Os modelos C++ e genéricos C# são recursos de linguagem que fornecem o suporte aos tipos parametrizados. No entanto, há várias diferenças entre os dois. No nível de sintaxe, os genéricos C# são uma abordagem mais simples para os tipos parametrizados sem a complexidade de modelos C++. Além disso, o C# não tenta fornecer toda a funcionalidade que os modelos C++ fornecem. No nível da implementação, a principal diferença é que as substituições do tipo genérico do C# são realizadas em tempo de execução e as informações do tipo genérico são preservadas para objetos instanciados. 

Para obter mais informações, consulte Genéricos em tempo de execução.

C# e C/C++: A seguir estão as principais diferenças entre os modelos 

  • Os genéricos C# não oferecem a mesma flexibilidade que os modelos C++. Por exemplo, não é possível chamar os operadores aritméticos em uma classe genérica C#, embora seja possível chamar operadores definidos pelo usuário.
  • O C# não permite parâmetros de modelo sem tipo, como template C<int i> {}.
  • O C# não dá suporte à especialização explícita ou seja, uma implementação personalizada de um modelo para um tipo específico.
  • O C# não dá suporte à especialização parcial: uma implementação personalizada para um subconjunto dos argumentos de tipo.
  • O C# não permite que o parâmetro de tipo a ser usado como a classe base para o tipo genérico.
  • O C# não permite que os parâmetros de tipo tenham tipos padrão.
  • No C#, um parâmetro de tipo genérico não pode ser genérico, embora os tipos construídos possam ser usados como genéricos. O C++ permite parâmetros de modelo.
  • O C++ permite o código que pode não ser válido para todos os parâmetros de tipo no modelo, que é então verificado para o tipo específico usado como o parâmetro de tipo. O C# requer código em uma classe a ser gravada de forma que ele funcionará com qualquer tipo que satisfaça as restrições. Por exemplo, em C++ é possível escrever uma função que usa os operadores aritméticos + e - em objetos do parâmetro de tipo, que produzirá um erro no momento da instanciação do modelo com um tipo que não dá suporte a esses operadores. O C# não permite isso. Os únicos constructos da linguagem permitidos são os que podem ser deduzidos das restrições.

Vantagens de C++ sobre C#

  • Sistemas operacionais viáveis, drivers para sistemas operacionais existentes ou qualquer operação que precise acesso direto ao hardware.
  • Gerenciamento e otimização manual de memória inclusive permitindo aplicações real time.
  • Metaprogramação com templates e pré-processamento.
  • Herança múltipla.
  • Manipulação livre de ponteiros.
  • Uma série de pequenas funcionalidades sintáticas e semânticas.

Alguns já disseram que em tese pode-se fazer tudo. Claro que isto é verdade e é claro que há diferenças de como fazer e do resultado obtido. Algumas coisas são mais fáceis de fazer em uma linguagem do que eu outra. De uma certa forma, o pedido de não falar sobre o que é mais fácil elimina qualquer coisa que dê para falar da linguagem em si. Como eu acho que tem maneiras objetivas de falar das facilidades vou tentar responder.

Ambiente

  • Permite o uso em virtualmente qualquer plataforma enquanto que o C# essencialmente só funcionam em todas as plataformas mainstream, que são as que mais importam, os 3 principais desktops, os 3 principais mobiles e diversos servidores.
  • Roda sem a dependência de um runtime grande. As aplicações podem ficar bem enxutas. C# melhorou um pouco isso.
  • Não precisa JITtar o código antes de executar. Agora existe o .NET Native.
  • Acesso direto ao hardware e sistema operacional permitindo a criação de drivers, por exemplo.
  • Integração mais fácil com C.

Gerenciamento de memória

  • Tem controle absoluto sobre o gerenciamento de memória.
  • Permite controle total do layout e local de armazenagem das estruturas de dados. Dá para economizar até o último byte e colocar no local ótimo para a situação.
  • Liberação determinística de recursos como parte do objeto, impedindo que a liberação seja esquecida porque não colocou um using.
  • Permite a implementação de algum garbage collector.

Otimizações

  • Permite buscar otimizações que economizam o último ciclo do processador. E tem algumas otimizações mais agressivas no compilador.
  • Economia de memória em diversos aspectos.
  • Aplicações “totalmente” real time. Alguns games com main loop muito pesado sem folga para coleta de lixo só são viáveis em C++.
  • Se vale de comportamentos indefinidos para obter otimizações e capacidades de acordo com a plataforma.
  • Usa os dados numéricos básicos com o layout mais adequado para a plataforma.
  • Inclusão de código Assembly.
  • Ter implementações genéricas totalmente em tempo de compilação.
  • Economiza o overhead da vtable quando ela não é necessária.
  • Existem mais escolhas para otimizar códigos mantendo a semântica adequada (move semantics, inicializadores e constexpr por exemplo).

Sintaxe

  • Criar pseudo-sintaxe e utilizar outras “facilidades” do pré-processador.
  • Agrupar as declarações de membros por visibilidade sem diretiva #region.

Tipagem

  • Possui union apesar do C# ter uma forma limitada.
  • Tem a segurança que referências (não confundir com ponteiros) não contêm valor nulo. C# terá algo assim.
  • Liberdade para criar hierarquia de objetos como quiser, sem uma hierarquia básica pré-definida.
  • Utilizar tipos além de bool como resultado para desvio condicional.
  • Tem vários tipos string por padrão.
  • Tem mais controle sobre constância de valores, incluindo coerção da constância.
  • As funções podem ter o tipo de retorno inferido.

Recursos específicos

  • Tem funções independentes que não precisam ser membros de classes.
  • Herança múltipla de classes abstratas, não só através de interfaces.
  • Utilizar uma sub-linguagem com templates que é absurdamente mais poderosa que generics. Só este item pode se desdobrar em diversos outros.
  • Permite goto de forma um pouco mais livre.
  • Permite criar literais para os tipos.
  • Há mais operadores que podem ser sobrecarregados.
  • Há mais controle na forma de captura de variáveis em closures.
  • throw permite lançar qualquer classe.
  • Os ponteiros são bem mais flexíveis e poderosos, permite acessos arbitrários à memória.

Miscelânea

  • Escolha de uma gama mais ampla de modelos de memória para tratar paralelismo e concorrência.
  • Pode explodir seu computador e colocar seu cérebro em parafuso (é só piada, ok?)

Algumas dificuldades do C#, principalmente as primeiras listadas podem ser solucionadas em breve com o .NET Native. Por isto é bom ter em mente que o a dificuldade muitas vezes está na implementação da linguagem e não na linguagem em si. Algumas destas limitações são minimizadas há tempos com o Mono.

Alguém poderia dizer que C++ permite criar um sistema operacional ou pelo menos que seria mais fácil. C# também permite e é até mais fácil. Claro que ele pode ter algumas limitações, mas é possível e de fato já foi feito. Pode até precisar de auxílio de outra linguagem (Assembly), mas C++ também precisa.

Alguns itens poderiam gerar vários detalhamentos. Tem tantas coisas que a lista pode crescer indefinidamente.

Ter todas estas capacidades não significa que o C++ é melhor. É diferente. Até porque algumas destas coisas que o C++ pode fazer facilmente é interpretado como desvantagem. E o C# também tem muitas coisas mais “prontas” ou mais poderosas que o C++. Apenas a pergunta não tem interessa nisto.

FONTE:https://pt.stackoverflow.com/questions/7740/o-que-o-c-pode-fazer-que-o-c-n%C3%A3o-pode

C/C++ e a Sua História

A Linguagem C foi inventada e foi implementada no inicio dos anos 70 por Dennis Ritchie em um DEC PDP-11, usando o Sistema Operacional UNIX.

A linguagem C é o resultado do processo de desenvolvimento iniciado com outra linguagem, chamada BCPL, desenvolvida por Martin Richards. Esta linguagem influenciou a linguagem inventada por Ken Thompson, chamada linguagem B.

Sendo assim a linguagem C é a evolução da linguagem B.

A linguagem C se tornou uma das linguagens de programação mais utilizada, por ser flexível e ainda poderosa, sendo que ela é a responsável pela criação de alguns software famosos e a base de outros como jogos.

A linguagem C e seus limites…

A linguagem C encontra seus limites quando o tamanho de um projeto ultrapassa certo ponto de 25.000 a 100.00 linhas de código. Para a solução desse problema em 1980 um estudioso chamado Bjarne Stroustrup acrescentando varias intenções na linguagem C deu origem à nova linguagem que se chamava inicialmente “C com classes”, e por volta dos anos 1983 o nome foi mudado para linguagem C++.

Mais a evolução do C++ não parou com o Bjarne Stroustrup, muitas foram as implementações, até tornarem a linguagem C++ uma linguagem que suporta Programação Orientada a Objetos. As inspirações relacionadas acima deve através de outra linguagem de programação chamada Simula67.

Atualmente a linguagem C / C++ é utilizada nas faculdades de Sistema de Informação e Ciência da Programação em aulas de Lógica de Programação e Estrutura de dados.

OBS: Nas faculdades ainda ensina-se o básico da linguagem e não todo o potencial que ela pode nos oferecer referente à criação de sistemas e de projetos.

C++ Quais os Programas Utilizados

Bom existe na internet alguns programas que são utilizados para criar as linhas de códigos e compilar os mesmo tornando em executáveis as aplicações.

DevC++:

Hoje mais utilizado pelas pessoas que estão aprendendo a linguagem e alguns mais avançados utilizam também. Lembrando que esse programa tem algumas limitações quanto ao uso integral da linguagem.

Visual Studio:

Ferramenta mais completa para utilizar para o desenvolvimento de aplicações em C e C++, sendo que tem a parte de console para desenvolvimento e a porte visual. Com essa ferramenta também tem como utilizar Banco de dados para utilização da Linguagem da Programação C.

C Builder:

Também ótima ferramenta para desenvolvimente de aplicações visuais.

Existem outras ferramentas que podem ser utilizadas, mais acima relacionei as mais comuns de se utilizar.

Esqueleto de um programa em C

/* Inicio do Programa, tem que declarar as Bibliotecas*/
#include<iostream.h>
int a_global /* Declaração de variáveis Globais*/
/*Declaração de funções e procedimentos caso se tiver*/
int main() /*Declaração da função principal, é sempre necessário*/
{
    float num1; /*Variáveis locais*/
    
    /*Comando*/
}
</iostream.h>

A história é maior que isso que foi escrito, mais se formos realmente falar sobre C/C++ seria em torno de uns 20 artigos pois tem muita informação sobre o mesmo.

C# e a sua História

C# e sua historia

O desenvolvimento do C# (pronuncia-se: C Sharp), de acordo com o website Wikipédia (2013), teve início no final do século XX (1999). A convite da Microsoft, Anders Hejlsberg formou uma equipe de programadores para desenvolver uma nova linguagem de programação. A primeira linguagem criada pela equipe de Hejlsberg recebe o nome de Cool. Mais tarde, na virada de século, a linguagem Cool foi rebatizada para C#.

Após o renome da linguagem, a Microsoft submeteu-a à ECMA (European Computer Manufacturers Association), associação cujo objetivo é a padronização de sistemas de informação. Em 2001, a ECMA aprovou o C# e a linguagem recebeu a especificação ECMA-334. Mais tarde, em 2003, tornou-se padrão também da ISO, recebendo a especificação de ISO/IEC 23270.

O C# surgiu com a finalidade de possibilitar a criação de soluções executáveis sobre a plataforma .NET Framework, com o intuito de flexibilizar o desenvolvimento de aplicativos. Dessa maneira, o desenvolvedor não cria soluções para um dispositivo eletrônico específico, e sim para a plataforma .NET Framework.

C# C Visual Studio

Para a codificação de sistemas baseados em .NET Framework, a Microsoft lançou o Visual Studio. Esta ferramenta é uma IDE (Integrated Development Environment) que conta com um editor de código, compilador, com modelos de projetos de exemplos, designers e assistente de códigos.

MSDN (2012), diz que os algoritmos escritos em C# são executados no .NET Framework, um componente para Windows que inclui um sistema de execução virtual da aplicação por meio do Common Language Runtime (CLR) e um conjunto de bibliotecas de classes, além de contar com uma solução comercial da Microsoft, que faz parte da infraestrutura de linguagem comum (CLI). O CLI é tido como um padrão internacional para a criação e execução de ambientes de desenvolvimento onde as linguagens e as bibliotecas trabalham em sincronia.

Ainda de acordo com MSDN (2012), a compilação em C# é processada em uma Intermediate Language (IL) que está em conformidade com a especificação CLI. O código IL e seus recursos, tais como bitmaps e strings, são armazenados no disco rígido em um arquivo executável chamado de Assembly. No momento da execução de um programa em C#, o Assembly é carregado para o CLR. Uma vez aprovado os requisitos de segurança, o CLR executa a compilação Just in Time (JIT) para converter o código IL em linguagem de baixo nível.

A linguagem C# e suas características

A criação do C# foi baseada nas linguagens de programação C, C++ e Java. Deste modo, programadores habituados com uma dessas linguagens são capazes de desenvolver soluções sem maiores dificuldades, pois ela reúne recursos de cada uma destas linguagens base e adiciona novos recursos exclusivos.

Em relação a linguagem C, o C# tem foco na compilação de soluções de alto nível, já a linguagem C é voltada para o desenvolvimento de baixo nível. Outras comparações, de acordo com MSDN (2012), o C#, simplifica de modo significativo a complexidade do C++ e introduz novos elementos não disponíveis no Java, tais como: tipos primitivos com valores nulos, delegações, expressões lambda e acesso direto à memória.

O MSDN Ressalta…

MSDN (2012) ressalta que, o processo de compilação do C# é mais simples e mais flexível comparado ao C++ ou Java, pois elimina-se a necessidade de arquivos de cabeçalhos separados e não há a necessidade da declaração de métodos e tipos em uma ordem específica. Um arquivo contendo códigos de programação podem ser definidos quaisquer números de classes, estruturas, interfaces e eventos que forem necessários.

De acordo com OFICINA DA NET (2007), comparada ao C e C++, a linguagem C# é restrita e melhorada em vários aspectos, tais como:

  • Unsafe mode: ponteiros e fórmulas aritméticas utilizados sem verificação de integridade só podem serem utilizados na modalidade de modo inseguro;
  • Overflow: acessos a objetos são realizados através de referências seguras, dessa forma não podem serem invalidadas e normalmente as operações aritméticas são checadas contra sobrecarga;
  • Garbage collector: os objetos não são liberados da memória explicitamente, e sim através de um processo que elimina objetos quando não há referências;
  • Disposable: Destrutores não existem, mas utilizada junto com a construção using block, torna possível que recursos alocados por um objeto sejam liberados;
  • C# é mais seguro com tipos: as conversões implícitas por default são conversões seguras, tais como ampliação de inteiros e conversões de um tipo derivado para um tipo base; não existem conversões implícitas entre inteiros e variáveis lógicas ou enumerações; não existem ponteiros nulos; todas as conversões implícitas definida pelo usuário deve ser marcada explicitamente;
  • Namespace: membros de enumeração são colocados em seu próprio espaço de nome;
  • Reflexão: recursos de reflexão complexos estão disponíveis.

Ainda de acordo com OFICINA DA NET (2007), as diferenças do C# com o Java são: diferentemente de Java, no C# são implementados propriedades e sobrecargas de operadores, implementa modo inseguro que permite a manipulação de ponteiros e aritméticos sem checagem, exceções não são checadas, implementa goto como estrutura de controle, oferece suporte a indexadores e delegates.

MSDN (2012), ressalta algumas características do C#, a citar:

  • Suporta conceitos típicos de orientação a objetos, como encapsulamento, herança e polimorfismo;
  • Todas as variáveis, métodos e o ponto de execução de uma aplicação, são encapsuladas em definições de classes;
  • Uma classe derivada pode herdar apenas uma classe pai, e herdar quantas interfaces forem necessárias;
  • Os métodos da classe derivada que substituem os métodos virtuais de uma classe pai exigem a utilização da palavra reservada: override para evitar a redefinição acidental de um método;
  • Uma struct tem a mesma funcionalidade de classe, com a diferença, de ser mais simplificada; implementam interfaces, mas não suporta herança;
  • Suporte à implementação de métodos e tipos genéricos para garantir maior segurança de tipo e de desempenho à aplicação;
  • Os iteradores permitem a implementação de coleções de classes para definir comportamentos de iteração personalizados;
  • As expressões LINQ (Consultas Integradas à Linguagem) são responsáveis em realizar consultas com base na integração dos recursos de consultas da própria linguagem.

Segundo LIMA (2002), as características essenciais do C# são:

  • Simplicidade: os projetistas de C# costumam dizer que essa linguagem é tão poderosa quanto o C++ e tão simples quanto o Visual Basic;
  • Completamente orientada a objetos: em C#, qualquer variável tem de fazer parte de uma classe;
  • Fortemente tipada: isso ajudará a evitar erros por manipulação imprópria de tipos, atribuições incorretas etc.;
  • Gera código gerenciado: assim como o ambiente .NET é gerenciado, assim também é o C#;
  • Tudo é um objeto: System.Object é a classe base de todo o sistema de tipos de C#;
  • Controle de versões: cada assembly gerado, seja como EXE ou DLL, tem informação sobre a versão do código, permitindo a coexistência de dois assemblies homônimos, mas de versões diferentes no mesmo ambiente;
  • Suporte a código legado: o C# pode interagir com código legado de objetos COM e DLL’s escritas em uma linguagem não-gerenciada;
  • Flexibilidade: se o desenvolvedor precisar usar ponteiros, o C# permite, mas ao custo de desenvolver código não-gerenciado, chamado “unsafe”.
  • Linguagem gerenciada: os programas desenvolvidos em C# executam num ambiente gerenciado, o que significa que todo o gerenciamento de memória é feito pelo runtime via o GC (Garbage Collector), e não diretamente pelo programador, reduzindo as chances de cometer erros comuns a linguagens de programação onde o gerenciamento da memória é feito diretamente pelo programador.

Evolução da linguagem C#

A primeira versão do C# começou a ser usado a partir do Visual Studio 2002. De acordo com o Website kunal-chowdhury (2012), sua principal característica era a capacidade de escrever códigos gerenciáveis. Outras características da primeira versão do C# são: conceitos de Orientação a Objetos, suporte nativo a propriedades e eventos, documentação XML, exceções, segurança de tipos, sobrecarga de operadores e gerenciamento automático de memória.

C# Visual Studio 2002

Desde a primeira versão, o C# suporta dois tipos de dados. Tipos de valor: incluem variáveis simples, como char, int e float, tipos de enumeração e de estrutura. O segundo grupo engloba tipos de dados por referência, como: classes, interface, delegates e array.

A segunda versão da linguagem (2.0) foi introduzida com o Visual Studio 2005 e Visual Studio 2005 Express. De acordo com MSDN (2005) as novidades são: tipos genéricos, iteradores, classe parcial, tipos anuláveis, métodos anônimos, qualificador de alias de namespace, classes estáticas, modificadores externos para declarar métodos declarados externamente, possibilidade de definir diferentes níveis de acessibilidades ao métodos gets e sets, maior flexibilidade no tipo de retorno e parâmetros ao passar para um delegate, buffer de tamanha fixo.

Já no Visual Studio…

Com o Visual Studio 2008 e Visual Studio 2008 Express, o C# 3.0 (“C# Orcas”), de acordo com MSDN (2007) introduziu várias extensões de linguagem que se baseiam no C# 2.0. A versão 3.0 conta ainda com métodos de extensão, expressões lambda, tipos anônimos, tipos implícitos de arrays, expressões de consulta e árvores de expressões.

Na sua versão 4.0, contando com o Visual Studio 2010 e Visual Studio 2010 Express, os novos recursos agregados, de acordo com BURROWS (2010), compreendem: DLR, parâmetros opcionais e de argumentos nomeados, propriedades indexadas, suporte COM.

Atualmente, o C# está na versão 5.0 acompanhada com o Visual Studio 2012 e Visual Studio 2012 Express. O Website kunal-chowdhury (2012) diz que são duas as novas funcionalidades apresentadas na quinta versão da linguagem: Async e Caller Information. Async é utilizada para indicar se o método, expressão lambda, ou método anônimo são assíncronos. Caller Information para obter informações sobre a chamada a um método, obter o caminho e número de linhas do código-fonte e o nome do membro que o chamou. Caller Information é utilizado para a detecção, depuração e criação de ferramentas de diagnósticos.

Considerações Finais

A criação do C# foi baseada em C, C++ e Java. Dessa maneira, o desenvolvedor possui um apoio referencial no aprendizado da linguagem, não precisando estudar novos conceitos e paradigmas de programação opostos. Desde o seu lançamento, o C# permite o desenvolvimento de aplicações executadas exclusivamente sobre a plataforma .NET Framework.C# C e Java

Dentre algumas das características essenciais do C#, em ordem cronológica de versão, destacam-se : (1.0) totalmente orientada a objetos, gerenciamento automático de memória; (2.0) tipos genéricos, métodos anônimos, classes estáticas; (3.0) tipos anônimos, expressões de consulta e árvore de expressões; (4.0) propriedades indexadas, suporte COM e DLR; (5.0) Async e Caller Information.

A linguagem C# veio acompanhada de uma IDE comercial de desenvolvimento: Visual Studio. A partir de 2005, contou ainda com uma IDE gratuita, denominada Visual Studio Express. Em ordem cronológica, o Visual Studio conta com as seguintes versões: 2002, 2005, 2008, 2010 e 2012.

A utilização do Visual Studio como plataforma de desenvolvimento e o C# garantem algumas vantagens nas construções de aplicativos, tais como: programação orientada a objetos, uso de eventos nos controles, validação de dados e tratamento de erros.

FONTE:https://www.devmedia.com.br/a-evolucao-da-linguagem-de-programacao-csharp/28639 https://www.devmedia.com.br/historia-do-c-c/24029

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *