фреймворки на C++
От: lpd Черногория  
Дата: 03.09.15 20:23
Оценка: :)))
Соседний топик "java vs. c++" навевает вопрос причин отсутствия фреймворков для разработки корпоративных приложений(вроде Spring, Struts) и серверов приложений на C++.
Представляются возможными такие причины:
1) В Java по-умолчанию предоставляются стандартные переносимые функции вроде управления потоками.
Все эти функции доступны без дополнительной настройки и линковки, что полезно для больших проектов,
в которых не удобно для каждого развертывания линковать 5-10 библиотек вроде pthread, boost и пр.
2) У JVM есть преимущество безопасности при исполнении кода, т.к. VM контролирует доступ при каждом обращении
приложения к памяти. По-моему, это единственное существенное преимущество JVM перед компилируемым кодом. Впрочем, безопасность выполнения кода можно обеспечить на C++ средствами ОС (виртуальная память, процессы).
3) Java лучше интегрирован с браузерами.
При различиях в производительности приложений на C++ и Java удивляет, что на C++ до сих пор нет заметных
фреймворков.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Отредактировано 04.09.2015 16:07 lpd . Предыдущая версия . Еще …
Отредактировано 03.09.2015 20:28 lpd . Предыдущая версия .
Re: фреймворки на C++
От: 11molniev  
Дата: 03.09.15 20:52
Оценка: 2 (1) +5 :))
Здравствуйте, lpd, Вы писали:

lpd>Соседний топик "java vs. c++" навевает вопрос причин отсутствия фреймворков(вроде Spring, Struts) и

lpd>серверов приложений на C++.

Во что я ввязываюсь...

Основным посылом прошлого топика было:
— отсутствие универсальной, распределенной, переносимой и т.д. системы сборки (являющейся стандартом де факто и работающей под все платформы и проекты). Причины отсутствия очевидны.
— отсутствие признанных стандартом библиотек (хотя нынче boost и qt претендуют на это) покрывающих большинство потребностей. Там где у Java одна-две приличных и распространенных библиотеки, у C++ десяток вариантов, не все из которых можно назвать законченным решением. И каждый пользуется, к чему душа ближе.
— Java библиотеки проще в эксплуатации, положил куда надо и все работает. Для C++ у каждой свой подход, что-то требует cmake, что-то собирается через autotools/nmake, где-то своя система сборки. Где то мега скрипт не работоспособный без установленных perl, python & ruby. В итоге, что бы включить библиотеку в проект надо обязательно почитать README/INSTALL и понять что с ней делать. Для кроссплатформенных решений легко могут выплыть разные средства сборки и куча подводных камней. Плюс каждая OS & Arch — требует собственный билд (а зачастую просто копию библиотеки).
— Стандартная библиотечка Java побогаче.
В итоге C++ тупо менее удобен Java когда мы говорим о внешних зависимостях и извращениях со сборкой. И тупо быстрей когда у нас одна математика (и если руки не из жопы).

lpd>Представляются возможными такие причины:

lpd>1) В Java по-умолчанию предоставляются стандартные переносимые функции вроде управления потоками.
lpd>Все эти функции доступны без дополнительной настройки и линковки, что полезно для больших проектов,
lpd>в которых не удобно для каждого развертывания линковать 5-10 библиотек вроде pthread, boost и пр.
выше.
lpd>2) У JVM есть преимущество безопасности при исполнении кода, т.к. VM контролирует доступ при каждом обращении
lpd>приложения к памяти. По-моему, это единственное существенное преимущество JVM перед компилируемым кодом. Впрочем, безопасность выполнения кода можно обеспечить на C++ средствами ОС (виртуальная память, процессы).
Память это всего лишь один из ресурсов, помимо нее есть соединения сетевые с СУБД, файловые дескрипторы и прочие радости. И там особой разницы между C++ и Java нет. Плюс умные указатели.
lpd>3) Java лучше интегрирован с браузерами.
Это вы мало пользовали Java в браузерах. Когда все эти "write once run everywhere" приложения тупо не работают с новыми JRE или требуют строго 32 JRE или старого браузера и т.д.
Нынче лучше всех интегрирован JavaScript.
lpd>При различиях в производительности приложений на C++ и Java удивляет, что на C++ до сих пор нет заметных
lpd>фреймворков.
Re: фреймворки на C++
От: Evgeny.Panasyuk Россия  
Дата: 03.09.15 21:08
Оценка: +1
Здравствуйте, lpd, Вы писали:

lpd>1) В Java по-умолчанию предоставляются стандартные переносимые функции вроде управления потоками.


Начиная с C++11 управление потоками входит с стандарт.

lpd>Все эти функции доступны без дополнительной настройки и линковки, что полезно для больших проектов,

lpd>в которых не удобно для каждого развертывания линковать 5-10 библиотек вроде pthread, boost и пр.

А зачем для каждого развёртывания повторять (видимо вручную) какие-то операции? Напиши скрипт и дело в шляпе.

lpd>2) У JVM есть преимущество безопасности при исполнении кода, т.к. VM контролирует доступ при каждом обращении

lpd>приложения к памяти. По-моему, это единственное существенное преимущество JVM перед компилируемым кодом. Впрочем, безопасность выполнения кода можно обеспечить на C++ средствами ОС (виртуальная память, процессы).

Плюс средствами компилятора. Плюс возможностью компиляции в управляемую среду.

lpd>3) Java лучше интегрирован с браузерами.


О чём конкретно речь? Для C++ есть Emscripten, с помощью него например за четыре дня спортировали Unreal Engine в JavaScript:
http://www.youtube.com/watch?v=BV32Cs_CMqo

lpd>При различиях в производительности приложений на C++ и Java удивляет, что на C++ до сих пор нет заметных

lpd>фреймворков.

Для какой-то конкретной области или вообще?

lpd>Представляются возможными такие причины:


Перечисленные тобой причины практически ортогональны наличию/отсутствию фреймворков.
Re[2]: фреймворки на C++
От: lpd Черногория  
Дата: 03.09.15 21:17
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

lpd>>Все эти функции доступны без дополнительной настройки и линковки, что полезно для больших проектов,

lpd>>в которых не удобно для каждого развертывания линковать 5-10 библиотек вроде pthread, boost и пр.

EP>А зачем для каждого развёртывания повторять (видимо вручную) какие-то операции? Напиши скрипт и дело в шляпе.

Может потребоваться редактирование скрипта/настроек в зависимости от ОС у программиста если нужны несколько отдельно уставнавлиеваемых/компилируемых библиотек.

lpd>>2) У JVM есть преимущество безопасности при исполнении кода, т.к. VM контролирует доступ при каждом обращении

lpd>>приложения к памяти. По-моему, это единственное существенное преимущество JVM перед компилируемым кодом. Впрочем, безопасность выполнения кода можно обеспечить на C++ средствами ОС (виртуальная память, процессы).

EP>Плюс средствами компилятора. Плюс возможностью компиляции в управляемую среду.

Без reflection в большинстве случаев можно обойтись. Мне на C++ никогда reflection не были нужны.

EP>Для какой-то конкретной области или вообще?

Имею ввиду отсутствие фреймворков для бизнес-приложений вроде Spring/Struts и множества других на Java.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re[2]: фреймворки на C++
От: lpd Черногория  
Дата: 03.09.15 21:22
Оценка:
Вот и в моих рассуждениях получается, что единственным препятствием для использования C++ в бизнес-фреймворках является
разбросанность базовых функций по множеству библиотек и следующее из этого некоторое неудобство сборки. Выходит, что
C++ для вытеснения Java и C# из области бизнес-приложений по-существу не хватает только реализации стандартной библиотеки Java.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re[3]: фреймворки на C++
От: Evgeny.Panasyuk Россия  
Дата: 03.09.15 21:26
Оценка:
Здравствуйте, lpd, Вы писали:

lpd>>>Все эти функции доступны без дополнительной настройки и линковки, что полезно для больших проектов,

lpd>>>в которых не удобно для каждого развертывания линковать 5-10 библиотек вроде pthread, boost и пр.
EP>>А зачем для каждого развёртывания повторять (видимо вручную) какие-то операции? Напиши скрипт и дело в шляпе.
lpd>Может потребоваться редактирование скрипта/настроек в зависимости от ОС у программиста если нужны несколько отдельно уставнавлиеваемых/компилируемых библиотек.

Да, тут согласен — сторонние библиотеки для разных OS могут требовать разных процедур. Думал речь про развертывание в одинаковых средах.

lpd>>>2) У JVM есть преимущество безопасности при исполнении кода, т.к. VM контролирует доступ при каждом обращении

lpd>>>приложения к памяти. По-моему, это единственное существенное преимущество JVM перед компилируемым кодом. Впрочем, безопасность выполнения кода можно обеспечить на C++ средствами ОС (виртуальная память, процессы).
EP>>Плюс средствами компилятора. Плюс возможностью компиляции в управляемую среду.
lpd>Без reflection в большинстве случаев можно обойтись. Мне на C++ никогда reflection не были нужны.

Не понял причём тут reflection, речь же шла про безопасный доступ к памяти.
Re[3]: фреймворки на C++
От: 11molniev  
Дата: 03.09.15 21:46
Оценка:
Здравствуйте, lpd, Вы писали:

lpd>Вот и в моих рассуждениях получается, что единственным препятствием для использования C++ в бизнес-фреймворках является

lpd>разбросанность базовых функций по множеству библиотек и следующее из этого некоторое неудобство сборки. Выходит, что
lpd>C++ для вытеснения Java и C# из области бизнес-приложений по-существу не хватает только реализации стандартной библиотеки Java.

И каких же базовых функций не хватает в связке C++11, Boost, Qt?
Да неудобство есть, но при выборе языка на него кто вообще посмотрит? Потратить C времени на библиотеку для крупного проекта не сложно. Для кучи мелких можно таскать с собой пару заголовочных файлов и пользоваться общей кучей собранных библиотек. Это неудобство, а не проблема.

Это три разных языка. Костяк у них конечно общий, но возможности, удобство и особенности довольно разные.
И да, если бы для их вытеснения было бы достаточно стандартной библиотеки, то появилось бы библиотека, а не новые языки.
Re[4]: фреймворки на C++
От: lpd Черногория  
Дата: 03.09.15 21:50
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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

lpd>>>>2) У JVM есть преимущество безопасности при исполнении кода, т.к. VM контролирует доступ при каждом обращении
lpd>>>>приложения к памяти. По-моему, это единственное существенное преимущество JVM перед компилируемым кодом. Впрочем, безопасность выполнения кода можно обеспечить на C++ средствами ОС (виртуальная память, процессы).
EP>>>Плюс средствами компилятора. Плюс возможностью компиляции в управляемую среду.
lpd>>Без reflection в большинстве случаев можно обойтись. Мне на C++ никогда reflection не были нужны.

EP>Не понял причём тут reflection, речь же шла про безопасный доступ к памяти.

Да, насчет средств компилятора согласен, но их на данный момент никаких нет, что выглядит недостатком.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re[4]: фреймворки на C++
От: lpd Черногория  
Дата: 04.09.15 08:12
Оценка: :)
Здравствуйте, 11molniev, Вы писали:

1>И каких же базовых функций не хватает в связке C++11, Boost, Qt?

Boost еще надо прилинковать — но он не очень и нужен допустим. Qt предлагает средства для UI и работы с
Bluetooth, NFC и т.п., но эти средства скорее лишние для framework, зато вроде бы отсутствует HTTP. Не уверен, что в QT
достаточные для web-приложений модули для работы с Web.

1>Это три разных языка. Костяк у них конечно общий, но возможности, удобство и особенности довольно разные.

1>И да, если бы для их вытеснения было бы достаточно стандартной библиотеки, то появилось бы библиотека, а не новые языки.
Если бы C++ развивался не в сторону по большей части не нужных и несколько усложненных C++11 и C++14, а появился бы переносимый и мощный stl, то C++ заменил бы Java и C#. stl в C++ в том виде, в котором он сейчас, нужен для сравнительно быстрого портирования базовых программ между разными linux и в embedded, но он недостаточно прост и силен для использования в бизнес-приложениях.
Но, возможно, это не единственная причина, поэтому я и поднял исходный вопрос.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re[5]: фреймворки на C++
От: enji  
Дата: 04.09.15 08:24
Оценка: +2
Здравствуйте, lpd, Вы писали:

lpd>Если бы C++ развивался не в сторону по большей части не нужных и несколько усложненных C++11 и C++14,

вот не надо. auto, замыкания, for — все это нужно и не усложнено. rvalue — усложнено, но местами сильно упрощает и увеличивает производительность

lpd> а появился бы переносимый и мощный stl, то C++ заменил бы Java и C#.

переносимый и мощный stl сразу убирает плюсы из всяких там embedded. Собственно и в яве разные библиотеки для каких-нить мобил или карт и для веба...

lpd> stl в C++ в том виде, в котором он сейчас, нужен для сравнительно быстрого портирования базовых программ между разными linux и в embedded, но он недостаточно прост и силен для использования в бизнес-приложениях.

lpd>Но, возможно, это не единственная причина, поэтому я и поднял исходный вопрос.

для бизнес-приложений есть более безопасные языки вроде шарпа/явы. Врядли плюсы могут их подвинуть
Re[6]: фреймворки на C++
От: lpd Черногория  
Дата: 04.09.15 08:50
Оценка: :)))
Здравствуйте, enji, Вы писали:

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


lpd>>Если бы C++ развивался не в сторону по большей части не нужных и несколько усложненных C++11 и C++14,

E>вот не надо. auto, замыкания, for — все это нужно и не усложнено. rvalue — усложнено, но местами сильно упрощает и увеличивает производительность
auto да, удобен. Как и умные указатели. Но 10 видов одного и того же по смыслу for не нужны.

lpd>> а появился бы переносимый и мощный stl, то C++ заменил бы Java и C#.

E>переносимый и мощный stl сразу убирает плюсы из всяких там embedded. Собственно и в яве разные библиотеки для каких-нить мобил или карт и для веба...
О том и речь, что для конкуренции с Java нужна еще одна стандартная библиотека. Более мощная, переносимая и простая в сборке.

E>для бизнес-приложений есть более безопасные языки вроде шарпа/явы. Врядли плюсы могут их подвинуть

Собственно единственным большим плюсом Java и C#, помимо библиотек, видится сходство с C++. У Java и C# донельзя тормозная VM, а сборка мусора реализуется при необходимости в C++, тем более что есть valgrind. Переносимость, которая при появлении java считалась основным преимуществом VM нужна только для малоиспользуемых java-апплетов, т.к. на C++ вообщем то тоже можно распространять код для разных платформ в одном исполняемом файле.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re[3]: фреймворки на C++
От: ArtDenis Россия  
Дата: 04.09.15 09:54
Оценка: +2
Здравствуйте, lpd, Вы писали:

lpd>Имею ввиду отсутствие фреймворков для бизнес-приложений вроде Spring/Struts и множества других на Java.


С++ в силу некоторых причин не подходит для написания бизнес-приложений. Поэтому соответствующих фреймворков в нём и не наблюдается. Это настолько явная и ясная причина, что меня удивляет вообще наличие подобных вопросов.
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[7]: фреймворки на C++
От: enji  
Дата: 04.09.15 10:44
Оценка: +2
Здравствуйте, lpd, Вы писали:

lpd>auto да, удобен. Как и умные указатели. Но 10 видов одного и того же по смыслу for не нужны.


не 10, а два — for (x = 0; x < 10; ++x) и for(x : list). И смысл у них как-бы разный... Или ты под for еще и while подразумеваешь?

lpd>О том и речь, что для конкуренции с Java нужна еще одна стандартная библиотека. Более мощная, переносимая и простая в сборке.


Стандартная библиотеке в сборке просто таки элементарна — ее вообще обычно собирать не надо Переносимость обычно противоречит мощности — скажем на авр-ках нет потоков / файловой системы, а плюсы там чувствуют себя прекрасно

lpd>Собственно единственным большим плюсом Java и C#, помимо библиотек, видится сходство с C++.

Большой плюс явы и шарпа — управляемая среда исполнения, которая дает по рукам перед тем, как программа расстреляет стек скажем. А на си ничто не мешает его расстрелять и получить донельзя странную ошибку в произвольный момент времени

lpd>У Java и C# донельзя тормозная VM, а сборка мусора реализуется при необходимости в C++, тем более что есть valgrind.


Она то может быть и реализуется, но как? boehm (или как-то так, не помню названия) — куча ограничений и тормоза вероятно еще почище явовских, смарт-поинтеры — довольно много ручной работы, не защищают от некоторых ошибок. valgrind есть только под линем...

lpd>на C++ вообщем то тоже можно распространять код для разных платформ в одном исполняемом файле.


Да ладно. Начнем с разных форматов файлов и закончим разным АПИ на разных платформах...
Re[8]: фреймворки на C++
От: lpd Черногория  
Дата: 04.09.15 11:39
Оценка: +1 -2 :)
Здравствуйте, enji, Вы писали:

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


lpd>>auto да, удобен. Как и умные указатели. Но 10 видов одного и того же по смыслу for не нужны.


E>не 10, а два — for (x = 0; x < 10; ++x) и for(x : list). И смысл у них как-бы разный... Или ты под for еще и while подразумеваешь?

Я считаю, что язык программирования должен быть простой как C++(или Java). С++11 и С++14 требуют изучения 10ков дополнительных вариантов синтаксиса для по-большей части редко нужных вещей. Т.е. усложнение языка во многих случаях не оправдано пользой.

E>Стандартная библиотеке в сборке просто таки элементарна — ее вообще обычно собирать не надо Переносимость обычно противоречит мощности — скажем на авр-ках нет потоков / файловой системы, а плюсы там чувствуют себя прекрасно

Стандартная библиотека в некоторых отношениях слабее библиотеки Java, при этом сложнее. Из-за чего часто получается, что в проекте используется много небольших библиотек, каждая из которых требует своих опций линковки на каждом из вариантов Linux.

lpd>>Собственно единственным большим плюсом Java и C#, помимо библиотек, видится сходство с C++.

E>Большой плюс явы и шарпа — управляемая среда исполнения, которая дает по рукам перед тем, как программа расстреляет стек скажем. А на си ничто не мешает его расстрелять и получить донельзя странную ошибку в произвольный момент времени
Контроль стека имеет теоретическую ценность: в реальности чтобы расстрелять стек нужны или бесконечная рекурсия, или неподходящий алгоритм, что выявить не столь сложно.

lpd>>У Java и C# донельзя тормозная VM, а сборка мусора реализуется при необходимости в C++, тем более что есть valgrind.


E>Она то может быть и реализуется, но как? boehm (или как-то так, не помню названия) — куча ограничений и тормоза вероятно еще почище явовских, смарт-поинтеры — довольно много ручной работы, не защищают от некоторых ошибок. valgrind есть только под линем...

Сборщик мусора при желании можно реализовать перегрузкой new/delete и умными указателями. Да, возможно, синтаксис будет несколько сложнее. Но сборка мусора недостаточная причина для использования VM. В том же objective c учет памяти опциональный.

lpd>>на C++ вообщем то тоже можно распространять код для разных платформ в одном исполняемом файле.


E>Да ладно. Начнем с разных форматов файлов и закончим разным АПИ на разных платформах...

Имею ввиду полностью разный исполняемый код для разных платформ в одном бинарном файле. Код может получаться из одного исходника C++, но с макросами для каждой ОС. Вроде как минимум PE-файлы Windows поддерживали вариант одного бинарника и для x86, и для Alpha.

Если я правильно помню, при появлении Java основным достоинством декларировалась портабельность Java-апплетов, что неактуально. Других существенных достоинств Java, оправдывающих в 8 раз меньшую производительность, кроме теоретически полезной безопасности, обеспечиваемой JVM, по-моему нет.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Отредактировано 04.09.2015 11:52 lpd . Предыдущая версия .
Re[4]: фреймворки на C++
От: lpd Черногория  
Дата: 04.09.15 11:44
Оценка:
Здравствуйте, ArtDenis, Вы писали:

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


lpd>>Имею ввиду отсутствие фреймворков для бизнес-приложений вроде Spring/Struts и множества других на Java.


AD>С++ в силу некоторых причин не подходит для написания бизнес-приложений. Поэтому соответствующих фреймворков в нём и не наблюдается. Это настолько явная и ясная причина, что меня удивляет вообще наличие подобных вопросов.


Ну вот я и пытаюсь выяснить, что это, в действительности, за причины. Но список причин получается короткий и сомнительный.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re[9]: фреймворки на C++
От: enji  
Дата: 04.09.15 13:34
Оценка:
Здравствуйте, lpd, Вы писали:

lpd>Я считаю, что язык программирования должен быть простой как C++(или Java). С++11 и С++14 требуют изучения 10ков дополнительных вариантов синтаксиса для по-большей части редко нужных вещей. Т.е. усложнение языка во многих случаях не оправдано пользой.


Ну ты и сравнил. С++ отнюдь не простой, особенно по сравнению с явой. Что ты вообще имеешь в виду под усложнением синтаксиса в с++11/14?

lpd>Стандартная библиотека в некоторых отношениях слабее библиотеки Java, при этом сложнее. Из-за чего часто получается, что в проекте используется много небольших библиотек, каждая из которых требует своих опций линковки на каждом из вариантов Linux.


она во многих отношениях слабее явы. До нелюбимого тобой с++11 там даже потоков не было... Что касается опций линковки — ты о чем?

Опять же, более сильная стандартная библиотека не взлетит на тех же мелких контроллерах. Все равно будут какие-то подмножества в каждой области применения.

lpd>Контроль стека имеет теоретическую ценность: в реальности чтобы расстрелять стек нужны или бесконечная рекурсия, или неподходящий алгоритм, что выявить не столь сложно.


Чтобы расстрелять стек / кучу / etc, достаточно обратиться по мусорному указателю. С учетом отсутствия контроля со стороны рантайма, это сделать элементарно — неинициализированная переменная, дважды вызвали деструктор, вышли за границы массива, ...

lpd>Сборщик мусора при желании можно реализовать перегрузкой new/delete и умными указателями. Да, возможно, синтаксис будет несколько сложнее. Но сборка мусора недостаточная причина для использования VM. В том же objective c учет памяти опциональный.


Умные указатели — это не сборщик мусора. Их надо осознанно использовать, обычные указатели никуда не деваются — т.е. есть риск ошибки, циклы разруливаются только руками — снова есть риск ошибки... Сравни это с явовской ссылкой — с ней что-то сделать не так уже значительно сложнее.

lpd>Имею ввиду полностью разный исполняемый код для разных платформ в одном бинарном файле. Код может получаться из одного исходника C++, но с макросами для каждой ОС. Вроде как минимум PE-файлы Windows поддерживали вариант одного бинарника и для x86, и для Alpha.


В смысле — в один exe склеены несколько файлов? Хз насчет Alpha, но win/lin в одном файле я что-то пока не видел А вот явовские софтины, запускающиеся и там и там — встречались

lpd>Если я правильно помню, при появлении Java основным достоинством декларировалась портабельность Java-апплетов, что неактуально. Других существенных достоинств Java, оправдывающих в 8 раз меньшую производительность, кроме теоретически полезной безопасности, обеспечиваемой JVM, по-моему нет.


Мы ж про бизнес-приложения? Тут безопасность рулит, а производительность — не принципиальна. Тут сбоку как раз темка про ява/с++, можешь там ознакомиться
Re[5]: фреймворки на C++
От: alex_public  
Дата: 04.09.15 13:42
Оценка: +1
Здравствуйте, lpd, Вы писали:

AD>>С++ в силу некоторых причин не подходит для написания бизнес-приложений. Поэтому соответствующих фреймворков в нём и не наблюдается. Это настолько явная и ясная причина, что меня удивляет вообще наличие подобных вопросов.

lpd>Ну вот я и пытаюсь выяснить, что это, в действительности, за причины. Но список причин получается короткий и сомнительный.

Причина собственно одна и она общеизвестна: для решения задач одинаковой сложности C++ и Java/C# требуют от программиста разного уровня подготовки. Что принципиально для бизнеса — не IT компаниям гораздо выгоднее использовать низкоуровневых и хорошо взаимозаменяемых программистов. Так вот как раз Java и C# позволяют это делать безопасно. А C++ в подобном режиме использования обычно приводит к жутким последствиям.

Кстати, при этом всём C++ софта всё равно используется больше, даже в том же бизнесе. Просто он при этом не пишется внутри компании, а покупается у специализированных IT компаний, в которых уже работают высокоуровневые спецы.
Re[10]: фреймворки на C++
От: lpd Черногория  
Дата: 04.09.15 14:17
Оценка: +1 -1 :)
Здравствуйте, enji, Вы писали:

E>Что ты вообще имеешь в виду под усложнением синтаксиса в с++11/14?

Если в терминологии wikipedia{C++11}{C++14}:
lamda-выражения считаю бесполезными — если мне надо вызвать несколько функций, я их вызову без lambda.
Alternative function syntax — зачем?
User-defined literals — бесполезно.
Function return type deduction — ужас
Variable templates — бесполезно

E>она во многих отношениях слабее явы. До нелюбимого тобой с++11 там даже потоков не было... Что касается опций линковки — ты о чем?

Я и говорю, что во многих отношениях слабее явы. Если нужно собрать один и тот-же проект с несколькими библиотеками в разных дистрибутивах линукса, то процедуру сборки прийдется усложнять. Это проблема решаемая,
но все же она присутствует и средства сборки линукс не полностью интуитивны для программистов, которые не знают auto-tools или тонкости make. Потом, при линковке того же буста, в разных дистрибутивах часто возникают проблемы с заголовчными файлами.

E>Опять же, более сильная стандартная библиотека не взлетит на тех же мелких контроллерах. Все равно будут какие-то подмножества в каждой области применения.

Правильно — возможно, нужна еще одна, более полная библиотека, аналогичная библиотеке Java.

E>Чтобы расстрелять стек / кучу / etc, достаточно обратиться по мусорному указателю. С учетом отсутствия контроля со стороны рантайма, это сделать элементарно — неинициализированная переменная, дважды вызвали деструктор, вышли за границы массива, ...

Если программа дважды вызывает деструктор или обращается по мусорному указателю, то в ней баг и она работать не будет. Да, на C++ найти этот баг может быть несколько сложнее, но в больших проектах для этого можно использовать собственные менеджеры памяти и тот же valgrind(наверняка в Windows есть аналогичные средства). Да — проблемы с памятью в программах на С++ встречаются, но они решаемы, если программист понимает, что делает. Для этого всего то нужно потратить две недели-месяц на чтение книг по С++.

E>Умные указатели — это не сборщик мусора. Их надо осознанно использовать, обычные указатели никуда не деваются — т.е. есть риск ошибки, циклы разруливаются только руками — снова есть риск ошибки... Сравни это с явовской ссылкой — с ней что-то сделать не так уже значительно сложнее.

Та или иная система учета памяти в С++ была бы полезна. Но для этого не нужен сборщик мусора — система в Objective C достаточно удобна, есть и другие. И медленная VM для этого — перебор.

E>В смысле — в один exe склеены несколько файлов? Хз насчет Alpha, но win/lin в одном файле я что-то пока не видел А вот явовские софтины, запускающиеся и там и там — встречались

Да я тоже не встречал, как впрочем и живых Alpha процессоров. Наверное, достаточно распространять по бинарнику для каждой архитектуры.

E>Мы ж про бизнес-приложения? Тут безопасность рулит, а производительность — не принципиальна. Тут сбоку как раз темка про ява/с++, можешь там ознакомиться

Используя C++ можно получить все то же + нормальная производительность, но получается, что ряд мелких недочетов этому мешают и для фреймворков выбирается Java. Но имхо — эти недочеты устранимы без VM.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Отредактировано 04.09.2015 14:43 lpd . Предыдущая версия . Еще …
Отредактировано 04.09.2015 14:41 lpd . Предыдущая версия .
Отредактировано 04.09.2015 14:22 lpd . Предыдущая версия .
Re: фреймворки на C++
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 04.09.15 14:49
Оценка:
Здравствуйте, lpd, Вы писали:

lpd>Соседний топик "java vs. c++" навевает вопрос причин отсутствия фреймворков(вроде Spring, Struts) и

lpd>серверов приложений на C++.

Qt vs Spring
Re[11]: фреймворки на C++
От: Stanislav V. Zudin Россия  
Дата: 04.09.15 15:00
Оценка:
Здравствуйте, lpd, Вы писали:

E>>Мы ж про бизнес-приложения? Тут безопасность рулит, а производительность — не принципиальна. Тут сбоку как раз темка про ява/с++, можешь там ознакомиться

lpd>Используя C++ можно получить все то же + нормальная производительность, но получается, что ряд мелких недочетов этому мешают и для фреймворков выбирается Java. Но имхо — эти недочеты устранимы без VM.

Учитывая, что большинство корпоративных приложений проводят время, ожидая ответа от СУБД/сети, то никакого выигрыша от перехода на С++ не получишь.
_____________________
С уважением,
Stanislav V. Zudin
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.