LINUX.ORG.RU
ФорумTalks

Золотая середина: Производительность vs Стабильность. Костыли vs Ынтерпрайз. Си vs Ява.

 , , ,


0

4

Давно наблюдаю за срачами в этом разделе, но так и не смог понять, есть ли объективные ответы на часто задаваемые вопросы.

А именно: где золотая середина при разработке ПО?

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

Типичный вариант: Си/плюсы сегфолтятся и текут на больших объёмах памяти, вечные проблемы с указателями, переполнениями и полным отсутствием встроенных проверок, что отрицательно сказывается на стабильности и безопасности. Также могут быть случаи, когда программа после переполнения или неправильного преобразования типов (например, когда типы связывают через указатели: типичный пример: попытка работать с битами int'а на big и little endian) продолжит работать, запорет всю базу (или что-нибудь ещё), причём проблема всплывёт только через несколько месяцев, поэтому откатиться не получится. Бывали подобные случае с базами данных, которые могли скрытно повреждаться.
VS
Ява выжирает тонны памяти и тормозит, зато всё работает стабильно, почти все преобразования и вычисления проверяются, нет проблем с переносом на другие архитектуры и ОС, нет указателей, кодить проще, очень любима бизнесом за предсказуемость.


Или вот ещё:
Поставим много серверов, наймём макак, будем использовать микросервисы на php, размазанные по огромному кластеру, всё будет тормозить, зато очень быстро выкатим продукт, обойдём конкурентов, а сотрудников можно менять хоть каждый день из-за разбиения на «модули». Первенство окупит издержки на железо.
vs
Будем писать сразу на плюсах, пару раз запорем продакшен из-за каких-нибудь неочевидных моментов, будем делать долго, зато на выходе всё будет кондомно и оооочень бысто (хватит буквально одного-двух серверов). Ну и всё приковано к конкретным людям: если они уйдут, то бизнесу конец.

Есть ли какая-нибудь золотая середина в этих вечных спорах? Или её нет и быть не может как в споре либералов и исламистов?

Перемещено tailgunner из development



Последнее исправление: kerenkonin (всего исправлений: 4)
Ответ на: комментарий от kerenkonin

C++ может давать overhead от более высокой сложности реализации некоторых многопоточных алгоритов, так как даже в стандартной библиотеке Java больше возможностей для этого по сравнению с C++ или Boost. Плюс были случаи когда лишние копии shared_ptr приводили в проблемах с многопоточностью.

vertexua ★★★★★
()
Ответ на: комментарий от ixrws

Ну я не соглашусь: вероятность выстрелить себе в ногу указателем куда выше, чем кривым классом на яве.

kerenkonin
() автор топика
Ответ на: комментарий от Jetty

И чем он помешает? Бинари Rust по объему ~= бинарям Си, потребление памяти тоже. Другое дело, что для конкретных архитектур DSP может не быть LLVM-бэкенда, но машинное зрение != алгоритмам на DSP.

tailgunner ★★★★★
()
Ответ на: комментарий от Gvidon

Ты много знаешь настолько высококвалифицированных сишников, что у них никогда не бывает сегфолтов? Я вот ни одного что-то не видел.

Си без сегфолтов как россия без стабильности, лол.

kerenkonin
() автор топика
Ответ на: комментарий от CatsCantFly

Внезапно, большая часть десктопного софта. А много у тебя его на java?

Увы. :( Заметил, что на лине весь единственный софт десктопный, который хоть как-то работает - всё Qt. GTKX - просто жесть эпическая кривая, тормозная и багучая.

kerenkonin
() автор топика
Ответ на: комментарий от invy

Имеет более адекватные дженерики в отличии от жапки и позволяет при необходимости самому управлять памятью.

Чего хорошего то в этом? В ногу можно стрелять?

kerenkonin
() автор топика
Ответ на: комментарий от Gvidon

Справедливости ради, основная проблема жабы для десктопных приложений — невменяемый гуй. На шарпе под винду софта много, и никто особо не страдает.

Есть официальные биндинги от шикарного Qt гуя уже давным-давно. Если их не могут осилить нубы, то это их проблем.

kerenkonin
() автор топика
Ответ на: комментарий от ixrws

Тот же несвоевременный сброс буферов повреждает данные, если не используется вещи вроде транзакций, а где они используются и как много приложений внутри работают с данными полностью транзакционно, а какова должна быть квалификация таких разработчиков?

Достаточная, чтобы понять, что не надо выпендриваться и надо юзать БД.

Простые решения надёжнее, чем быстрее это поймут оверинженеры тем быстрее мы вступим в светлое будущее.

Твои бы слова да прогерам в уши.

kerenkonin
() автор топика
Ответ на: комментарий от invy

На главной посмотри про очередную дырку и переполнение буффера в glibc. Подчеркиваю - очередную.

Про ОЧЕРЕДНОЕ получение прав рута в ведре забыл. Си такие си.

kerenkonin
() автор топика
Ответ на: комментарий от invy

За C++ больше платят ;)

ЛПП: за яву больше платят.

kerenkonin
() автор топика
Ответ на: комментарий от Harald

да так, был тут один такой многократно забаненный регистрант, а ктулху было его первым ником...

И он чемто на меня похож? Я не понял тебя.

kerenkonin
() автор топика
Ответ на: комментарий от tailgunner

что для конкретных архитектур DSP может не быть LLVM-бэкенда

Это проблемы компилятора, а не языка.

kerenkonin
() автор топика
Ответ на: комментарий от vertexua

Этот тред - какая то жесть. Спецолимпиада по нахваливанию своего болота. Инженеры блжад. Надеюсь вам стыдно

Так вот я такое каждый день в Dev наблюдаю.

kerenkonin
() автор топика
Ответ на: комментарий от tailgunner

Не знаю насчет Руста, но что мешает писать софт machine vision на Rust?

Тоже хотел спросить. Уж точно попроще, чем на сях будет.

kerenkonin
() автор топика
Ответ на: комментарий от kerenkonin

Именно поэтому странно слышать сказки про «переписать на Ц», потому что это требует немножко задроцтва с профайлером :)

slackwarrior ★★★★★
()
Ответ на: комментарий от kerenkonin

А почему вообще сегфолты - это проблема? Это не проблема, а запланированная реакция ОС на неправомерный доступ к памяти

Harald ★★★★★
()
Ответ на: комментарий от Harald

Это он и есть. Он на вопрос про ктулху всегда точно таким постом отвечает. Я думаю если поискать, то можно найти другие совпадения. Одинаковые посты - отличительная черта.

Midael ★★★★★
()
Последнее исправление: Midael (всего исправлений: 1)
Ответ на: комментарий от Midael

Ктулху не умеет в полиморфизм, палится первым же тредом :) Вот фрактал чуть дольше шифровался

Harald ★★★★★
()
Ответ на: комментарий от Legioner

При чём тут я? 90% моего софта на Objective C. Но я пользуюсь такой мизерной долей от всего десктопного софта, что эта цифра не значит вообще ничего. Сходи на какой-нибудь hh.ru, почитай вакансии.

Любитель яблок?

kerenkonin
() автор топика
Ответ на: комментарий от kerenkonin

Я отметил в каком, особенно про стабильность. Со свитчами от hp попробуй поработать, у них вебморда на жабе. Я ее загружал раз пять, а видел всего раза два. Угадай куда делись еще три раза.

upcFrost ★★★★★
()
Ответ на: комментарий от vertexua

C++ может давать overhead

А может не давать :)

так как даже в стандартной библиотеке Java больше возможностей для этого по сравнению с C++ или Boost.

а с MPI и OpenMP? чо уж там

slackwarrior ★★★★★
()
Ответ на: комментарий от kerenkonin

Другое дело, что сегфолты - не самая серьезная проблема Си.

Какая же самая?

Молчаливая порча данных.

tailgunner ★★★★★
()
Ответ на: комментарий от kerenkonin

При этом на большинстве задач Java если и жрёт, то память, а не процессор (в сравнение с C++).

Т.е. С++ жрёт проц? Я что-то не понял.

Java жрёт процессор сравнимо с C++. Память будет жрать больше при прочих равных.

Legioner ★★★★★
()
Ответ на: комментарий от kerenkonin

да хотя бы темой топика, несущей месседж «Си говно, жаба рулит», которая красной нитью проходит (гы-гы, как сказанул-то) через все ктулхотреды

Harald ★★★★★
()
Ответ на: комментарий от Harald

да хотя бы темой топика, несущей месседж «Си говно, жаба рулит», которая красной нитью проходит (гы-гы, как сказанул-то) через все ктулхотреды

Я вообще нигде в топике не высказал своё мнение. Только привёл типичные аргументы из Dev.

kerenkonin
() автор топика
Ответ на: комментарий от vertexua

Конечно известно (гугли edmunds.com, salesforce, apex — вотэто вот все — у них куча норота дрочит вприсядку на этот твой хадуп... Хакатоны проводят по «бигдате» — куча проблем которые этими штуками пытаются решить... просто не нуждается в этих штуках: их искусственно натягивают на проблему :))

«OpenMP is based on shared memory and efficient multi-threading...» (с)

«Hadoop is pretty much everything that openMP isn't. Hadoop is strongly biased for Java and against C++ or Fortran. Hadoop doesn't use any shared memory between tasks. Hadoop by itself only allows a very restricted programming model that severely limits communication between tasks in order to allow extreme scalability of program execution.» :)

Но мы говорили про оверхед при параллельных алгоритмах и какие-то невнятные проблемы с указателями :)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Но мы говорили про оверхед при параллельных алгоритмах и какие-то невнятные проблемы с указателями :)

Так давай же, ты же эксперт в С++ и не эксперт в Java. Вот раскажи мне о проблемах с производительностью в С++, так как любой эксперт в чем угодно хорошо знает очень сложно исправляемые недостатки того в чем он разбирается

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

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

Ну для начала фрагментация памяти при частом добавлении/удалении объектов, долгое выделение памяти (т.к. не может заранее у ОС память просить), очень кривая сложная многопоточность.

kerenkonin
() автор топика
Ответ на: комментарий от kerenkonin

очень кривая сложная многопоточность

this

vertexua ★★★★★
()
Ответ на: комментарий от kerenkonin

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

В Java можно резервировать сразу большие блоки. Плюс new работает за O(1) в большинстве случаев

vertexua ★★★★★
()
Ответ на: комментарий от kerenkonin

очень кривая сложная многопоточность.

Вся кривизна - в голове. Никто не мешает сделать примитивы по примеру Occam и использовать их.

tailgunner ★★★★★
()
Ответ на: комментарий от kerenkonin

Вероятность да, если бы мы сравнивали просто одно тоже но в одном случае есть указатели, а в другом случае оно само как-то также рассасывается. Однако в реальности управление памяти остаётся проблемой и требует порой б'ольших усилий в случае gc, чем без него. Посмотрим как у раст дела пойдут.

ixrws ★★★
()
Ответ на: комментарий от ixrws

Однако в реальности управление памяти остаётся проблемой и требует порой б'ольших усилий в случае gc, чем без него

Если программист - дебил и не может сделать в высоконагруженном приложении free, то это его личные проблемы. GC - это помощник по чистке говна, последняя надежда, так сказать. Его наличие не означает, что можно ездить жопой по клавиатуре, а потом в продакшен апрувить буллшит.

kerenkonin
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.