Войти
ФлеймФорумПрограммирование

Зачем уродуют С++ (62 стр)

Страницы: 159 60 61 62 63 64 Следующая »
#915
14:24, 28 ноя. 2017

capitalknew
> Не подумайте что я того, но лучше бы в C++ добавили возможность программировать
> на GPU и для GPU (и NVidia, и AMD Radeon).
Не кресты, но все равно
https://github.com/libmir/dcompute
В отличии от куды, код на гпу идет в тех же файлах, где и хостовый код


#916
16:50, 28 ноя. 2017

innuendo

> Да? Можно примеры в студию ?
https://docs.spring.io/spring/docs/2.5.x/javadoc-api/org/springfr… eFactory.html
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-… slatorPB.html
http://kickjava.com/src/com/sun/java/swing/plaf/nimbus/InternalFr… tate.java.htm

#917
23:59, 28 ноя. 2017

MAMOHT-92
> к подобным умозаключениям пришел, щас во всю тестирую связку qt c++ вместе с qml js.
Hello World на винде со всеми зависимостями весит в тысячи раз больше, чем такой же написанный на WinAPI. Я пару лет назад написал на нём калькулятор (лаба универская), и для запуска он ненасытно требовал всё больше и больше DLL. Когда он запустился, все DLL вместе взятые весили 40 МБ и их было штук 10-15. Это больше, чем все программы, которые я за всю жизнь написал на C++ и C# вместе взятые. Меня, как любителя компактных бинарников, это привело в такой ужас, что я решил забыть про Qt навсегда, либо рассматривать его как библиотеку чисто под Linux, где он встроен в дистрибутив.
Я думал написать в составе своей Intra свою GUI библиотеку, в которой не платишь за то, что не используешь - чтобы весило почти как аналог на WinAPI. Но недавно обратил внимание на HTML, где GUI, загрузка картинок, звуков и много чего ещё не весит ничего и не требует ничего доустанавливать - браузер есть у всех. Может я ещё столкнусь с тем, чего не умеет браузер или что умеет очень плохо, но пока всё идёт хорошо. Если JS тормозит, есть asm.js и скоро допилят wasm.

innuendo
> Да? Можно примеры в студию ?
Да любой фреймворк или более-менее крупная библиотека. Вот Spring и Hadoop уже привели, а ещё Jetty, JDBC, Hibernate. Везде сплошная конфигурация, которая делается миллионом способов разными классами, которых так много, что без документации не догадаться, что они делают и какой из них мне нужен. И загуглить проблему нереально, потому что я конфигурирую библиотеку, используя один класс, а гугл находит абсолютно другой. Даже вот пример с длинными названиями привели - видимо короткие и ёмкие уже давно закончились и используются другими классами. Например я долго искал, как подключить Postgres к Heroku, как правильно составить этот connection string. В документации к heroku они использовали какую-то свою либу, у меня в коде было подключение другим способом (к другой БД PostgreSQL, не от heroku, от которой я хотел перейти). В итоге нашёл, но это заняло пару часов.

#918
0:05, 29 ноя. 2017

gammaker
> Но недавно обратил внимание на HTML, где GUI, загрузка картинок, звуков и много
> чего ещё не весит ничего и не требует ничего доустанавливать - браузер есть у
> всех.
Вот и ребята использующие десктоп поделки на электроне тоже так подумали. )))

#919
0:20, 29 ноя. 2017

gammaker
> Когда он запустился, все DLL вместе взятые весили 40 МБ и их было штук 10-15.
ужос та какой!! ну не понимаю я этого всего, если ты пишешь что-то серьезное, и это не зловред, то не вижу ничего плохого в паре десятков "лишних" мегабайтов. Тем более, что не все dll тебе нужны, плюс вроде qt-шники сделали что-то вроде конфигурирования dll, и вес итогового приложения можно уменьшить.

#920
5:19, 29 ноя. 2017

gammaker
> Да любой фреймворк или более-менее крупная библиотека. Вот Spring и Hadoop уже
> привели, а ещё Jetty, JDBC, Hibernate. Везде сплошная конфигурация, которая
> делается миллионом способов разными классами, которых так много, что без
> документации не догадаться

аааааа, а на C++ всё же делается в разы меньшим числом строчек

> Даже вот пример с длинными названиями привели - видимо короткие и ёмкие уже давно закончились и используются другими классами

открой stl - там названия короткие, всё с первого раза понятно и очевидно :)

#921
11:52, 29 ноя. 2017

exchg
> Вот и ребята использующие десктоп поделки на электроне тоже так подумали. )))
Что за электрон?

innuendo
> аааааа, а на C++ всё же делается в разы меньшим числом строчек
Он же низкоуровневый и поэтому чаще всего по логике можно догадаться, как там всё настроить. А в Java уже наплодили кучу классов и фиг догадаешься по их названию, что было в голове у тех, кто это делал. А ещё C++ не требует делать классы на каждый чих и класть их в отдельный файл.

innuendo
> открой stl - там названия короткие, всё с первого раза понятно и очевидно :)
Названия может и не самые очевидные, но легко запоминающиеся и их немного.

Вообще в этом плане их сравнивать немного странно. В C++ многословность достигается из его низкоуровневости, а в Java за счёт фреймворков, громоздких библиотек и фреймворков для конфигурирования других фреймворков.
В том же C# я вроде такого не замечал. В отличие от Java мне там доводилось писать код только по делу. А ещё там нормальные коллекции, потому что есть нормальные генерики, value типы и перегрузка операторов.
Хотя и его, я считаю, можно заменить языком типа C++ или D без потери выразительности при наличии хороших библиотек, которых сейчас нет. Но C++ для этого на данный момент не хватает модулей, рефлексии и концептов. Конечно это можно частично побороть хорошей структурой проекта, ручной рефлексией с уродливыми макросами и SFINAE, но лучше, чтобы это было в языке.

#922
12:01, 29 ноя. 2017

gammaker
> ручной рефлексией с уродливыми макросами

Накой она нужна?! У вас в каждом 1м проекте нужно обязательно мегаметровые файлы (де)сериализировать? Прям беда, с любителями сериализаций, прям как у Микрософта с текстовыми редакторами (они и MFC со студией заточили под разработку текстовых редакторов). Ну правильно, никакого другого вида софта же не надо писать, давайте ваш  ненужный шкаф впендюрим.

#923
12:57, 29 ноя. 2017

0iStalker
> Накой она нужна?! У вас в каждом 1м проекте нужно обязательно мегаметровые файлы (де)сериализировать?
Да, мне сериализация нужна во всех моих проектах - для сохранения результатов расчётов, для отправки по сети. Игровому движку например понадобится читать сцену и многие другие ресурсы. У меня есть очень много структур, которые необходимо записывать в текстовый файл и/или бинарный файл умнее тупого fwrite(..., sizeof(T)), и каждый раз код для этого приходится писать вручную. И неважно, большой или маленький файл при этом получится. В большинстве случаев они маленькие, но в одном проекте у меня генерируется JSON размером 85 МБ. JS радует тем, что там во-первых уже нативный JSON, а во-вторых можно легко итерироваться по всем полям объектов для создания кастомной сериализации во что угодно.

#924
13:22, 29 ноя. 2017

gammaker
> А ещё там нормальные коллекции, потому что есть нормальные генерики

Боюсь спросить - что такое нормальные коллекции и дженерики ? и что тебе дают value типы ? :)

#925
13:30, 29 ноя. 2017

gammaker
> и каждый раз код для этого приходится писать вручную.

Кодогенерация же, как во flatbuffers

#926
14:10, 29 ноя. 2017

gammaker
> В том же C# я вроде такого не замечал. В отличие от Java мне там доводилось
> писать код только по делу.

ты делаешь мне больно... я не люблю MS

#927
14:30, 29 ноя. 2017

gammaker
> Hello World на винде со всеми зависимостями весит в тысячи раз больше, чем
> такой же написанный на WinAPI. Я пару лет назад написал на нём калькулятор
> (лаба универская), и для запуска он ненасытно требовал всё больше и больше DLL.
> Когда он запустился, все DLL вместе взятые весили 40 МБ и их было штук 10-15.
Да ладно. У меня Qt-приложение с прикладной кодобазой в десяток человеколет, встроенным внутрь питоном, хрен знает чем еще, с вебкитом занимает в разы меньше. Ты просто какую-то очень жадную конфигурацию билда выбрал для своего хелловорлда.

#928
15:00, 29 ноя. 2017

innuendo
> Боюсь спросить - что такое нормальные коллекции и дженерики ? и что тебе дают value типы ? :)
То что благодаря нормальным generic'ам я могу хранить в C# List<int> миллион интов и они займут 4 мегабайта, а не 20 мегабайт, как в Java ArrayList<Integer>. А ещё благодаря наличию value-типов в C# я могу положить любую структуру, например List<Point>, в то время как в Java это будет класс.
А потом ещё будут говорить, что Java не медленная и не жрёт память. Даже в JS и то можно эффективнее контейнеры для базовых типов реализовать.

0iStalker
> Кодогенерация же, как во flatbuffers
Это лишние сложности и опять же лишние классы, которые не умеют ничего кроме парсинга данных. Поэтому их придётся дублировать и оборачивать своими классами со своей логикой. Нафиг нужна кодогенерация, если можно обойтись без неё? Без рефлексии конечно сложно, но я предпочитаю так, чем усложнять процесс сборки и писать кодогенератор. В моей библиотеке Intra сериализация структур сведена к тому, что в структуру надо записать строчку INTRA_ADD_REFLECTION(MyClass, field1, field2) с именем класса и перечислением сериализуемых полей, а дальше просто создать объект сериализатора, указав поток вывода и желаемый язык сериализации, и оператором << сериализовать любые структуры с рефлексией в любой формат. Никаких лишних одноразовых классов, никакой кодогенерации. Вот нормальная рефлексия позволит убрать эту строчку INTRA_ADD_REFLECTION.
В D, кстати, она уже есть, а ещё там можно использовать атрибуты, как в Java, например вручную помечать часть полей @Serializable. А ещё в D можно реализовать любую кодогенерацию средствами его самого, благодаря выполнению кода во время компиляции и ключевому слову mixin. Но к сожалению в нём есть фатальные недостатки:
1) Жирный рантайм, благодаря которому программа void main(){} весит 200 КБ - больше, чем целый мой синтезатор MIDI на C++. У меня это как-то не ассоциируется с "не платишь за то, что не используешь". И это DMD, другие компиляторы вроде ещё более жирные бинарники выдают. Хотя вроде работают над этим и над тем, чтобы без рантайма меньше фич отваливалось.
2) Отсутствие нормальных IDE. Я правда этот пункт проверял уже год назад, но я не находил IDE с семантической подсветкой синтаксиса, и даже отладчик под виндой не работал.
3) Много недоработок в стандартной библиотеке. Большая её часть просто не раскрывает потенциал языка. Лучше всего конечно сделаны range и алгоритмы, я ими вдохновлялся, когда писал свою библиотеку.

Вот если их исправить, будет идеальная замена всем нативным языкам, а также Java и C#. Если бы у меня было время, я бы взялся за пункты 1 и 3, стал бы портировать туда свои наработки из Intra. Правда C++ бросать не хочется, там больше аудитория, да и фичи нужные когда-нибудь завезут.

beejah
>Да ладно. У меня Qt-приложение с прикладной кодобазой в десяток человеколет, встроенным внутрь питоном, хрен знает чем еще, с вебкитом занимает в разы меньше.
А "Hello, World" оконный сколько весит под виндой? Со всеми зависимостями, чтобы можно было запустить на любом компьютере без установки?

beejah
> Ты просто какую-то очень жадную конфигурацию билда выбрал для своего
> хелловорлда.
Не знаю, качал Qt с официального сайта, по-моему версию MSVC, компилировал в Release. Может надо было перекомпилировать весь Qt, но такое я не пробовал.

#929
15:38, 29 ноя. 2017

gammaker
> А "Hello, World" оконный сколько весит под виндой? Со всеми зависимостями,
> чтобы можно было запустить на любом компьютере без установки?
Не могу сейчас глянуть. Не уверен, что под виндой я вообще кастомную сборку делал, бо не продакшн ОС.

> Не знаю, качал Qt с официального сайта, по-моему версию MSVC, компилировал в
> Release. Может надо было перекомпилировать весь Qt, но такое я не пробовал.
По-любому. Нужны 1. статическая конфигурация 2. с отключенными ненужными зависимостями второго порядка (всякие поддержки форматов, фич и т.п), потому что в статике система подгрузки уже не работает, т.е "не положил" - уже не катит. 3. компилятор, который умеет выкидывать ненужный объектный код 4. ну, и сам код - при желании и парой строчек столько всего модного прицепить можно

Но вообще это нахер не нужно. Ну, 40 метров, и чо? Это критично лет 15 назад было.
Сейчас в гуглоплей кирпичи по 100 метров кладутся, всем похер.

Страницы: 159 60 61 62 63 64 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.