Такой надёжный STL.
От: Alexey Chen Чили  
Дата: 15.05.06 12:47
Оценка: 3 (1) :))
Нет, я не ругаюсь, уже слов нет.
Сегодня один из девелоперов полдня потратил на боиск баги. И вроде всё правильно и с хипом по уму работает. а нет...

Оцените 'юмор' ситуации и если не боитесь поседеть можете заглянуть в сырки STL'я, горячо любимого всеми нами на текщий момент самого модного 2005'ого VS'а.

#include <memory>

int main()
  {
    int *p = new int;
    *p = 0x123456;

    // what's the %@$?
    std::auto_ptr<int> x = p;

    printf("%08x,%08x\n",*p,x.get());
    return 0;
  }
Re: Такой надёжный STL.
От: Vamp Россия  
Дата: 15.05.06 12:51
Оценка:
А в чем собственно дело? У меня VS2005 нет, вот и спрашиваю.
Да здравствует мыло душистое и веревка пушистая.
Re: Такой надёжный STL.
От: Left2 Украина  
Дата: 15.05.06 12:52
Оценка:

А в чём юмор-то? В том что цифры не совпадут? Так вроде и не должны...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Такой надёжный STL.
От: Bell Россия  
Дата: 15.05.06 12:56
Оценка:
Здравствуйте, Alexey Chen, Вы писали:

AC>Нет, я не ругаюсь, уже слов нет.

AC>Сегодня один из девелоперов полдня потратил на боиск баги. И вроде всё правильно и с хипом по уму работает. а нет...
То, что он по уму работает с хипом — это, конечно, здорово

AC>Оцените 'юмор' ситуации и если не боитесь поседеть можете заглянуть в сырки STL'я, горячо любимого всеми нами на текщий момент самого модного 2005'ого VS'а.


AC>
AC>#include <memory>

AC>int main()
AC>  {
AC>    int *p = new int;
AC>    *p = 0x123456;

AC>    // what's the %@$?
AC>    std::auto_ptr<int> x = p;

AC>    printf("%08x,%08x\n",*p,x.get());
AC>    return 0;
AC>  }
AC>


А код привести так сложно? Или каждый просто обязан иметь VS2005?

ЗЫ
К вопросу о прямой инициализации и инициализации копированием:
Comeau:
"ComeauTest.c", line 9: error: no suitable constructor exists to convert from
          "int *" to "std::auto_ptr<int>"
      std::auto_ptr<int> x = p;
                             ^

"ComeauTest.c", line 11: warning: argument is incompatible with corresponding
          format string conversion
      printf("%08x,%08x\n",*p,x.get());
Любите книгу — источник знаний (с) М.Горький
Re: Такой надёжный STL.
От: korzhik Россия  
Дата: 15.05.06 12:58
Оценка: :)
Здравствуйте, Alexey Chen, Вы писали:

AC>Нет, я не ругаюсь, уже слов нет.

AC>Сегодня один из девелоперов полдня потратил на боиск баги. И вроде всё правильно и с хипом по уму работает. а нет...

AC>Оцените 'юмор' ситуации и если не боитесь поседеть можете заглянуть в сырки STL'я, горячо любимого всеми нами на текщий момент самого модного 2005'ого VS'а.


AC>
AC>#include <memory>

AC>int main()
AC>  {
AC>    int *p = new int;
AC>    *p = 0x123456;

AC>    // what's the %@$?
AC>    std::auto_ptr<int> x = p; // хорошая дыра, но программист должен знать что так делать нельзя

AC>    //printf("%08x,%08x\n",*p,x.get());
       // надо так наверно ?
       printf("%08x,%08x\n",*p, *x.get());
AC>    return 0;
AC>  }
AC>
Re: Такой надёжный STL.
От: DigitalGuru Россия http://svetlyak.ru
Дата: 15.05.06 13:03
Оценка: +1
Здравствуйте, Alexey Chen, Вы писали:

AC>
AC>#include <memory>

AC>int main()
AC>  {
AC>    int *p = new int;
AC>    *p = 0x123456;

AC>    // what's the %@$?
AC>    std::auto_ptr<int> x = p; // уже здесь ошибка

AC>    printf("%08x,%08x\n",*p,*x.get());
AC>    return 0;
AC>  }
AC>


Начнем с того, что gcc это вообще не компилирует:
stl_test.cpp:9: error: conversion from `int*' to non-scalar type `std::auto_ptr<int>' requested

Ибо нету у auto_ptr такого оператора, как
template<class U> 
auto_ptr& operator= (U*) throw();


А есть только:
auto_ptr& operator= (auto_ptr&) throw();
template<class U> 
auto_ptr& operator= (auto_ptr<U>&) throw();


Правильнее переписать проблемную строку, как:
std::auto_ptr<int> x( p );


Во-вторых, auto_ptr::get возвращает указатель.
Re[2]: Такой надёжный STL.
От: Alexey Chen Чили  
Дата: 15.05.06 13:18
Оценка:
Здравствуйте, Bell, Вы писали:

AC>>Оцените 'юмор' ситуации и если не боитесь поседеть можете заглянуть в сырки STL'я, горячо любимого всеми нами на текщий момент самого модного 2005'ого VS'а.


AC>>
AC>>    *p = 0x123456
AC>>    std::auto_ptr<int> x = p;
AC>>    printf("%08x,%08x\n",*p,x.get());
AC>>

Собстно что на экране:

C:\Projects>test
00000000,00123456

Явно не то что должно быть.

B>А код привести так сложно? Или каждый просто обязан иметь VS2005?

Все мы там будем ;(

VS2005 include/memory
template<class _Ty>
    struct auto_ptr_ref
        {   // proxy reference for auto_ptr copying
    auto_ptr_ref(void *_Right)
        : _Ref(_Right)
        {   // construct from generic pointer to auto_ptr ptr
        }

    void *_Ref; // generic pointer to auto_ptr ptr
    };

//...

template<class _Ty>
    class auto_ptr
        {   // wrap an object pointer to ensure destruction
//...
    auto_ptr(auto_ptr_ref<_Ty> _Right) _THROW0()
        {   // construct by assuming pointer from _Right auto_ptr_ref
        _Ty **_Pptr = (_Ty **)_Right._Ref;
        _Ty *_Ptr = *_Pptr;
        *_Pptr = 0; // release old
        _Myptr = _Ptr;  // reset this
        }


Конструктор от указателя, естестно эксплсит.

B>К вопросу о прямой инициализации и инициализации копированием:

B>
B>Comeau:
B>"ComeauTest.c", line 9: error: no suitable constructor exists to convert from
B>          "int *" to "std::auto_ptr<int>"
B>      std::auto_ptr<int> x = p;
B>

Хм, дык. Это на тему того что берём индустриальный компилер + STL и лёгким движением руки пишем надёжный код.
Был тут как-то подобный топик.
Что-то сдаётся мне некоторые лисепеды понадёжнее будут.
Re[2]: Такой надёжный STL.
От: Alexey Chen Чили  
Дата: 15.05.06 13:25
Оценка:
DigitalGuru wrote:
> Начнем с того, что gcc это вообще не компилирует:
И VS2003 не компилит, и VS6.... и много кто. А вот флагман компилеростроения, компилит
> Правильнее переписать проблемную строку, как:
>
> std::auto_ptr<int> x( p );
>

Ну да, только для этого её сначала найти нужно. Задачка тоже себе не чтобы уж фатальная,
но и не тривиальная. Особенно если исходить из тезиса, что STL не содержит ошибок ))
Posted via RSDN NNTP Server 2.0
Re[2]: Такой надёжный STL.
От: Alexey Chen Чили  
Дата: 15.05.06 13:33
Оценка: +2
Здравствуйте, korzhik, Вы писали:


AC>>Оцените 'юмор' ситуации и если не боитесь поседеть можете заглянуть в сырки STL'я, горячо любимого всеми нами на текщий момент самого модного 2005'ого VS'а.


AC>>
AC>>    std::auto_ptr<int> x = p; // хорошая дыра, но программист должен знать что так делать нельзя
AC>>


Угу, а ещё он дофига чего должен помнить. А почему собстно? Нормальная себе так очепятка.

И мы же вроде как на компилер скидываем отвественность за выявление того что нельзя? Или нет?
Иначе, ИМХО, нафиг оно такое нужно.
Re[3]: Такой надёжный STL.
От: -MyXa- Россия  
Дата: 15.05.06 13:35
Оценка:
Здравствуйте, Alexey Chen, Вы писали:

AC>И VS2003 не компилит, и VS6.... и много кто. А вот флагман компилеростроения, компилит


Не ругайте компилятор.
/Za Вам поможет.
Если не поможет, будем действовать током... 600 Вольт (C)
Re: Такой надёжный STL.
От: saproj  
Дата: 15.05.06 13:38
Оценка:
Здравствуйте, Alexey Chen, Вы писали:

AC>
AC>    int *p = new int;
AC>    *p = 0x123456;

AC>    // what's the %@$?
AC>    std::auto_ptr<int> x = p;
AC>


Баян?
http://rsdn.ru/Forum/Message.aspx?mid=1695037&amp;only=1
Автор: VNG
Дата: 22.02.06
Re[3]: Такой надёжный STL.
От: korzhik Россия  
Дата: 15.05.06 13:39
Оценка: +1
Здравствуйте, Alexey Chen, Вы писали:

AC>Здравствуйте, korzhik, Вы писали:



AC>>>Оцените 'юмор' ситуации и если не боитесь поседеть можете заглянуть в сырки STL'я, горячо любимого всеми нами на текщий момент самого модного 2005'ого VS'а.


AC>>>
AC>>>    std::auto_ptr<int> x = p; // хорошая дыра, но программист должен знать что так делать нельзя
AC>>>


AC>Угу, а ещё он дофига чего должен помнить. А почему собстно? Нормальная себе так очепятка.


Согласен.

AC>И мы же вроде как на компилер скидываем отвественность за выявление того что нельзя? Или нет?

AC>Иначе, ИМХО, нафиг оно такое нужно.

В принципе мне твоя позиция уже давно понятна и ясна и в чём то я её разделяю:
нужна эталонная, тщательно оттестированная STL реализация, поставляемая со всеми компиляторами, но так как это невозможно,
то надо очень скептически относится к конкретным реализациям STL, так как их делали люди значит возможны ошибки.
Re[2]: Такой надёжный STL.
От: Alexey Chen Чили  
Дата: 15.05.06 14:03
Оценка:
saproj wrote:
> Баян?
> http://rsdn.ru/Forum/Message.aspx?mid=1695037&amp;only=1
Автор: VNG
Дата: 22.02.06

И да и нет. Я не сколько о баге, сколько о проблеме доверия к 'стандартным' либам.

Тут как бы ещё одна дилема возникает.
Что теперь делать? Ничего, и ждать пока ещё кто-нить на это наткнётся (девелоперы очень
разного уровня, да и очипятаться легко можно), или сразу по завершению установки студии
запускать скрипт с патчами? Последнее, ИМХО, нарушает лиценцию MS'а.
Posted via RSDN NNTP Server 2.0
Re[4]: Такой надёжный STL.
От: Владик Россия  
Дата: 15.05.06 14:04
Оценка:
Здравствуйте, korzhik, Вы писали:

K>то надо очень скептически относится к конкретным реализациям STL, так как их делали люди значит возможны ошибки.


Конкретно реализацию auto_ptr в VS2005 делали не люди, в смысле не программисты на С++ Когда я "это" увидел — переписал не колеблясь (хотя всегда с трепетом относился к неприкосновенности исходников, идущих в стандартной поставке).
Как все запущенно...
Re[3]: Такой надёжный STL.
От: Lorenzo_LAMAS  
Дата: 15.05.06 14:08
Оценка:
Здравствуйте, Alexey Chen, Вы писали:

AC>saproj wrote:

>> Баян?
>> http://rsdn.ru/Forum/Message.aspx?mid=1695037&amp;only=1
Автор: VNG
Дата: 22.02.06

AC>И да и нет. Я не сколько о баге, сколько о проблеме доверия к 'стандартным' либам.

AC>Тут как бы ещё одна дилема возникает.

AC>Что теперь делать? Ничего, и ждать пока ещё кто-нить на это наткнётся (девелоперы очень
AC>разного уровня, да и очипятаться легко можно), или сразу по завершению установки студии
AC>запускать скрипт с патчами? Последнее, ИМХО, нарушает лиценцию MS'а.

А может СТЛ порт использовать ? (я не в курсе, можно ли его использовать с VS 8)
Of course, the code must be complete enough to compile and link.
Re[5]: Такой надёжный STL.
От: korzhik Россия  
Дата: 15.05.06 14:08
Оценка:
Здравствуйте, Владик, Вы писали:

В>Здравствуйте, korzhik, Вы писали:


K>>то надо очень скептически относится к конкретным реализациям STL, так как их делали люди значит возможны ошибки.


В>Конкретно реализацию auto_ptr в VS2005 делали не люди, в смысле не программисты на С++ Когда я "это" увидел — переписал не колеблясь (хотя всегда с трепетом относился к неприкосновенности исходников, идущих в стандартной поставке).


а у Microsoft (или Dinkumware) по жизни проблемы с auto_ptr. В VC6.0 у auto_ptr не было метода reset, и не один SP не исправил этой проблемы...
Re[3]: Такой надёжный STL.
От: LaptevVV Россия  
Дата: 15.05.06 14:20
Оценка: :)
Здравствуйте, Alexey Chen, Вы писали:

AC>Здравствуйте, Bell, Вы писали:


AC>>>Оцените 'юмор' ситуации и если не боитесь поседеть можете заглянуть в сырки STL'я, горячо любимого всеми нами на текщий момент самого модного 2005'ого VS'а.


AC>>>
AC>>>    *p = 0x123456
AC>>>    std::auto_ptr<int> x = p;
AC>>>    printf("%08x,%08x\n",*p,x.get());
AC>>>

AC>Собстно что на экране:

AC>C:\Projects>test

AC>00000000,00123456

AC>Явно не то что должно быть.

Это почему это?
Вроде по идеологии — самое то: автоптр вступил во владение — отхаппибездил прежнего владельца...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[6]: Такой надёжный STL.
От: Владик Россия  
Дата: 15.05.06 14:20
Оценка: +1
Здравствуйте, korzhik, Вы писали:

K>а у Microsoft (или Dinkumware) по жизни проблемы с auto_ptr. В VC6.0 у auto_ptr не было метода reset, и не один SP не исправил этой проблемы...


В VC6 с STL совсем все было плохо и я решил проблему кардинально — использовал STLPort.
Как все запущенно...
Re[3]: Такой надёжный STL.
От: Bell Россия  
Дата: 15.05.06 14:45
Оценка: 8 (3)
Здравствуйте, Alexey Chen, Вы писали:

AC>Хм, дык. Это на тему того что берём индустриальный компилер + STL и лёгким движением руки пишем надёжный код.

AC>Был тут как-то подобный топик.

Тут, конечно сложно что-то возразить — баг есть баг.
Возможно, тебя немного успокоит вот это: здесь Типа люди стараются

AC>Что-то сдаётся мне некоторые лисепеды понадёжнее будут.

Мое ИМХО: ключевое слово тут — некоторые
Любите книгу — источник знаний (с) М.Горький
Re[4]: Такой надёжный STL.
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 15.05.06 14:57
Оценка:
Здравствуйте, Bell, Вы писали:

B>Возможно, тебя немного успокоит вот это: здесь Типа люди стараются


Спасибо за ссылку.
Товарищ Alexei во втором комментарии довольно жестко (но по делу) ответил Microsoft'овцам, браво
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.