logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

Lista de libs C++, GCC-XML e divagações sobre computação distribuída

Encontrei duas coisas interessantes sobre C++ hoje. A primeira foi uma página com uma lista de libs C++ disponíveis. Esse lista contém links para dezenas de libs, desde as mais conhecidas (como a ACE) até libs para sequenciamento biomolecular (!?). Vale a pena perder um tempinho navegando na lista.

A segunda é o GCC-XML, uma versão (talvez "versão" não seja o termo correto) do GCC que ao invés de compilar o programa, gera um XML com a estrutura do programa. Estou desenvolvendo um framework para computação distribuída nas horas vagas, e nas últimas semanas "criei" um formato de IDL em XML. Basicamente você cria uma arquivo XML com as definições das interfaces e seus métodos, e um programinha (feito em C#) gera o código C++ para proxy/stub. Eu podia usar DCOM, mas minha infra-estrutura precisa ser flexível e extensível (e multiplataforma se possível). Isso envolve comunicação de diversas formas (TCP/IP, MSMQ, MQSeries, FileMapping, ISAPI, etc) e não ter problemas com firewall. Pode parecer que eu estou refazendo a roda (refazendo o DCOM mais precisamente), mas acho que esse framework se parecerá mais com o Indigo.

Voltando à IDL em XML: eu cheguei a pensar em usar YACC/LEX para gerar um parser para MS-IDL, mas achei que seria muito trabalhoso. No final das contas, cheguei à conclusão que um formato XML seria bem mais interessante, pois me permitiria colocar informações extras na IDL/XML (como comentários e links para documentação) sem alterar a estrutura do programa gerador - que nada mais faz do que carregar um XmlDocument e usar XPath para encontrar as interfaces e métodos. Além disso, seria mais fácil manter compatibilidade com os geradores antigos, já que usando XPath eu automaticamente ignoro qualquer propriedade ou entidade que eu não conheça.

Usando o GCC-XML eu posso até gerar o XML diretamente de uma classe C++, e "passá-lo" por um XSLT para gerar um XML no formato do meu gerador. Com isso eu poderia colocar os metadados das classes (inclusive sobre variáveis privadas) dentro do programa, e ter informações precisas em run-time, exatamente como em managed code. Seria possível até fazer um marshal-by-value automático, como acontece com as classes [Serializable] em .NET. Isso funcionaria como um TypeLibrary COM vitaminado, com informações extensas sobre as classes e dados que elas encapsulam.

Eu poderia também fazer um Attribute Provider para o Visual C++ 7.1. Eu também poderia fazer um compilador e criar uma runtime. Ah, e eu poderia ... mmmm ... esquece... Eu sou um programador solitário, e essas divagações - apesar de interessantes - levam bastante tempo para implementar...


Em 07/03/2005 22:53, por Rodrigo Strauss


  
 
 
Comentários
Thiago Adams | website | e-mail | em 08/03/2005 | #
Links com as idéias do XTI (An Extended Type Information Library)

http://www.research.att.com/~bs/kbh-C++0x.pdf

http://lcgapp.cern.ch/project/architecture/XTI_accu.pdf

http://lcgapp.cern.ch/project/architecture/guruviews02.ppt

Estes artigos que me incetivaram a escrever classes de objetos remotos.
Rodrigo Strauss | website | em 08/03/2005 | #
Eu fiz algo bem parecido com o slide 12 do PPT do Stroustrup. É algo assim:
HRESULT hr;
CComPtr pEntityManager;

hr = ISpEntityManager_Proxy::CreateProxy(m_pSvcKernelServices, m_guidStationID, CLSID_SpEntityManager, &pEntityManager);
RETURN_IF_FAILED(hr);

hr = pEntityManager->EntityGetParents(m_bstrEntityID, ppEnumVariant);
RETURN_IF_FAILED(hr);
Note que depois de chamar CreateProxy o uso da interface é normal, eu poderia instanciar o objeto de outra forma. E uso smart pointers, como na proposta do XTI.

A idéia do XTI é boa, espero que avance. Espero também que ela fique o mais próximo possível de gerar os metadados a partir do código C++ diretamente. No meu projeto eu penso em achar as classes candidatas a ter o marshaler gerado verificando a herança (implementação de uma interface, por ex). Só que o projeto do Stroustrup tem +- 3500 linhas e o meu tem 30.000 :-)

Quanto ao C++0x, eu acho essa mobilização maravilhosa. O Stroustrup demonstra saber bem como o mercado funciona, e sabe que a linguagem deve evoluir para responder aos anseios de seus usuários. Duas coisas que eu gostaria muito de ver como recursos nativos (nada de Boost) do C++: melhor suporte a metadados e lambda.
Charles | em 30/04/2008 | #
Entrevista recente com o Bjarne: http://msdn.microsoft.com/pt-br/magazine/cc500572.aspx
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
  ::::