logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

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 | e-mail | 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.
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
  ::::