Re[17]: Что посоветуете как аналог С++
От: Evgeny.Panasyuk Россия  
Дата: 19.06.13 15:42
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

IT>>>Это хорошо. А второй, который shared?

N>>Тот который шаред — ИМХО антипаттерн.
I>А стоит сказать это в форуме С++, минусов будет на три страницы.

shared_ptr хоть и полезен, но сильно overused.
Многие его используют абсолютно ни к месту — где достаточно unique_ptr, а где-то вообще никакой smart pointer не нужен.
Re[6]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.06.13 15:42
Оценка: :)
Здравствуйте, Nuzhny, Вы писали:

KP>>>Не совсем. Что на JVM, что на .NET типичный подход выглядит как-то так: "главное задача, памяти бесконечно много, не хватает мощности — поставим на кластер". Умный это подход или глупый, в общем случае, – мне судить сложно. С точки зрения системного C++ разработчика – подход глупый, но, бизнес, вроде как устраивает.


I>>Это не на JVM или .Net, а во вполне определенных областях. Как правило тормозные монстры до того как их сделали на джаве или нете, были еще более тормозными и глючными в своем плюсовом детстве.


N>Как правило после любого переписывания системы она становится лучше и быстрее. И это достоинство не столько инструмента, сколько лучшего понимания проблем и предметной области.


Как правило, после любого переписывания системы, она становится переписаной. А вот что бы стало быстрее и лучше в каких то аспектах, надо очень четко понимать достоинства и недостатки имеющихся решений. И тут нет никакой разницы между нативной разработкой или менеджед. Скажем, полно приложений на С++ которые переписываются чуть не раз в сезон, но почему то никак дорастут до нормального качетсва-быстродействия.
Re[10]: Что посоветуете как аналог С++
От: Cyberax Марс  
Дата: 19.06.13 16:16
Оценка:
Здравствуйте, kaa.python, Вы писали:

C>>А в чём особая разница? Libcurl может делать select (или poll) на нескольких соединениях, события которых потом можно асинхронно обрабатывать.

KP>В реализации и подходе. Асинхронный режим, прием сообщения: создал буфер и сказал тебя позвать когда в нем будут данные; пришли данные, тебя позвали и ты имеешь буффер заполненный данными. Неблокирующий режим, прием сообщения: попросил тебя позвать когда данные будут; тебя позвали, ты вычитал данные и используешь их. Разница в том, что вычитка данных происходит за счет времени твоего приложения, а не за счет ядра. С отправкой аналогично.
Я тебе скажу, что в Линуксе разницы между этими двумя подходами совсем нет. Это если не заниматься экзотикой типа AIO, который один фиг не работает.

KP>Плюс имеются ограничения в функции select на количество одновременно обрабатываемых дескрипторов.

Там используется poll(), который реально ограничений не имеет.
Sapienti sat!
Re[5]: Что посоветуете как аналог С++
От: Mna 404 and heavy formation
Дата: 19.06.13 16:27
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Лично я уходил на дотнет из за наличия инструментов, с помощью которых можно навести порядок в коде. Для С++ их и по сей день нет. Потому древний код, который никто не знает, как должен работать, привести в порядок крайне тяжело.

I>В дотнете, джаве — очень просто, т.к. средства автоматического рефакторинга, тесты всяких сортов, анализаторы кода и тд и тд берут на себя примерно 90% той работы, которую на С++ надо делать руками.
I>Теоретически, на С++ что-то даже есть, но это сильно условно, т.к.
I>благодаря тем техникам, что уже по факту укоренились в С++, ни один тул не может ничего гарантировать, даже простое переименование метода местами даёт проблемы.

Что это за порочные техники такие?

Особенно интересно узнать что сотворит переименование метода? там, что, часть метода в #define написана?
Re[11]: Что посоветуете как аналог С++
От: Evgeny.Panasyuk Россия  
Дата: 19.06.13 16:30
Оценка:
Здравствуйте, Ikemefula, Вы писали:

EP>>Performance bottleneck большинства программ это взаимодействие с иерархией памяти.

EP>>Плохой memory layout структур данных, лишние индерекции, лишние аллокации, плохая работа с кэшем — это всё яд для производительности — этим всем грешат "управляемые среды", поэтому и производительность намного хуже.
EP>>Требуется в 10 раз больше памяти? — косвенный признак тормозов.

I>Это общие слова. Такие вещи имеют вес в основном в числодробилках.


В числодробилках такие вещи это не основное, а так — минимально необходимые требования чтобы конкурентоспособным.
В большинстве же приложений — это то, во что упирается производительность. А это не только скорость, но и энергоэффективность, и цена железа.

I>"лишние аллокации" в менеджед не проблема.


Ну да — именно поэтому разработчики оптимизаторов пыхтят например над escape analysis
Как пример — эти аллокации вылезают по всему коду, при простейших абстракциях — просадка 16x на ровном месте.
Также аллокации ухудшают локальность, что является дополнительной проблемой.
Чтобы бороться с ними, нужно от многого отказываться и работать против языка — этим редко кто занимается, ибо проще взять более подходящий инструмент.

I>Что характерно, быстрый код на С++ это точно так же работа против языка.


Alexander Stepanov:
What do I mean when I say that an algorithm does not "impose any performance penalty"? In other words, how do you know that a generic algorithm is efficient? An algorithm is called relatively efficient if it's as efficient as a nongeneric version written in the same language, and it's called absolutely efficient if it's as efficient as a nongeneric assembly language version.

For many years, I tried to achieve relative efficiency in more advanced languages (e.g., Ada and Scheme) but failed. My generic versions of even simple algorithms were not able to compete with built-in primitives. But in C++ I was finally able to not only accomplish relative efficiency but come very close to the more ambitious goal of absolute efficiency. To verify this, I spent countless hours looking at the assembly code generated by different compilers on different architectures.



I>Почему то самые критичные куски кода пишутся практически на С или подобным образом.


Это распространённый миф

EP>>

EP>>Andrei Alexandrescu: "The going word at Facebook is that 'reasonably written C++ code just runs fast,' which underscores the enormous effort spent at optimizing PHP and Java code. Paradoxically, C++ code is more difficult to write than in other languages, but efficient code is a lot easier."


I>Это все басни.


Это реальный опыт крупного проекта
Re[5]: Что посоветуете как аналог С++
От: Mazay Россия  
Дата: 19.06.13 16:57
Оценка:
Здравствуйте, Cyberax, Вы писали:

KP>>Да, а вот теперь реально интересующий меня вопрос. Ты что используешь в качестве сетевого уровня? Текущая версия из Rust, мягко говоря, не завершена.

C>Прикрутил libcurl. Заодно разобрался с ARC и разделяемыми ресурсами

А что такое ARC? И в чём состояло прикручивание libcurl?
Главное гармония ...
Re[6]: Что посоветуете как аналог С++
От: Cyberax Марс  
Дата: 19.06.13 17:10
Оценка: 3 (1)
Здравствуйте, Mazay, Вы писали:

KP>>>Да, а вот теперь реально интересующий меня вопрос. Ты что используешь в качестве сетевого уровня? Текущая версия из Rust, мягко говоря, не завершена.

C>>Прикрутил libcurl. Заодно разобрался с ARC и разделяемыми ресурсами
M>А что такое ARC?
http://dl.rust-lang.org/doc/std/arc.html

M>И в чём состояло прикручивание libcurl?

Аккуратно сделать кэш соединений и диспетчер.
Sapienti sat!
Re[11]: Что посоветуете как аналог С++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 19.06.13 17:50
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Я тебе скажу, что в Линуксе разницы между этими двумя подходами совсем нет. Это если не заниматься экзотикой типа AIO, который один фиг не работает.


Как же у вас там все печально
Эту проблему, в году так 2008 грозились вот-вот решить.
Re[12]: Что посоветуете как аналог С++
От: Cyberax Марс  
Дата: 19.06.13 18:19
Оценка:
Здравствуйте, kaa.python, Вы писали:

C>>Я тебе скажу, что в Линуксе разницы между этими двумя подходами совсем нет. Это если не заниматься экзотикой типа AIO, который один фиг не работает.

KP>Как же у вас там все печально
KP>Эту проблему, в году так 2008 грозились вот-вот решить.
Пробовали, для сетей это не имеет большого смысла. Сейчас основной пользователь AIO — это базы данных, которые хотят делать кучу операций с дисковыми массивами.
Sapienti sat!
Re[13]: Что посоветуете как аналог С++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 19.06.13 19:16
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Пробовали, для сетей это не имеет большого смысла. Сейчас основной пользователь AIO — это базы данных, которые хотят делать кучу операций с дисковыми массивами.


Вообще-то, смысл есть, в случае написания сервера, как минимум. С учетом того, что ты писал клиента, особого смысла в использовании асинхронного IO нет, тут я согласен.
Re[17]: Что посоветуете как аналог С++
От: MTD https://github.com/mtrempoltsev
Дата: 19.06.13 19:17
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>А стоит сказать это в форуме С++, минусов будет на три страницы.


Откуда такая уверенность?
Re[9]: Что посоветуете как аналог С++
От: MTD https://github.com/mtrempoltsev
Дата: 19.06.13 19:19
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Почти все десктопные приложения довольно древние, разработаны в году 2005 и ранее.

G>А вот приложения для w8 по большей части .NET (WinRT) и JavaScript.

Ну раз так, то уверен, будет не сложно назвать хотя бы десяток популярных десктопных приложений на .Net? Прошу.
Re[11]: Что посоветуете как аналог С++
От: MTD https://github.com/mtrempoltsev
Дата: 19.06.13 19:21
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Я вот оптимизировал C# код, который получал данные от железки постоянно, проводил небольшие расчеты и складывал в базу.

G>Оптимизации по памяти довольно банальные — убрать лишние аллокации, которые возникают, например, из-за замыканий.
G>Оптимизация производительности — использование правильных структур данных, особенно с учетом многопоточности.
G>Но самая главная оптимизация, которая позволила приложению нагружать процессор на 10% при 100 пакетах в секунду — все общение в внешним миром было сделано асинхронным.

Для дотнетчиков оказывается обработать 100 пакетов в секунду достижение Снимаю шляпу
Re[11]: Что посоветуете как аналог С++
От: MTD https://github.com/mtrempoltsev
Дата: 19.06.13 19:25
Оценка:
Здравствуйте, IT, Вы писали:

KP>>Ну разве что только те, кто так и не открыл для себя shared_ptr и unique_ptr


IT>И сколько ещё всяких разных подпорок и затычек нужно для себя открыть?


Почему ты называешь часть языка подпорками? А цикл for — подпорка, а if?
Re[9]: Что посоветуете как аналог С++
От: MTD https://github.com/mtrempoltsev
Дата: 19.06.13 19:27
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А вот для энергопотребления и perceived performance нужно правильно делать ожидания, а не быстрые вычисления, что на C++ непросто.


Это ты о чем вообще? Сказать ОС, что не будить процесс до наступления некоего события одной функцией это сложность?
Re[5]: Что посоветуете как аналог С++
От: roro  
Дата: 19.06.13 20:19
Оценка:
Здравствуйте, Mystic, Вы писали:

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


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


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


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


G>>>>>Хочу поиграться с чем-нибудь, чтобы компилилось сразу в native код. Аналог C++'са, но не слишком экзотическое, малоизвестное или вымирающее. На ум приходит только D и Rust. Что порекомендуете?


R>>>>Аналогов С++ имхо нет.


M>>>Чем Ada не вариант? Если брать стандарт 2012 года? Или ее диалект SPARK?


R>>С++ золотой молоток под все виды задач, бешеная производительность и лихая езда по памяти.


R>>Ада, насколько знаю, полная противоположность — медленная безопасная езда в космосе.


M>Ada компилируется в машинный код. Производительность вполне сопоставимая с С++. Если брать стандарт 2012, то за счет предусловий и постусловий может быть доказана exception free для выхода индекса за пределы диапазона, выхода за пределы типа, деления на нуль, численного переполнения. В целом строгость языка дает компилятору куда больше возможностей понять, что происходит к коде, где можно оптимизировать, а где нет.


M>Получить лихую езду по памяти в Ada вполне возможно, только это более многословно. Во-первых, при использовании указателя надо использовать атрибут Unchecked_Access. И еще надо при помощи pragma Convention попросить компилятор сделать указатель C-совместимым. Так же можно использовать System.Address + System.Address_To_Access_Conversions(Node). Получается куча "мамой клянусь" в тексте.


Вы меня заинтриговали.
Поставил себе GPS2013, примеры в нем какие-то странные. demo/matrix_handling строки матрицы выделяет на куче, причем каждую строку по отдельности через calloc, и все это происходит в файле matrix.c

Где бы посмотреть эталонные реализации matrix-vector, KD-tree, ray-intersection, желательно чистые без c/c++ ?
Re[18]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.06.13 20:25
Оценка:
Здравствуйте, MTD, Вы писали:


MTD>Откуда такая уверенность?


Да как бы уже проходили
Re[12]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.06.13 20:33
Оценка: -1 :)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>В числодробилках такие вещи это не основное, а так — минимально необходимые требования чтобы конкурентоспособным.

EP>В большинстве же приложений — это то, во что упирается производительность. А это не только скорость, но и энергоэффективность, и цена железа.

Большинство оно сильно разное. И если уж совсем про большинство говорить, то проблемы точно не с производительность.

EP>Как пример — эти аллокации вылезают по всему коду, при простейших абстракциях — просадка 16x на ровном месте.


Такой код в своём уме никто не пишет, кроме вчерашних плюсовиков, которые не знают как устроена память.

EP>Также аллокации ухудшают локальность, что является дополнительной проблемой.

EP>Чтобы бороться с ними, нужно от многого отказываться и работать против языка — этим редко кто занимается, ибо проще взять более подходящий инструмент.

С такими проблемами как ты показал, не надо бороться против языка, наоборот, его надо интенсивно использовать.

EP>

EP>Alexander Stepanov:
EP>For many years, I tried to achieve relative efficiency in more advanced languages (e.g., Ada and Scheme) but failed. My generic versions of even simple algorithms were not able to compete with built-in primitives. But in C++ I was finally able to not only accomplish relative efficiency but come very close to the more ambitious goal of absolute efficiency. To verify this, I spent countless hours looking at the assembly code generated by different compilers on different architectures.

EP>

Это ни о чем. Если производительность понимать исключительно как такты процессора, то еще можно чего то выдумывать. А если скажем сюда внести работу с диском, базой или сетью, все поворачивается ровно наоборот — С++ не в состоянии обеспечить перформанс, например потому что тяжело контролировать асинхронные операции. Всё, до свидания.

I>>Почему то самые критичные куски кода пишутся практически на С или подобным образом.


EP>Это распространённый миф


Это факты.

I>>Это все басни.


EP>Это реальный опыт крупного проекта


Это частный случай. Почему то плюсовики имеют обыкновение яростно отрицать опыт других проектов
Re[6]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.06.13 20:34
Оценка: +1 :)
Здравствуйте, Mna, Вы писали:

Mna>Что это за порочные техники такие?


Mna>Особенно интересно узнать что сотворит переименование метода? там, что, часть метода в #define написана?


Разумеется. Есть целая куча библиотек, которые используют такой подход.
Re[18]: Что посоветуете как аналог С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.06.13 20:36
Оценка: +1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>shared_ptr хоть и полезен, но сильно overused.

EP>Многие его используют абсолютно ни к месту — где достаточно unique_ptr, а где-то вообще никакой smart pointer не нужен.

Опаньки, что же выходит, сурьёзные сиплюсники оказывается не умеют указатели использовать ?

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