Re[46]: Область применения С++
От: so5team https://stiffstream.com
Дата: 08.07.17 08:24
Оценка:
Здравствуйте, prezident.mira, Вы писали:

S>>Когда нужен тонкий ручной тюнинг, то это делается на C++ так же, как и на C.

PM>Доё Справедливости ради, в стандартном C есть restrict, а в C++ — нет. (Впрочем, все нужные компиляторы понимают __restrict)

Об этом уже говорилось в данной теме (в другой ветке)
Автор: so5team
Дата: 27.06.17
.
Re[20]: Область применения С++
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 08.07.17 10:21
Оценка:
Здравствуйте, VladD2, Вы писали:

N>>Да, стоит. Внутри того же OpenCV, который невольно стал примером тематической библиотеки на С++, тоже есть expression templates для матриц. Я могу написать читабельное выражение для любого математика типа: Y = A * X + B. И правая часть выполнится ОДНОЙ (!!!) специализированной функцией. Вот это и есть применение С++, которое улучшает понимание кода, делает его проще без ущерба для скорости.

VD>Это возможно не только на С++.

Никто не спорит. Но это также свидетельствует, что С++ достаточно современен и предоставляет БЕСПЛАТНЫЕ в плане производительности абстракции высокого уровня. Об это и говорим.
Re[21]: Область применения С++
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.07.17 10:28
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Никто не спорит. Но это также свидетельствует, что С++ достаточно современен и предоставляет БЕСПЛАТНЫЕ в плане производительности абстракции высокого уровня. Об это и говорим.


1. Они отнюдь не бесплатные. Если нужно выжать последние копейки, то в стиле С или на ассемблере всегда можно сделать быстрее. Просто результат таких оптимизации не стоит свечей. Но этот же аргумент верен в 90% применений и к други языкам, чьи компиляторы порождают менее оптимизированный код.

2. О современности это не свидетельствует. МП чуть меньше лет чем языкам программирования вообще. Первым был Лисп около 60 лет назад.

3. Платить приходится не только скоростью выполнения кода, но и простотой, скоростью и удобством разработки. В этом плане С++ не сливает разве что голому С и Паскалю виртовского разлива.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Область применения С++
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 08.07.17 10:30
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>В тех же игрушках нормой стало писать на С++ недра движков, а сами игры описывать на кондовейших скриптах (в которых о производительности даже смешно говорить).


Уже миллион лет назад скрипты на lua — это фактически luajit, который быстрый. Помню, ещё в первом Сталкере (много лет назад) это было. Так что не надо тут о производительности скриптов. Она нормальная.
Re[22]: Область применения С++
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 08.07.17 11:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>1. Они отнюдь не бесплатные. Если нужно выжать последние копейки, то в стиле С или на ассемблере всегда можно сделать быстрее. Просто результат таких оптимизации не стоит свечей. Но этот же аргумент верен в 90% применений и к други языкам, чьи компиляторы порождают менее оптимизированный код.


Интересно, а какой оверхед в плане производительности вносят те же шаблоны? Мне кажется, что ты на что-то другое отвечаешь.

VD>2. О современности это не свидетельствует. МП чуть меньше лет чем языкам программирования вообще. Первым был Лисп около 60 лет назад.


И? Слово современный не является синониму к слову новаторский. Мне всё кажется, что ты не со мной споришь, а с кем-то другим.

VD>3. Платить приходится не только скоростью выполнения кода, но и простотой, скоростью и удобством разработки. В этом плане С++ не сливает разве что голому С и Паскалю виртовского разлива.


Ага. Пишу я, значит, работу с матрицами. Надо мне посчитать Y = A * X + B. И я на С++ так и записываю! Представляешь? И что в результате? А в результате у меня вызывается функция, которая одновременно умножает и складывает матрицы. Причём, тип элементов матрицы может быть любым. Если библиотека собрана с использованием Eigen, то будет вызвана её реализация. Если библиотека была собрана с использованием IPP, то будет вызвана эта реализация. Если был выбран OpenCL, то выражение будет посчитано на видеокарте. А мне, прикладному программисту, можно написать просто Y = A * X + B. Всё! Где тут проблема в простоте, скорости или удобстве разработки?Где она: "Ау!"
Теперь я могу ожидать от тебя подобного примера на другом языке?
Re[8]: Область применения С++
От: Слава  
Дата: 08.07.17 12:05
Оценка:
Здравствуйте, Dair, Вы писали:

D>В идеале, я бы хотел язык с двумя парадигмами распределения памяти — ручной и GC, чтобы разработчик мог выбирать, что ему надо (примерно это решено в Objective-C с его ARC, хотя механизм другой чем GC — работает ровно как на Java/C#, когда не думаешь про выделение памяти).

D>Я бы хотел язык, для которого есть компилятор в нативный код (x86/x64/arm/arm64/...), но есть и, например, компилятор в JVM или CLR — это дало бы гибкость.

Есть же Dlang.
Re[3]: Область применения С++
От: Слава  
Дата: 08.07.17 12:08
Оценка:
Здравствуйте, prezident.mira, Вы писали:

PM>Без впитанного HKT — не нужен.

НКТ — это Не Кошерный Товарищ?

PM>не нужен.

Вы сюда с ЛОРа пришли? Очень бросается в глаза.
Re[7]: Область применения С++
От: Слава  
Дата: 08.07.17 12:13
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Уже миллион лет назад скрипты на lua — это фактически luajit, который быстрый. Помню, ещё в первом Сталкере (много лет назад) это было. Так что не надо тут о производительности скриптов. Она нормальная.


Код на JS исполняемый посредством JS-jit, работает гораздо быстрее, чем код lua на lua-jit. У Lua есть ровно одно преимущество — его интерпретатор (а не jit-компилятор) является чемпионом по малому потреблению памяти. Именно поэтому lua любят например в телефонии, где нужно в сотне тредов исполнять скрипты (а нормального jit туда не завезли, потому что сам отрасль телефонии больная на голову).
Re[9]: Область применения С++
От: Dair Россия https://dair.spb.ru
Дата: 08.07.17 12:16
Оценка:
Здравствуйте, Слава, Вы писали:

D>>Я бы хотел язык, для которого есть компилятор в нативный код (x86/x64/arm/arm64/...), но есть и, например, компилятор в JVM или CLR — это дало бы гибкость.


С>Есть же Dlang.


Верю.

А вот есть dlang-arm64-ios? А как с ObjC UIKit из dlang работать? Есть jni-dlang?
Re[8]: Область применения С++
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 08.07.17 12:36
Оценка:
Здравствуйте, Слава, Вы писали:

С>Код на JS исполняемый посредством JS-jit, работает гораздо быстрее, чем код lua на lua-jit.

Это хорошо, что большие корпорации смогли обогнать одного разработчика, работающего за донаты. Но! Тот факт, что JS-jit быстрее, чем lua-jit не говорит, что lua-jit медленный.

С>У Lua есть ровно одно преимущество — его интерпретатор (а не jit-компилятор) является чемпионом по малому потреблению памяти. Именно поэтому lua любят например в телефонии, где нужно в сотне тредов исполнять скрипты (а нормального jit туда не завезли, потому что сам отрасль телефонии больная на голову).

Согласен. Но в играх я чаще видел в поставке luajit. Видимо, для них память не сильно критична.
Re[4]: Область применения С++
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 08.07.17 12:42
Оценка: +1
Здравствуйте, Слава, Вы писали:

PM>>Без впитанного HKT — не нужен.

С>НКТ — это Не Кошерный Товарищ?

Higher Kinded Types. В терминах С++ и D, когда у шаблона параметр — другой шаблон (неинстанциированный).
Re[22]: Область применения С++
От: WolfHound  
Дата: 08.07.17 13:11
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>1. Они отнюдь не бесплатные. Если нужно выжать последние копейки, то в стиле С или на ассемблере всегда можно сделать быстрее.

Про С просто не правда. Код на С++ всегда не медленней чем на С. Если конечно у программиста руки не кривые.
Просто за счёт того, что шаблоны оптимизируются гораздо лучше, чем процедурный код.
Классический пример qsort vs std::sort.

На ассемблере в теории можно, но на практике мало кто может обогнать современные компиляторы.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[23]: Область применения С++
От: WolfHound  
Дата: 08.07.17 13:11
Оценка: :))
Здравствуйте, Nuzhny, Вы писали:

N>Теперь я могу ожидать от тебя подобного примера на другом языке?

На немерле и любом языке с подобными макросами такое без проблем делается.
Причем макросы гораздо круче шаблонов.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[24]: Область применения С++
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 08.07.17 13:14
Оценка:
Здравствуйте, WolfHound, Вы писали:

N>>Теперь я могу ожидать от тебя подобного примера на другом языке?

WH>На немерле и любом языке с подобными макросами такое без проблем делается.
WH>Причем макросы гораздо круче шаблонов.

Хорошо, хорошо. Но примеров же не будет, да?
Re[25]: Область применения С++
От: WolfHound  
Дата: 08.07.17 13:32
Оценка: :)
Здравствуйте, Nuzhny, Вы писали:

N>Хорошо, хорошо. Но примеров же не будет, да?

Про матрицы не будет. Ибо для того чтобы они были их должен кто-то написать.
Но для понимания того что это возможно посмотри на http://www.nemerleweb.com/tutorial
Эта штука берёт код на немерле и превращает его в реактивный код на JS.

Или вот на это http://omega.sp.susu.ru/books/conference/PaVT2011/full/117.pdf
Эта штука берёт код на немерле и превращает его в код для видеокарты.

В обоих случаях происходит значительно более сложный анализ и переписывание кода.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: Область применения С++
От: WolfHound  
Дата: 08.07.17 13:39
Оценка: :)
Здравствуйте, Mystic Artifact, Вы писали:

WH>>Где лучше доступ ещё вопрос.

WH>>http://rsdn.org/forum/nemerle/4220330.flat
Автор: Denom
Дата: 04.04.11

MA> Не совсем ясно на что именно ты дал ссылку (что конкретно имел ввиду). Сорри.
На код, который уделывает С++ по производительности.
На остальное отвечать не буду, ибо ты отвечал на свои фантазии, которые не имеют отношения к тому на что я дал ссылку.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[26]: Область применения С++
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 08.07.17 14:13
Оценка: +2
Здравствуйте, WolfHound, Вы писали:

WH>Или вот на это http://omega.sp.susu.ru/books/conference/PaVT2011/full/117.pdf

WH>Эта штука берёт код на немерле и превращает его в код для видеокарты.

Про web ничего не скажу, потому что не разбираюсь. А про NUDA можно. Как показывает практика, на том же OpenCL надо писать индивидуальный код чуть ли не на каждую архитектуру. В общем: AMD VLIW — один код, GCN — другой, для NVidia — третий, под Интел — четвёртый. Это самый минимум, в действительности надо больше градаций делать, чтобы получить максимум производительности. Кто-то заявляет, что поддерживает стандарт OpenCL 1.2, но на практике оказывается, что некоторые функции из стандарта не работают, возвращают ОК, но ничего при этом не делают. И это нормально в этой области. OpenCL на мобильных платформах ещё в более плачевном состоянии. А ещё у каждого вендора есть свои расширения, многие из них прописаны в стандарте, но не все.
Так что мне не особо верится в возможность качественной кодогенерации OpenCL кода. Всё таки приведённая тобой статья довольно старая, современные реалии сложнее.
Надо ли говорить, что в той же OpenCV над OpenCL и CUDA кодом работали штатные сотрудники из Интела, АМД и Нвидиа. Ибо всё сложно, у инсайдеров получается писать намного более производительный код из-за наличия внутренней подробной документации. А некоторые вещи вообще не задокументированы.
Поэтому что на С++, что на Немерле всё равно придётся писать не обобщённый, а узкоспециализированный код. Тут никакого выигрыша не будет.
А он нужен именно на уровне выше, уровне прикладного программиста, который использует язык, библиотеку и может писать на близком к себе языке. В моём контексте — это язык более близкий к математикам. Можно ориентироваться на Матлаб, который является де-факто стандартом для них. Вот клиентский код на OpenCV на С++ может быть не намного сложнее матлабовского и питоновского.
Я как-то взял небольшую функцию non maximum suppression на Питоне (от человека который продаёт свои лекции о компьютерном зрении на Питоне) и переписал её на С++. Получилось короче и эффективнее даже в плане алгоритмов, не говоря уже об итоговой производительности. С++ + OpenCV оказалось выразительнее, чем Питон + numpy + OpenCV (официальный биндинг к Питону). Вот это и есть простота и эффективность.
Re[8]: Область применения С++
От: prezident.mira Россия  
Дата: 08.07.17 16:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, prezident.mira, Вы писали:


VD>>>1. Rust.

PM>>Это верно,

VD>Мне нравится учительский тон.


Рад стараться.

PM>>но пока рановато.


VD>Ты всю жизнь прождешь и будешь поговаривать "пока рановато". Я это уже на том же D наблюдал.


Насчёт D никто не поговаривал "пока рановато заменять им C++". Вряд ли кем-то, кроме создателя, D всерьёз рассматривался как замена C++.

VD>>>2. D.

PM>>Это смешно.

VD> D обладает всем, что есть в С++ и многим, что в нем нет.


Да, например GC, который нафиг не нужен в той области, где нужен C++.

VD> А главное, что на нем куда проще писать код.


Много на чём проще писать код, чем на C++. Это не значит, что нечто, на чём проще писать код, чем на C++ является заменой C++.

VD>>>3. Ocamle.

PM>>Тредов тонет, скорее кидайте ему спасательный круг!

VD>Он уже лет 25 тонет. Все никак потонет.


Напоминает эту сексистскую шутку, уж извините. «OCaml — ничем не хуже C++! Он так же продуктивен и полезен обществу! Вспомните, например, применяющие его компании: "Jane Street Capital", "Jane Street Capital", "Jane Street Capital" …»

VD>>>4. Создание DSL-ей генерирующих тот же С/С++.

PM>>Можно и из Scheme сгенерировать C. Только производительность у этого кода будет не как у вручную написанного C, а как у питона.

VD>Ты сначала сам попробуй, а потом трепись. К слову я этим треть жизни занимаюсь.


Треть жизни треплешься? И не надоело?

VD> Разницы между вручную написанным кодом и сгенерированным не наблюдаю.


Вручную написанный C и сгенерированный C — это один и тот же C, никакой разницы. Надо же!

VD> Его всегда можно сделать аналогичным.


Ага. Вручную расставив аннотации типов. Тогда зачем вообще на Scheme писать?

VD>Ну, и не нужен везде идеальный код.


Т.е. "зелён виноград". Всё-таки сознались, что производительность-то остаётся от Scheme, хоть оттранслируй его в C, хоть в LLVM, а как была проверка типов в рантайме, так и осталась.
Re[7]: [OFF] Недостатки С++
От: prezident.mira Россия  
Дата: 08.07.17 23:38
Оценка: -1
Здравствуйте, Mystic Artifact, Вы писали:

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


MA>В свете последнего опыта с C++ я почти всегда стараюсь его критиковать. Меня конечно понять сложно т.к. не обладаю талантом выражать мысли максимально понятно.


MA>Тем не менее последние наблюдения меня вводят в некоторое уныние.


MA>1. Типы и Undefined Behavior


MA>Я не понимаю почему в стандарте наконец не определят бихейвор.


Это уже объяснялось много раз.

MA>Короче, поинт в том — что UB не место в стандарте. А с размерами типов можно и определится наконец.


Смешно.
Re[4]: Область применения С++
От: dsorokin Россия  
Дата: 09.07.17 17:56
Оценка: 4 (1)
Здравствуйте, Mystic Artifact, Вы писали:

MA>В рамках ликбеза: а как становится понятно, что необходимо переехать в кучу?


В контексте C# говорить на эту тему как-то смысла немного. Там Эдем (Eden), поколения объектов, все такое. Все автоматически из Эдема переезжает в более долговременную кучу (по крайней мере, в Java). А куча / стек — это вещи, важные для языков типа Си и Си++. Напомню, что Rust позиционируется как язык системного программирования
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.