Pesquisando novas tecnologias para o desenvolvimento Web, eu reencontrei o Script# (http://projects.nikhilk.net/ScriptSharp). E como a curiosidade foi grande, resolvi dar uma "brincada" com o projeto. O Script# e basicamente um compilador para codigo em C#, algo proximo da especificacao do C# 2.0. Entao ao inves de gerar bytecode CIL, gera Javascript. E tenho que falar, gostei da maneira como funciona.Irei postar mais informacoes e um exemplo em breve. Como parte do meu projeto do mestrado, eu tenho que escolher uma game engine para o desenvolvimento de um prototipo de um framework adaptavel de um jogo. Depois de feita algumas analises, eu optei por trabalhar com a OGRE3D, uma excelente engine de renderizacao 3D, escrita em C++, e completar o resto das funcionalidades com outras bibliotecas.O projeto e escrito em C# 4, visando o MS .NET Runtime e o Projeto Mono como maquina virtual, e como a biblioteca OGRE3D e escrita em C++, as funcionalidades nao podem ser acessadas diretamente, sendo necessaria a utilizacao de um wrapper para a interoperabilidade. Assim sendo, existem duas escolhas a disposicao para dar acesso a tais bibliotecas:MOGRE - Um wrapper feito em Mixed Managed C++, com excelente desempenho, e;OGRE.NET - Outro wrapper, que realiza as chamadas atraves de P/INVOKE, sendo gerado atraves do SWIG.Acontece que a MOGRE, apesar de ser uma otima biblioteca, somente prove suporte para o sistema operacional Windows, justamente por ter sido escrita utilizando codigo misto. Assemblies em Mixed Managed C++ sao basicamente uma mistura de codigo nativo em C/C++ (x86 ou x86-64) com codigo gerenciavel (managed code ou CIL). Como o codigo nativo e especifico da plataforma que foi compilado, o Mono nao consegue executa-lo, pois chamadas a funcoes do Windows estao presentes somente no Windows (bom isso e uma das limitacoes).Uma alternativa seria utilizar compilacao condicional, assim como e feito em C++ para portar uma biblioteca para diversas plataformas (a OGRE faz isso!). Ainda, assim, seria necessario que o GCC emitisse CIL e que gerasse um assembly em Mixed Code que fosse suportado pelo Mono, o que nao e possivel no momento.O projeto requer que este o seja portavel entre varias plataformas, afinal existem varias universidades, cada uma com sua escolha de sistema operacional (Windows, Linux, MacOSX). Sendo assim, a MOGRE passa a ser uma escolha limitada. Desse forma, resta analisar a biblioteca OGRE.NET. Por sua vez, a OGRE.NET e um projeto que aparenta estar morto. A ultima biblioteca criada somente da suporte a versao 1.4 da OGRE, que ja se encontra na versao 1.7.2. Sendo assim, nao e interessante utiliza-la.Se ambas propostas nao sao aceitaveis ao projeto, so resta criar uma alternativa, criar uma nova biblioteca que faca o trabalho. Tal biblioteca deve ser baseada em P/INVOKE que nada mais e do que um modo de se acessar bibliotecas dinamicas (.dll, .so, .dylib etc) presentes no sistema operacional, atraves de chamadas a metodos estaticos externos.Criar tal wrapper para uma biblioteca como a OGRE e um trabalho extremamente penoso (e como e!!), pois toda a funcionalidade dessa deve ser exposta como chamadas de funcao em C, imagine entao portar todos os metodos