logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog


Onde está o STL.NET?

Uma das maiores promessas do Visual C++ 2005 era a STL.NET, uma adapatação da STL para ser usada com tipos managed. Isso faria com que nós, programadores C++, continuassemos usando a STL mesmo programando em .NET - mesmo porque, comparado com a STL, os containers e algoritmos do .NET Framework parecem brincadeira de criança. O próprio Stan Lippman escreveu um artigo em 2004 falando da STL.NET. Ela possibilitaria que você escrevesse - em .NET, 100% managed e safe - um código assim:

ref class ProgrammingLanguage
{
  bool _hasMultipleInheritance;
  bool _isStandard;
  bool _hasBoost; //apelei... :-)
  String^ _name;
public:
  ProgrammingLanguage(String^ name, bool hasMultipleInheritance, bool isStandard, bool hasBoost):
    _name(name),
    _hasMultipleInheritance(hasMultipleInheritance),
    _isStandard(isStandard),
    _hasBoost(hasBoost)
    {}

    property String^ Name
    {
      String^ get()
      { return _name; } 
    }

    ref class IsBestLanguage
    {
    public:
      bool operator()(const ProgrammingLanguage^ language)
      {
        return language->_hasMultipleInheritance &&
             language->_isStandard &&
           language->_hasBoost;
      }
  };
};

int main(array<System::String ^> ^args)
{
  vector<ProgrammingLanguage^>^ Languages = gcnew vector<ProgrammingLanguage^>();
  vector<ProgrammingLanguage^>::iterator iBestLanguage;

  ProgrammingLanguage ^CSharp, ^CPlusPlus, ^VB, ^Java;

  CSharp = gcnew ProgrammingLanguage("C#", false, true, false);
  CPlusPlus = gcnew ProgrammingLanguage("C++", true, true, true);
  VB = gcnew ProgrammingLanguage("Visual Basic / Visual Fred", false, false, false);
  Java = gcnew ProgrammingLanguage("Java", false, false, false);

  Languages.push_back(CSharp);
  Languages.push_back(CPlusPlus);
  Languages.push_back(VB);
  Languages.push_back(Java);

  iBestLanguage = find(Languages->begin(), 
                       Languages->end(), 
                       gcnew ProgrammingLanguage::IsBestLanguage());

  if(iBestLanguage != Languages->end())
    Console::WriteLine("A melhor linguagem de programação é: " + *iBestLanguage);

   return 0;
}

Pois é, mas por algum problema a STL.NET não saiu junto com o Visual Studio 2005. Eu procurei em todos os headers do VC8 e não achei nada. Quando eu cansei de fuçar, resolvi perguntar no fórum de Visual C++ da Microsoft gringa. E a resposa não foi bem o que eu esperava... A STL.NET vai ser disponibilizada como download, futuramente. Só espero que eles tenham atrasado a STL.NET por causa das várias novidades que eles lançaram na parte unmanaged - que é o que interessa do final das contas.

(Quanto à brincadeira sobre a melhor linguagem de programação, não fique bravo, eu não sou o único que fala besteira)


Em 28/11/2005 00:57, por Rodrigo Strauss


  
 
 
Comentários
Charles | em 29/11/2005 | #
Puxa vida! Agora que eu estou estudando C++ feito louco, estão dizendo que vai morrer...
Rodrigo Strauss | website | em 29/11/2005 | #
E você vai acreditar num bando de gente que não sabe o que fala?
Hugo | em 07/12/2005 | #
Essa é velha mas sempre vale apena postar quando ouço alguém falar sobre a morte do C ou C++.

In 2005, I say Ruby will replace C++.
In 2000, MS said C# will replace C++.
In 1995, Sun said Java will replace C++.
In 1990, MS said VB will replace C++.
In 1985, NeXT said Objective C will replace C.
In 1980, PARC said Smalltalk will replace C.

So, it looks like it's unanimous. C++ will be replaced!
Rodrigo Strauss | website | em 07/12/2005 | #
Muito boa!
Maicon Carlos | em 13/12/2005 | #
Heheheh......Gostei de ter colocado o link sobre a morte do c++. Perdoe senhor, eles não sabem oque dizem!

Abraços
Guto | em 29/09/2009 | #
Strauss, sei que faz muito tempo que vc postou isto, mas segue o que consegui.

Outro dia me deparei com o STL/CLI (namespace cliext), que seria este STL.NET. O resultado foi muito mais lento que utilizar as próprias coleções do .NET (cerca de 2 vezes mais lento).

O que ficou mais rápido (levando cerca de metade do tempo) foi implementar em C++ com STL nativo armazenando objetos gerenciados (gcroot<type ^>), mas ai deixou de ser gerenciado.

Já que tinha deixado de ser gerenciado, resolvi implementar um port completo em C++, com o boost::shared_ptr para fazer as vezes de garbage collector, e o resultado final levou menos de 1/10 do tempo inicial.

Boa Sorte se precisar do STL.NET.
rebarba rebarba
  ::::