*TL - за и против?

Тема в разделе "LANGS.C", создана пользователем Voodoo, 14 фев 2008.

  1. fret

    fret New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2008
    Сообщения:
    24
    Особенно велика будет эта разница если бинарников сотни и тысячи, например в ОC.

    И наконец: если кто-то считает что он умнее разработчиков win, linux, bsd и других популярных ос, то я хочу спросить - если ты такой умный, то почему еще не всемирно известный?
     
  2. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    А можно пример?
     
  3. Joes

    Joes New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    98
    STL не дает столько overhead, не надо. В большинстве случаев STL'ный код инлайнится, т.е. в бинарник попадает только то, что реально в нем юзается. Т.е. нет гигантского рантайма, который надо таскать вместе с собой. В отличие от Сишной библиотеки, если к ней динамически линковаться.
    Правка: в С++ приложениях Сишная библиотека всегда линкуется. Я к тому, что оно все равно к Сишной либе линкуется, пофиг - юзается там STL или нет. Оверхеда на рантайм либу нет.

    Чего ж спорить? Так и будет. Всегда можно написать более оптимальную версию алгоритма/функции. Просто на это надо потратить больше времени.

    И что? Таскать с прогой нужную версию CRT, а не статически компилить, что включит конкретные используемые функции из CRT либы? А с 2005 студией и выше, с их попыткой спасти мир от DLLHell (манифесты), так вообще все очень весело стало. Или ставить vcredist для конкретной версии либ или компилить статикой или таскать либы с прогой. Так что не надо насчет единственного экземпляра.

    С темы не съезжай - идет речь о конкретном использовании конкретных функций. Твой вариант предполагает использовать qsort() который заведомо медленнее. Причем тут сортировка данных которые превышают размеры памяти? Еще раз - STL предоставляет инструмент, который эффективен в своей нише и требует минимального вложения времени и труда программиста. Для большинства кода его достаточно. Критические участки кода дорабатываются напильником отдельно.

    Чем тебя смущают инлайн функции или развернутые циклы? Пофиг - линкуйся к чему угодно, STL не так работает. У него рантайма своего нет, оно уже все в Си рантайм давно.

    А.. Что ж, с тобой все ясно. Смысл продолжать дискуссию не вижу. Тебе нужен чиста риальный авторитет, что бы он своим авторитетом тебя задавил. Удачи.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Rainbow tables
    ключевая фраз из моей цитаты "к примеру".
    знаем, знаем. Но сами функции могут содержать "лишний" для конкретного случая код, да и инлайн дает прирост к скорости но никак не к размеру. если во многих местах юзаются инлайн вставки то размер кода может намного увеличится.
    да ну?
    это да, даже без rtl'a спокойно работает stl.
     
  5. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    Если "Сишная библиотека" это CRT, то, AFAIK по умолчанию оно к С++-проекту линкуется, и оно там вроде даже нужнО.

    Разве? STL требует RTL, еще как.
    Например
    Код (Text):
    1. #include <list>
    2.  
    3. void main()
    4. {
    5.     std::list<int> s;
    6.  
    7.     for(int i = 0; i<10; i++)
    8.         s.push_front(i);
    9. }
    при линковке с /nodefaultlib сообщает, что
    Код (Text):
    1. main.obj : error LNK2019: unresolved external symbol _memmove referenced in function "public: static char * __cdecl std::char_traits<char>::move(char *,char const *,unsigned int)" (?move@?$char_traits@D@std@@SAPADPADPBDI@Z)
    2. main.obj : error LNK2019: unresolved external symbol "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) referenced in function "public: void __thiscall std::allocator<char>::deallocate(char *,unsigned int)" (?deallocate@?$allocator@D@std@@QAEXPADI@Z)
    3. main.obj : error LNK2019: unresolved external symbol "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) referenced in function "struct std::_List_nod<int,class std::allocator<int> >::_Node * __cdecl std::_Allocate<struct std::_List_nod<int,class std::allocator<int> >::_Node>(unsigned int,struct std::_List_nod<int,class std::allocator<int> >::_Node *)" (??$_Allocate@U_Node@?$_List_nod@HV?$allocator@H@std@@@std@@@std@@YAPAU_Node@?$_List_nod@HV?$allocator@H@std@@@0@IPAU120@@Z)
    4. main.obj : error LNK2019: unresolved external symbol ___CxxFrameHandler referenced in function __ehhandler$?_Buynode@?$list@HV?$allocator@H@std@@@std@@IAEPAU_Node@?$_List_nod@HV?$allocator@H@std@@@2@XZ
    5. main.obj : error LNK2019: unresolved external symbol __except_list referenced in function "protected: struct std::_List_nod<int,class std::allocator<int> >::_Node * __thiscall std::list<int,class std::allocator<int> >::_Buynode(void)" (?_Buynode@?$list@HV?$allocator@H@std@@@std@@IAEPAU_Node@?$_List_nod@HV?$allocator@H@std@@@2@XZ)
    6. main.obj : error LNK2019: unresolved external symbol __CxxThrowException@8 referenced in function $L6639
    7. main.obj : error LNK2019: unresolved external symbol "public: void __thiscall std::_String_base::_Xran(void)const " (?_Xran@_String_base@std@@QBEXXZ) referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::erase(unsigned int,unsigned int)" (?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z)
    8. main.obj : error LNK2019: unresolved external symbol "public: void __thiscall std::_String_base::_Xlen(void)const " (?_Xlen@_String_base@std@@QBEXXZ) referenced in function "protected: bool __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Grow(unsigned int,bool)" (?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_NI_N@Z)
    9. main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall exception::~exception(void)" (??1exception@@UAE@XZ) referenced in function "public: virtual __thiscall std::logic_error::~logic_error(void)" (??1logic_error@std@@UAE@XZ)
    10. main.obj : error LNK2019: unresolved external symbol "public: __thiscall exception::exception(void)" (??0exception@@QAE@XZ) referenced in function "public: __thiscall std::logic_error::logic_error(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0logic_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z)
    11. main.obj : error LNK2001: unresolved external symbol "public: __thiscall exception::exception(class exception const &)" (??0exception@@QAE@ABV0@@Z)
    12. main.obj : error LNK2001: unresolved external symbol "const type_info::`vftable'" (??_7type_info@@6B@)
     
  6. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    Да, кстати, с thread safety у STL не так хорошо, как хотелось бы. Понятно дело, что решается это несложно, но тем не менее...
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    немного не так выразился, при добавлении 40 строк кода в проект, stl не требует rtl.
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    при добавлении 40 строк кода, эти ошбки исчезают %)
     
  9. fret

    fret New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2008
    Сообщения:
    24
    Зачем же таскать? Про компиляцию с использованием win библиотеки ты не знал, или просто "забыл" чтобы склонить дискуссию в свою сторону?

    Это еще фиг знает что медленее.

    Пример задачи где твой STL не поможет и сортировку придется делать руками.

    Мне нужно чтобы кое-кто не бросался заявлениями что он самый умный, а авторы популярных ОС все сплошь дураки потому что не используют STL. Или ты считаешь что допустимо выставлять себя умнее этих людей не приводя тому реальных доказательств?
     
  10. CreatorCray

    CreatorCray Member

    Публикаций:
    0
    Регистрация:
    5 авг 2006
    Сообщения:
    201
    Программист проходит через три стадии:
    1) Не знает что такое STL
    2) Всегда и везде использует STL
    3) Использует STL только там, где это реально нужно

    Всё остальное - от лукавого...
    STL - просто библиотека, со своими плюсами и минусами.
    Еще раз, чтоб вы оба поняли: это всего лишь библиотека
     
  11. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    [offtop]
    Microsoft превращаеся в Macrosoft. Следущий этап - Gigasoft.
    [/offtop]
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    fret
    Ну, MS почему-то продвигают ?MDF. А там не си. Заботятся о детях?
     
  13. fret

    fret New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2008
    Сообщения:
    24
    Microsoft многое продвигает, но слава богу в важнейших частях ОС, таких как ядро, драйвера и системные библиотеки пока что используется чистое процедурное программирование без всяких приблуд. Правда в Linux всеравно ядро сделано лучше.
     
  14. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    n0name

    А мои проги универсальны только в компайл-тайме. Развертка и инлайн всех шаблонов дает минимальное конкретизированное бинарное решение. Никакого оверхеда, все замечательно.


    Voodoo

    А STL вообще не тредсейфный. :derisive:
     
  15. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    Это свой list имеется ввиду?

    Я так понял, речь шла несколько о другом - предполагается, что код, полученный разверткой шаблонов, не совсем идеален для каждого конкретного набора параметров шаблона. Т.е. если этот код переписать под конкретный случай, с учетом типов данных, скажем, можно добиться увеличения производительности.
    ИМХО, компиляторы сейчас достаточно умны, чтобы подобное проявлялось достаточно редко.
     
  16. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Voodoo

    Вот именно. Компиляторы достаточно умны, и с каждым годом становятся все умнее. Гораздо приятнее просто пересобрать прогу на новом компиллере, чем ежедневно занимать ся рефакторингом.
     
  17. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    [offtopic]
    Только почему-то люди на этом "не языке" выигрывают соревнования по программированию. Так же, как и на C#, и на паскале, и на C/C++ (а вот на VB.NET и python пока прецедентов не было ;) ). Так что все эти языки в более-менее одинаковой мере позволяют выражать алгоритмы. А при разработке бизнес-приложений, от С/C++ вообще отказываются. Не зря коммерческий TopCoder поддерживает C++ в алгоритмических соревнованиях с самого основания, а в Development и Design соревнованиях его не поддерживает до сих пор, и не собирается поддерживать. [/offtopic]

    Отсутствие шаблонов в java лишь замедляет скорость java приложений (из-за необходимости работать с универсальным object), но никак не влияет на скорость и удобство разработки.
    Аналогия здесь не уместна. Скорость дэка можно сделать нормальной, но авторы библиотек обычно леняться.
    Лично я ничего против размера .exe не имею.
    PS Компиляторы хоть и умны, но не могут выполнить неравносильные оптимизации...
     
  18. AssemblerIA64

    AssemblerIA64 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2007
    Сообщения:
    160
    Считаю, что любую задачу надо пытаться решить красиво.

    А вообще, станут ли где использовать винды со всякими *TL, дотнетами и прочей ересью, например, в SCADA-системах? Пусть попробуют - поезд застрянет в тоннеле.

    Тема называется "*TL - за и против?", так вот, я говорю: "Против".
     
  19. Demon666

    Demon666 New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    99
    +1 тоже протефф(без кавычек)

    [offtop]
    NET специально был сделан для секретаршъ и точка(подумайте самЕ это рай для распространения заразы и присвоения чужых исходников не имея их)
    Если дотнет победит, я лично буду распространять засранчиков(ring0) (бу-го-га, плакать будут AV %)))
    Вешаццо будите..!
    [/offtop]

    P. S.
    Товарисчи не унижайте так сильно дзен, его и так совсем не осталось...
    ЗЫ: ИМХО
     
  20. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    offtop_begin:
    Demon666
    лучше ехайте в Редмонт, ну или где там исчадие ада M$ обитаед, и взорвите иё.
    о, а также взорвите всех тех кто уже йузаед дотнед :)
    /*с опаской*/ а ява-прогеров вы тоже ненавидите, да?:)
    offtop_end;

    да, а M$ была создана для порабощения мира.

    я вот не пойму, как связана STL и .NET?:) вроде бы говорили по STL, а уже до .NET, ринг0 и прочего добрались:)