logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

Bye Bye C++/CLI

Como "xingar muito no Twitter" não faz muito meu estilo, vou usar bem mais do que 140 caracteres para explicar porque C++/CLI entrou na minha lista negra de tecnologias.

A promessa parecia maravilhosa: uma tecnologia que permite integrar código C++ nativo com código gerenciado .NET de forma quase automática. Confesso que quando o C++/CLI foi lançado eu fiquei realmente impressionado, imagino o trabalho que deve ter dado para fazer isso. Mas como na prática a teoria é outra, depois de usar C++/CLI e ter muitos problemas, resolvi jogar a toalha. Motivos para minha decisão:

  • Ao usar C++/CLI reneguei minha máxima de só usar tecnologias Microsoft que eles usam internamente. Assumo que C++/CLI não é extensivamente usando dentro da Microsoft, pelo simples fato de nunca ter lido nada sobre isso.
  • O Intellisense do Visual Studio 2010 não tem suporte a C++/CLI. O SP1 também não. Agora a Microsoft está prometendo para próxima versão. Tarde demais.
  • For fuck sake, NÃO EXISTE Application::Run em C++, isso é C++/CLI. No help do framework você pode filtrar pelas linguagens. E tem um tal de C++ em todos os tópicos do .NET Framework, mesmo que o compilador de C++ só gere código nativo. A Microsoft criou uma IMENSA confusão entre C++ e C++/CLI, e isso é notório na lista C & C++ Brasil (exemplo 1, exemplo 2 e exemplo 3).
  • Quando você ativa o suporte a C++/CLI, o compilador começa a reclamar com algumas coisas do Boost ([1], [2]). Muitas vezes o código compila mas o programa não roda. A única solução é encher tudo de #pragma managed e #pragma unmanaged. Mas a Microsoft recomenda que você não faça isso, mas sim, reestruture seu código (e note que o bug do link foi fechado como "wont fix"). Alguém pode até dizer que "Boost é incompatível com C++/CLI". Mas Boost é C++ padrão, e o C++/CLI propõe integrar código C++ padrão com .NET. #FAIL
  • Não vejo prioridade para correções nos bugs do compilador relacionados a C++/CLI
  • Quando você chama código C# a partir de um código C++/CLI, muitas vezes o debugger do Visual Studio não percebe que você mudou para código gerenciado (mesmo com o debug "managed" ativado), e você não consegue fazer debug.

Migrei todo meu código C++/CLI para C++ comum. Tudo que é C++ fica em uma DLL, onde eu exporto tudo como funções C. Nessas funções C eu faço a ponte entre .NET e C++ de forma manual (coisa que o C++/CLI deveria fazer automaticamente). É necessário fazer código ponte na parte C# também, principalmente para fazer o marshal/unmarshal e para guardar a referência dos delegates passados como ponteiro de função. Pronto, agora tudo funciona como deveria, eu sempre consigo fazer debug, e eu sei que não vou perder uma semana inteira (isso já aconteceu) mudando flags de compilação até meu projeto funcionar.

Já que eu já comecei a sessão reclamação, vou aproveitar para mandar mais um bullet point (ponto de bala?):

  • A IDE do Visual Studio 2010 é a pior ide que eu já vi a Microsoft colocar no mercado. Pelo simples fato de ser extremamente instável e bugada. Cai toda hora. O Intellisense para C++ continua sendo uma piada, só que agora uma piada que consome 100% de processador quase sempre através do mais novo penduricalho do Visual C++, um tal de vcpkgsrv.exe. Quando você digita isso no Google, a primeira sugestão é "vcpkgsrv.exe crash". Bom para Whole Tomato, que continua muito bem vendendo o Visual Assist.
  • Para ser justo, o compilador C++ do Visual Studio 2010 é o MELHOR COMPILADOR C++ QUE EU JÁ VI. Até hoje não vi nenhum "internal compiler error". E tem um ótimo suporte à C++0x. O único problema é a ambiguidade de coisas como ter std::shared_ptr e boost::shared_ptr, mas isso não é culpa da Microsoft.

Prometo que o próximo post terá código (em Assembly se possível), porque, afinal, a humanidade já possui uma ferramenta oficial para reclamar de tudo e todos, o Twitter.

Em 04/03/2011 20:04, por Rodrigo Strauss


  
 
 
Comentários
Rafael Fino | website | e-mail | em 04/03/2011 | #
"Bullet point" == "ponto de munição"? rs...

Assino embaixo de tudo isso, já sofri o suficiente com CLI para nunca mais querer ou escolher usa-la em meus projetos.
Philipe | em 04/03/2011 | #
Acho que "bullet point" == "ponto de projétil"...
Ivan | em 04/03/2011 | #
bullet |ˈboŏlit|
noun

1 a projectile for firing from a rifle, revolver, or other small firearms, typically of metal, cylindrical and pointed, and sometimes containing an explosive.
• used in similes and comparisons to refer to someone or something that moves very fast : the ball sped across the grass like a bullet.
• (in a sporting context) a very fast ball.
2 Printing a small solid circle printed just before a line of type, such as an item in a list, to emphasize it.

ORIGIN early 16th cent. (denoting a cannonball): from French boulet, boulette ‘small ball,’ diminutive of boule, from Latin bulla ‘bubble.’

Nem "ponto de projétil" nem "ponto de bala" nem "ponto de munição".
Thiago | website | em 04/03/2011 | #
"IDE do Visual Studio 2010 é a pior ide que eu já vi a Microsoft colocar no mercado"
Concordo plenamente. Faltou dizer que é super lento.
Ari C. Raimundo | website | e-mail | em 04/03/2011 | #
Olá Rodrigo,

Fiquei 6 anos sem trabalhar com C++ (fui para o mundo gerenciado com C#) e retornei recentemente para trabalhar com Direct3D e Direct2D.

Nunca tive vontade em trabalhar com C++/CLI, devo admitir que também fiquei um pouco confuso na época sobre o que realmente era o C++/CLI. E ainda não tenho vontade ! rs

Em relação a sua questão sobre o VS2010 ser o pior IDE que a Microsoft já lançou, talvez do ponto de vista de um desenvolvedor C++ sim. Mas para o .NET acredito ser totalmente o contrário, é a melhor IDE que a MS já lançou, sem dúvida nenhuma (na minha opinião).

Abraços !
Rodrigo Strauss | website | e-mail | em 05/03/2011 | #
O meu VS 2010 muitas vezes dá um crash quando um desbloqueio a máquina. Isso acontece com todo mundo onde eu trabalho (inclusive com que usa só C#), e o Google me disse que muita gente tem esse problema. Eu fiz debug disso e o crash é na DLL do VB.

Eu tentei duas vezes fazer debug de dois processos ao mesmo tempo, e nas duas vezes o Visual Studio travou. Desisti, agora eu fico com duas instâncias abertas. O que é um problema já que o Visual Studio novo consome uma quantidade absurda de RAM. Eu sempre reclamei do Eclipse por causa da quantidade de memória, agora o Visual Studio consome a mesma coisa (+- 300 MB). Eu sei que RAM é barato, mas a versão antiga consumia bem menos e fazia praticamente as mesmas coisas.

Tenho ouvido pessoas onde eu trabalho reclamar bastante do designer de Winforms. É claro, pode ser desconhecimento ou até bugs que já existiam antes.
Rafael Cossovan | em 05/03/2011 | #
Quanto ao Intellisense, uma dica...
http://www.wholetomato.com/

O meu IDE também trava às vezes sem motivo, triste, mas fazer o que ^^

[]'s
Alberto Fabiano | website | em 08/03/2011 | #
Strauss,

Tirando os fatos:

- do VS2010 crashar direto
- da edição de alguns projetos ficar lento de forma maluca e "sem justificativa" (e potencializar os crashs do VS2010) e você tentar n possibilidades não resolver, mas quando você "recria o projeto" a edição dele voltar a ficar tolerável e os crashs diminuir
- do intelisense do C++/CLI ser inexistente
- dos erros malucos com o C++/CLI
- de após o Intel Parallel Debugger Extension for Microsoft Visual Studio expirar e você utilizar todos os procedimentos para removê-lo o VS2010 passa a crashar com maior frequência
- de interops do C++/CLI com o IronPython (integrado via IronPython tools for Visual Studio 2010) as vezes gerar problemas bizarros

Até que o VS2010 é bacana! :-) E o C++/CLI também decepcionou-me, apesar da qualidade do VC++2010...

[&]s++;
Rodrigo Strauss | website | em 09/03/2011 | #
O Visual 2010 é mais ou menos como o Windows Vista, um projeto extremamente ambicioso. Quem sabe dos avanços do Windows Vista (e do Visual Studio 2010) sabe que é um projeto para anos de desenvolvimento. Acredito que a próxima versão do Visual Studio será provavelmente uma das melhores de todos os tempos. Mas, eu tenho software para entregar semana que vem, não posso esperar mais dois anos.
Carlos Lewandowski | e-mail | em 11/03/2011 | #
Olá Rodrigo, Tive problemas parecidos com visusal studio 2010, aumentei a Ram de 512 MB para 4Gb e os travamentos diminuiram, Idem tambem para o NetBeans, Estou enfrentando um problema parecido ao citado no "exemplo 1" do C & C++ Brasil, só que com o excel a partir do 2003(planilhas com Calculo integral e de logaritimos) Será que tem algo a ver com o C++/CLI?
Rodrigo Strauss | website | em 11/03/2011 | #
Tenho 4GB de RAM também.

O problema do exemplo 1 é .NET, acho melhor você perguntar em uma lista de C#.
Alberto Fabiano | website | em 13/03/2011 | #
Já vi várias "tentativas de respostas" para problema do exemplo 1 em listas de C#, Arquitetura .NET e surgiu até numa lista de F#, até o momento eu não vi uma resposta decente.

Estamos no mesmo barco:

- por ter software para entregar ontem, é que também parei com o VS2010 por enquanto.

[&]s++;
Fábio | em 22/03/2011 | #
"Prometo que o próximo post terá código (em Assembly se possível)"

Acho que alguns conceitos ou códigos envolvendo drivers também seriam muito interessantes. Sangue nos olhos e faca nos dentes ;-)
Rodrigo Strauss | website | em 22/03/2011 | #
www.driverentry.com.br

:-)
Fábio | em 22/03/2011 | #
Pode ter certeza que já reviramos de cabo a rabo o site do Fernando, deixa de preguiça :-)


Leonardo | em 02/04/2011 | #
Nunca tive nenhum problema com g++, me faz um excelente serviço e nem sei o que é um "internal compiler error"...
Rodrigo Strauss | website | em 04/04/2011 | #
E?
Michel | em 15/04/2011 | #
Estava demorando para os arautos do gcc (Ou derivados) aparecerem...

Todo mundo desce a lenha no VS. mas me digam sinceramente qual solução é melhor que ele, em plataforma Windows.

Eu vejo no VS 2010 uma etiquetinha imaginária "Designed for C#". Nesta linguagem, o VS não deixa nada a desejar em minha opiniãp (Exceto, é claro, o alto consumo de RAM que já é marca registrada de cada nova versão).
Sergio C. | website | em 18/04/2011 | #
Eu partilho da mesma opinião que você, Rodrigo.
A MS refez boa parte do VS2010, e como o vista, muita coisa teve que sair errada para estar no prazo.

Fora que comparar o compilador do VSC++ é meio complicado mesmo.
Volta e meia eu estou fazendo alguma engenharia reversa de brincadeira e o cl sempre produz as otimizações mais robustas para os mais diversos casos.
Fora que o VSC++ não é só o cl.
Provavelmente eles vão deixar o VS em um estado bem melhor na próxima versão.
Vamos cruzar os dedos e esperar, né? hehe
dede.exe | em 09/05/2011 | #
Tem toda razão... afinal... a linha 2010 inteira da microsoft é bugada... vide Office 2010
Jackson Batista | em 06/09/2011 | #
Rodrigo, acho que aquilo que você leu sobre a C++/CLI diz algo que é diferente do que eu li sobre a tecnologia. Eu leio atualmente o livro Beginning Visual C++ 2010, do Ivor Horton, que trata também da C++/CLI. E neste livro o autor deixa bem claro que C++/CLI se trata de uma variação, uma versão extendida da linguagem C++, sendo gerenciada pela CLR e podendo usar a Framework Class Library, e não uma tecnologia que intenciona que código C++ nativo seja integrado com código gerenciado .NET automaticamente (o que seria realmente bem melhor e mais proveitoso, mas, o que se vai fazer...). Aliás, o Horton deixa bem claro no livro que usar as duas versões juntas, C++ nativo e C++/CLI, pode sim trazer problemas, o que está mesmo acontecendo contigo. Parece que a(s) fonte(s) em que você leu sobre a tecnologia diz(em) mesmo algo diferente disso.

Abraços, e, é claro, quero ouvir a sua resposta, embora meu comentário esteja meio que atrasado... rs
Rodrigo Strauss | website | e-mail | em 06/09/2011 | #
Jackson, dê uma olhada nos links que eu coloquei, eles mostram toda a confusão que eu falei.
Jackson Batista | em 10/09/2011 | #
Quanto a esse "vcpkgsrv.exe", posso excluí-lo? Eu uso o Visual Assist para Intellisense, então poderia deixar isso a cargo apenas do Visual Assist e excluir esse arquivo?
Rodrigo Strauss | website | e-mail | em 12/09/2011 | #
Desligue o Intellisense nas opções e ele some.
The DevX | em 21/05/2012 | #
Não fique assim Rodrigo, entendo você... Você é só mais um newbie programmer... Você é apenas mais um mero escritor de código... C/C++/C++ CLI não foram criados para corações fracos, tem que colocar a mão na massa, entender o que esta sendo feito e suas conseqüencias... ;—)
Rodrigo Strauss | website | em 21/05/2012 | #
Mão na massa suja a mão, tenho nojinho...
Algo a dizer?
Nome:


Site:


E-mail:


Escreva o número vinte e seis:


 Não mostre meu e-mail no site, não serve pra nada mesmo...

Comentário





Os comentários devem ser sobre assuntos relativos ao post, eu provavelmente apagarei comentários totalmente offtopic. Se quiser me enviar uma mensagem, use o formulário de contato. E não esqueça: isso é um site pessoal e eu me reservo o direito de apagar qualquer comentário ofensivo ou inapropriado.
rebarba rebarba
  ::::