logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog


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 | 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
rebarba rebarba
  ::::