|
Я тестировал компиляторы (выбирал для себя):
железо: P-IV 1600 ABit SG-71 (sis640/sis930)
1: совместимость с ISO/C++
2: скорость вычислений x86,release относительно gcc
3: cкорость вейвлет-анализа (c++, P-4 sse2, sheduling) относительно (2)
4: debug и release дают один результат (у некоторых результат вычислений отличается)
5: memory padding @ debug (удобно при отладке)
какой цифры нет - то не проверял
6: библиотеки/RAD
gcc
1: полная
4: да
6: море
Microsoft Visual C++ 6.0
2: 1x
3: 1.1x
4: да
6: ATL, STL, MFC
Intel C++ Compiler 6.0
2: 1.5x
3: 2x
4: нет
6: то же, что msvc6
Borland C++ 5.02
1: сильно урезанная (не работают шаблоны, STL)
2: 1x
3: не умеет
6: OWL, STL(?), OCF, MFC, QT(просите в throlltech)
Borland C++ Builder 4
1: урезанная (не работает string, кривая STL, не совпадает со стандартом)
2: 1x
3: 1.1x
4: нет
5: нет
6: OWL, STL(?), OCF, MFC, VCL
Borland C++ Builder 6
1: урезанная (кривая STL, не по стандарту, но лучше, чем bcb4)
2: 1x
3: 1.1x
4: нет
5: нет
6: OWL, STL(?), OCF, MFC, VCL, CLX, ATL
Metrowerks CodeWarrior 8.0
1: полная
2: 1.5x !!!
3: 2x
4: да
5: да
6: STL, MFC, ATL
я выбрал последний из соображений совместимости с C++ и высокой производительности кода. Для быстрого клепания приложений лучше брать вообще пасаль и delphi, т.к. отношение bcb4 и bcb6 к C++ я последнее время ставлю под сомнение. Если принципиально использование C++ и требуется какой-никакой RAD - лучше msvc. Если хватит и C, то bcb4 или 6 - как нельзя лучше.
Как альтернативу MFC можно предложить QT. Приложения с ней перенасимы на linux, она имеет мощный радовский редактор, поддерживает все современные технологии программирования, приятна в обращении. Под линукс - бесплатна.
Ещё я рылся в исходниках MFC, OWL и VCL с целью определиться библиотекой. Вывод такой:
В среднем VCL/OWL производительней MFC (из-за способа хранения this<->HWND). Памяти жрут что та, что другая - немеренно (я бы сделал скромнее). MFC и OWL прозрачней для языка C++ (VCL для паскаля) Но с VCL клепать приложения быстрее. Если к OWL приделать нормальный радовский интерфейс либо переписать VCL на C++ и сделать Borland C++ Builder с полной поддержной C++, я бы выбрал его без сомнений.
Что касается API - MFC и VCL/OWL равноценны. Если вы считаете, что можно или лучше что-то сделать минуя API - вы заблуждаетесь. Во-первых ОС вам этого не даст, а во-вторых - съэкономите код.
Что касается __fastcall - а вы не заметили, что после этого обычто всё содержимое регистров пихается в стек? а какая тогда разница __fastcall vs __stdcall (по производительности)?
|