Re[19]: фреймворки на C++
От: lpd Черногория  
Дата: 06.09.15 15:47
Оценка:
Здравствуйте, Ops, Вы писали:

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


lpd>>Слышал но не видел, что у Java удобные системы сборки. В любом случае make несколько стар.

Ops>Так что с легаси-то делать?

Главное перевести библиотеки для постепенного перевода проектов. А make можно продолжать поддерживать, как и текущий stl.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re[20]: так все же gcc или clang компилирует этот код правильно?
От: 11molniev  
Дата: 06.09.15 15:56
Оценка:
Здравствуйте, alex_public, Вы писали:

1>>Собственно на этом можно заканчивать...

_>Ну т.е. в итоге так и записываем: лямбды в C# не сравнимо слабее по функциональности C++ реализации.
Ага. Лямбды в C# не позволяют получить разный результат на выходе программы в зависимости от компилятора.
Ты кстати так и не смог объяснить что должно быть на входе, что на выходе. Код ради кода.

_>Stop world шёл у меня отдельным пунктом (недетерминированные задержки). А неэффективность появляется в других местах: повышенная косвенность (это критично для современных процессоров, т.к. данные начинают идти не из кэша), невозможность нормальной работы с указателями (т.е. недоступны самые эффективные техники типа арифметики указателей и SIMD) и т.д. и т.п.

JIT убивает повышенную косвенность. C# no safe нормально работает с сырыми указателями, адресной арифметикой и неуправляемой памятью. Не говоря о том, что часть этих вещей работает и сама по себе через JIT. То, что языки с управляемой памятью и JIT имеют свои проблемы ну никак не отменяет того, что ты привел крайне неудачный пример, в котором они незаметны.
Пойми я же ничего не имею против, того что C#/Java не в меру жрут память и могут подтормаживать, но блин, ты привел именно тот случай когда этого не будет. Вот и всё.

_>>>Как на Java/C# получить автоматическое закрытие всех соединений сразу после удаления массива? На C++ это будет просто закрытие соединение в деструкторе объекта обёртки.

1>>На Java/C# это будет просто закрытие соединений в деструкторе объекта обертки? Я вообще потому и прошу пример кода, что в упор не вижу разницы.
_>Ну так а в какой момент будет вызван этот самый деструктор? )))
Если под удалением массива ты имеешь в виду область видимости, то в момент выхода из using.
Если динамическое управление, то IDisposable, и в терминах C# не деструктор, а финализатор.
Re[15]: фреймворки на C++
От: Stanislav V. Zudin Россия  
Дата: 06.09.15 16:15
Оценка:
Здравствуйте, Ops, Вы писали:

SVZ>>Да, есть нагруженный софт. К нему и требования не такие, как к ERP.

Ops>Угу. ERP — это электронное перекладывание бумажек, и это далеко не всегда основное занятие бизнеса.

Зато очень распространенное и там Шарп/Ява очень уместны.

SVZ>>Дабы не скатываться в офтопик расскажи лучше, выиграет ли этот софт, если С++, по мысли ТС, "прокачать" до Явы — навертеть стандартную либу, расширить язык (непонятно, правда, в какую сторону).

Ops>Либу — только за, при условии низкой связности модулей. 100500 велосипедов, раскиданных по разным крупным библиотекам, реально задалбывают, и часто вынуждают писать свои велосипеды под проект. Но тут другая сложность, в отличие от явы с дотнетом, здесь мы имеем неповоротливый комитет и кучу формалистики, для подобной библиотеки такой подход нежизнеспособен. Да, есть буст, который развивается по гораздо лучшей модели, но там уже начинается коллективное безответственное с поддержкой некоторых библиотек. Ну и до сих пор слышу про его категорическое неприятие и запрет в некоторых проектах, из которых процент аргументированных в окрестностях 0.

С библиотекой тут получается интересное. С одной стороны хочется иметь всё "из коробки", а с другой стороны всегда будет ситуация, когда вроде бы инструмент есть, а по каким-то критериям не подходит. Вроде бы и надо велосипед писать, а западло — есть же "стандартный"
Сейчас проще — либо буст, либо велосипед (свой или чужой)

С запретом Буста я сталкивался в двух проектах, оба были связаны с кривыми компиляторами С++ на специфических платформах (HP-UX, z/OS). Там не то что буст, стандартную-то либу можно было использовать с оглядкой.

SVZ>>Моё ИМХО — нет, не выиграет. Только инструмент (С++) будет испорчен.

Ops>С чего вдруг он будет испорчен? При всех его минусах, библиотекой с ним ничего не сделаешь.

Ну библиотекой, наверное, не испортишь. В конце концов никто не заставляет использовать только стандартную библиотеку.
А вот если попытаться впихнуть в язык что-то невпихуемое, то запросто.
_____________________
С уважением,
Stanislav V. Zudin
Re[16]: фреймворки на C++
От: Ops Россия  
Дата: 06.09.15 17:13
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>С библиотекой тут получается интересное. С одной стороны хочется иметь всё "из коробки", а с другой стороны всегда будет ситуация, когда вроде бы инструмент есть, а по каким-то критериям не подходит. Вроде бы и надо велосипед писать, а западло — есть же "стандартный"

SVZ>Сейчас проще — либо буст, либо велосипед (свой или чужой)
Ну так и со стандартной библиотекой так же, она тоже не всегда подходит, но в большинстве случаев годится, при этом дает хорошую переносимость и единообразность там, где не надо выжимать такты или делать что-то специфичное. Ничего не мешает ее расширить исходя из такого подхода, сразу намного легче станет. Причем это делается, добавляют библиотеки из того же буста. Только вот очень медленно, и при этом развитие включенных в стандарт библиотек замораживается.

SVZ>С запретом Буста я сталкивался в двух проектах, оба были связаны с кривыми компиляторами С++ на специфических платформах (HP-UX, z/OS). Там не то что буст, стандартную-то либу можно было использовать с оглядкой.

Ну вот даже на форуме часто пишут "буст не предлагать", в т.ч. для распространенных платформ. Почему-то многие его воспринимают как что-то монолитное, исключительно на многоэтажных шаблонах, вдобавок считают, что и для использования придется их писать. А ведь и с твоими компиляторами наверняка можно было что-то использовать практически искаропки.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[21]: так все же gcc или clang компилирует этот код правильно?
От: alex_public  
Дата: 06.09.15 17:28
Оценка:
Здравствуйте, 11molniev, Вы писали:

_>>Ну т.е. в итоге так и записываем: лямбды в C# не сравнимо слабее по функциональности C++ реализации.

1>Ага. Лямбды в C# не позволяют получить разный результат на выходе программы в зависимости от компилятора.
1>Ты кстати так и не смог объяснить что должно быть на входе, что на выходе. Код ради кода.

Данный нюанс не имеет никакого отношения к лямбдам, а является всего лишь следствием особенностей данного конкретного кода. Если есть желание, то можем и его обсудить. Для начала начнём с вопроса о том, в каких языках с наличием функции map (или аналога) в стандарте закреплена очерёдность обхода элементов. Потом можем обсудить особенности использования нечистых функций (типа вывода на консоль) в функциях типа map и т.д. и т.п. Но к лямбдам это не будет иметь никакого отношения — всё тоже самое касается и обычных функций, причём в любых языках.

_>>Stop world шёл у меня отдельным пунктом (недетерминированные задержки). А неэффективность появляется в других местах: повышенная косвенность (это критично для современных процессоров, т.к. данные начинают идти не из кэша), невозможность нормальной работы с указателями (т.е. недоступны самые эффективные техники типа арифметики указателей и SIMD) и т.д. и т.п.

1>JIT убивает повышенную косвенность. C# no safe нормально работает с сырыми указателями, адресной арифметикой и неуправляемой памятью. Не говоря о том, что часть этих вещей работает и сама по себе через JIT. То, что языки с управляемой памятью и JIT имеют свои проблемы ну никак не отменяет того, что ты привел крайне неудачный пример, в котором они незаметны.

Да, да, про эффективность jit оптимизатора C# мы весьма наслышаны: http://rsdn.ru/forum/philosophy/6117201.1
Автор: alex_public
Дата: 18.07.15


1>Пойми я же ничего не имею против, того что C#/Java не в меру жрут память и могут подтормаживать, но блин, ты привел именно тот случай когда этого не будет. Вот и всё.


Так весь фокус в том, что мы не можем (в Java/C#) использовать для данного нюанса сборщик мусора, а для всего остального что-то другое, более эффективное. Т.е. для того, чтобы у нас появилась возможность автоматического решения в данном нюансе, мы автоматически накладываем ограничение по тормозам вообще на всё приложение.

_>>Ну так а в какой момент будет вызван этот самый деструктор? )))

1>Если под удалением массива ты имеешь в виду область видимости, то в момент выхода из using.
1>Если динамическое управление, то IDisposable, и в терминах C# не деструктор, а финализатор.

Вот про using и IDisposable речь и идёт — это и есть рукопашный код в стиле C.
Re[20]: так все же gcc или clang компилирует этот код правильно?
От: Mamut Швеция http://dmitriid.com
Дата: 06.09.15 18:12
Оценка: +2 -2
1>>Собственно на этом можно заканчивать...
_>Ну т.е. в итоге так и записываем: лямбды в C# не сравнимо слабее по функциональности C++ реализации.

скорее, в итоге записываем: якобы мегакрутые фичи в С++ настолько круты, что компиляторы даже одинаково скомпилировать их не могут.


dmitriid.comGitHubLinkedIn
Re[2]: Это шутка такая?!
От: Wolverrum Ниоткуда  
Дата: 07.09.15 20:47
Оценка:
Здравствуйте, Mystic, Вы писали:

Че за бред?

M>Qt vs Spring


Пункты сравнения повергают то ли в уныние (Better than node.js: yes/no) то ли в исступление (Induces erection? Spring — YES!)
Re: фреймворки на C++
От: smeeld  
Дата: 07.09.15 20:57
Оценка:
Здравствуйте, lpd, Вы писали:

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


Вот с этим явовским "корпоративные приложения", можете оставаться в яве по уши. На С++ можно писать
любые приложения, решающие любые задачи. Хоть корпоративными их можно назвать хоть некорпоративными.
В чём вообще проблема? Не только на C++, хоть на Lisp написать можно что угодно, хоть корпоративное хоть
некорпоративное. А если для любого чиха прогеру обязательно нужен набор функций с длиннющими названиями, корпоративными,
то это технология деградации, а не технология развития.
Re: фреймворки на C++
От: Zenden Россия  
Дата: 09.09.15 15:32
Оценка:
Здравствуйте, lpd, Вы писали:

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


Главное, не на чем писать, а что.
Если вы пишете скучную корпоративную хрень, то лучшее ее вообще не писать, ни на java, ни на C++
Re[2]: фреймворки на C++
От: wildwind Россия  
Дата: 09.09.15 20:24
Оценка: +1
Здравствуйте, Zenden, Вы писали:

Z> Если вы пишете скучную корпоративную хрень, то лучшее ее вообще не писать, ни на java, ни на C++


Я бы даже сократил.
Hardware eventually fails. Software eventually works. ::: avalon/1.0.442
Re[14]: фреймворки на C++
От: AlexRK  
Дата: 15.10.15 18:47
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Начинать сравнивать синтаксис можно после проверки приблизительного равенства функциональности. Можно увидеть аналог на C# для данного http://coliru.stacked-crooked.com/a/ce0de866fa9e05bc простейшего кода с полиморфными лямбдами? ) Как только увижу его, можно будет начать разговор об удобстве синтаксиса...



Где, кому и зачем может потребоваться это лютое говно?
Какие реальные задачи оно решает или может решить?
Re[7]: фреймворки на C++
От: T4r4sB Россия  
Дата: 15.10.15 18:59
Оценка:
Здравствуйте, lpd, Вы писали:

lpd>нужна еще одна стандартная библиотека


Отличная шутка!
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[11]: фреймворки на C++
От: T4r4sB Россия  
Дата: 15.10.15 19:03
Оценка:
Здравствуйте, lpd, Вы писали:

lpd>Если в терминологии wikipedia{C++11}{C++14}:

lpd>lamda-выражения считаю бесполезными — если мне надо вызвать несколько функций, я их вызову без lambda.
lpd>Alternative function syntax — зачем?
lpd>User-defined literals — бесполезно.
lpd>Function return type deduction — ужас
lpd>Variable templates — бесполезно

Ты на С++ писал, как на Си, только с классами, да?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[15]: фреймворки на C++
От: alex_public  
Дата: 15.10.15 19:06
Оценка:
Здравствуйте, AlexRK, Вы писали:

_>>Начинать сравнивать синтаксис можно после проверки приблизительного равенства функциональности. Можно увидеть аналог на C# для данного http://coliru.stacked-crooked.com/a/ce0de866fa9e05bc простейшего кода с полиморфными лямбдами? ) Как только увижу его, можно будет начать разговор об удобстве синтаксиса...

ARK>
ARK>Где, кому и зачем может потребоваться это лютое говно?
ARK>Какие реальные задачи оно решает или может решить?

Это демонстрация возможностей лямбд в C++. Конкретно этот код на практике не нужен. Хотя бы потому, что в стандартную библиотеку уже и так входят готовые кортежи (реализованные не через лямбды). Однако он очень хорошо демонстрирует сами возможности языка, а уж где их применить с пользой, думаю и так очевидно.
Re[2]: насчет C++11/14
От: T4r4sB Россия  
Дата: 15.10.15 19:12
Оценка:
Здравствуйте, alex_public, Вы писали:

_>ОК. Можно для начала показать аналог такого http://coliru.stacked-crooked.com/a/ce0de866fa9e05bc элементарного кода? )


Нефиг делать, как только я пойму, что в нём вообще происходит. А с этим хреново. Пожалуй, этот код демонстрирует недостатки лямбд и вариадиков.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[3]: насчет C++11/14
От: T4r4sB Россия  
Дата: 15.10.15 19:13
Оценка:
Здравствуйте, lpd, Вы писали:

lpd>Возможно, в некоторых случаях ламбды сокращают код. Но любую программу можно написать без них (вроде Тьюринг еще доказывал).


Любишь писать тетрисы на Брейнфаке? Он тоже тьюринг-полон.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[16]: фреймворки на C++
От: T4r4sB Россия  
Дата: 15.10.15 19:21
Оценка:
Здравствуйте, alex_public, Вы писали:

_>1. У нас есть отдельные строки (по гигабайту каждая, для остроты ощущений) и пустой массив строк. Мы хотим положить одну строку в массив. Но чтобы при этом естественно не происходило копирования гигабайта. Ну и само собой при удаление массива все строки в нём должны удаляться.

_> — C: можно наколбасить руками эффективную реализацию
_> — Java/C#: работает автоматически, но не эффективно (сборщик мусора со всеми печальными последствиями из этого)
_> — C++: работает автоматически и эффективно
_> — так какой там язык давно имел эффективное автоматическое решение данной проблемы?

Дельфи?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[18]: так все же gcc или clang компилирует этот код правильно?
От: T4r4sB Россия  
Дата: 15.10.15 19:23
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ааа, ну 15-ая версия. Поддержка полиморфных лямбд у них с 16-ой.


Что такое "полиморфная лямбда"?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[3]: насчет C++11/14
От: alex_public  
Дата: 15.10.15 19:31
Оценка:
Здравствуйте, T4r4sB, Вы писали:

_>>ОК. Можно для начала показать аналог такого http://coliru.stacked-crooked.com/a/ce0de866fa9e05bc элементарного кода? )

TB>Нефиг делать, как только я пойму, что в нём вообще происходит. А с этим хреново. Пожалуй, этот код демонстрирует недостатки лямбд и вариадиков.

Там создают полноценные кортежи и функции работы с ними (map и т.п.) из лямбд.

С удовольствием посмотрю на аналогичную реализацию на Java/C#. Особенно с учётом того, что в .net вообще не осилили нормальные кортежи (ограничение на 8 элементов — это же смешно) даже просто классами, а не лямбдами.
Re[19]: так все же gcc или clang компилирует этот код правильно?
От: Evgeny.Panasyuk Россия  
Дата: 15.10.15 19:32
Оценка:
Здравствуйте, T4r4sB, Вы писали:

_>>Ааа, ну 15-ая версия. Поддержка полиморфных лямбд у них с 16-ой.

TB>Что такое "полиморфная лямбда"?

Лямбда с auto в качестве одного из типов параметров, которая даёт соответствующий объект с шаблонным operator().
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.