Здравствуйте, Skorodum, Вы писали:
S>А тут есть гарантия, что не будет исключения или чего-то подобного между первой и второй строкой?
Есть — в Go нет исключений как таковых, но есть паники. Паника может возникнуть в `createFile`, либо уже в `writeFile`, но не между ними, так как там просто нечему паниковать.
Здравствуйте, kaa.python, Вы писали:
KP>Есть — в Go нет исключений как таковых, но есть паники. Паника может возникнуть в `createFile`, либо уже в `writeFile`, но не между ними, так как там просто нечему паниковать.
А другой поток?
Здравствуйте, netch80, Вы писали:
N>>>3. Вместо того, чтобы сначала плодить проблемы работы с памятью, а потом их ловить — причём может оказаться, что диверсант сидит в чужом проприетарном коде, и ты фиг запинаешь его авторов исправить свою ошибку — можно изначально использовать инструмент, у которого этих проблем нет. N>>>Собственно на этом выезжают managed среды, начиная с BASIC и Java: какой бы говнокод на них не писался и не импортировался, он не доведёт обстановку до совсем нерабочего состояния, если не использовать спец. средства, которые легко детектируются. А в unmanaged — наоборот. I>>Ну, как бэ, как человек который искал и устранял утечки памяти в JS и C#, могу сказать что в С++ с этим попроще(именно нахождение),
N>О каких утечках памяти речь в JS и C#? В managed слое, или в переходном к unmanaged?
В кроссылках, когда один объект ссылается на другой, и при удалении GC это оставляет жить, в итоге ПО съедало всю память и падало.
I>> хотя и опыта в С++ у меня намного больше, а последнии годы я вообще не сталкивался с такой проблемой как утечка памяти в С++. N>Вам, наверно, везёт, что не приходится использовать посторонние библиотеки?
Вот перечень стороних:
rapidjson, boost, qt5, xerces, xalan, xsec, sqlite, odb, openssl, curl, protobuf, ncreport, zlib, soci, librsync
Здравствуйте, bc_kaya, Вы писали:
_>Хотел бы поинтересоваться у знающих людей, за что весь мир недолюбливает плюсы.
Как фанат С++, заявляю, что это все из-за нынешних выпускников колледжей, которые знают алгоритмы, но которым пофигу как там все работает на низком уровне.
Короче, неосиляторы. Поэтому засилье managed языков и тонны г-на выливающихся на годные языки вроде С++.
Теперь объективное мнение:
1. Отсутствие рефлексии, и, как следствие — dependency injection. То же с моками в юнит тестах. gtest позволяет их делать для шаблонов или абстрактных классов, но после Mockito это как ВАЗ после BMW
2. Сюда же — медленная скорость разработки качественного кода в сравнении с той же Java и больше возможностей грохнуть программу.
3. Метапрограммирование. Сейчас придут спецы, которые скажут, что это просто. Да нифига, это самая сложная часть С++ (хотя и самая интересная, по мне).
Но — с другой стороны, спрос на С++ есть в узких нишах (напр. в финансах), и, по-моему, спрос на хороших специалистов значительно превышает предложение.
Здравствуйте, bc_kaya, Вы писали:
_>Хотел бы поинтересоваться у знающих людей, за что весь мир недолюбливает плюсы. Конкретно у меня данный язык вызывает симпатию (возможно потому, что это мой самый первый более менее освоенный язык программирования); _>Поделитесь впечатлением и опытом программирования с использованием языка С++?
Здравствуйте, BacCM, Вы писали: BCM>Одна из моих любимых задачек про плюсы для новичков в этом деле.
use warnings, luke
g++ -Wall -Wextra -Wpedantic -Werror -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wrestrict -Wnull-dereference -Wold-style-cast -Wuseless-cast -Wdouble-promotion -Wshadow -Wformat=2 -Wconversion -Wsign-conversion -Wfloat-equal -Wcast-qual -Winit-self -Wpointer-arith -Wswitch -Wswitch-enum -Woverloaded-virtual -Wundef ./main.cpp
./main.cpp: In function ‘int main()’:
./main.cpp:8:13: error: right operand of comma operator has no effect [-Werror=unused-value]
a = 1,2,3,4,a = 5,6,7;
^
./main.cpp:8:15: error: right operand of comma operator has no effect [-Werror=unused-value]
a = 1,2,3,4,a = 5,6,7;
^
./main.cpp:8:21: error: right operand of comma operator has no effect [-Werror=unused-value]
a = 1,2,3,4,a = 5,6,7;
^
./main.cpp:8:25: error: right operand of comma operator has no effect [-Werror=unused-value]
a = 1,2,3,4,a = 5,6,7;
^
./main.cpp:8:26: error: right operand of comma operator has no effect [-Werror=unused-value]
a = 1,2,3,4,a = 5,6,7;
^
./main.cpp:11:12: error: left operand of comma operator has no effect [-Werror=unused-value]
a = (1,2,3,4),a = (5,6,7);
^
./main.cpp:11:14: error: right operand of comma operator has no effect [-Werror=unused-value]
a = (1,2,3,4),a = (5,6,7);
^
./main.cpp:11:16: error: right operand of comma operator has no effect [-Werror=unused-value]
a = (1,2,3,4),a = (5,6,7);
^
./main.cpp:11:26: error: left operand of comma operator has no effect [-Werror=unused-value]
a = (1,2,3,4),a = (5,6,7);
^
./main.cpp:11:28: error: right operand of comma operator has no effect [-Werror=unused-value]
a = (1,2,3,4),a = (5,6,7);
^
./main.cpp:14:12: error: left operand of comma operator has no effect [-Werror=unused-value]
a = (1,2,3,4,a = 5,6,7);
^
./main.cpp:14:14: error: right operand of comma operator has no effect [-Werror=unused-value]
a = (1,2,3,4,a = 5,6,7);
^
./main.cpp:14:16: error: right operand of comma operator has no effect [-Werror=unused-value]
a = (1,2,3,4,a = 5,6,7);
^
./main.cpp:14:22: error: right operand of comma operator has no effect [-Werror=unused-value]
a = (1,2,3,4,a = 5,6,7);
^
./main.cpp:14:26: error: right operand of comma operator has no effect [-Werror=unused-value]
a = (1,2,3,4,a = 5,6,7);
^
./main.cpp:17:9: error: left operand of comma operator has no effect [-Werror=unused-value]
(a, b) = 100, 200;
^
./main.cpp:17:22: error: right operand of comma operator has no effect [-Werror=unused-value]
(a, b) = 100, 200;
^
./main.cpp:20:9: error: left operand of comma operator has no effect [-Werror=unused-value]
(a, b) = (100, 200);
^
./main.cpp:20:20: error: left operand of comma operator has no effect [-Werror=unused-value]
(a, b) = (100, 200);
^~~
./main.cpp:24:36: error: left operand of comma operator has no effect [-Werror=unused-value]
std::cout << "v[1,1]= " << v[1,1] << std::endl;
The problem in this community is:
The more scary a proposal is — the more people like it.
And even worse they always find at least one useful application.
Здравствуйте, wander, Вы писали:
N>>Те, кого стоит читать — пишут именно чтобы улучшить конкретный или общий результат. Ну, на 90%. Этого достаточно, чтобы определить себе рамки и методы для конструктивного общения. W>Чтобы понять, кого стоит читать, а кого нет, нужно сперва хорошо в это окунуться. W>Вот вы, видимо, можете понять. И я могу. А кто-то нет. W>Например, прав ли Торвальдс в своей оценке? Я уверен, много кто согласится, множество доказательств приведет. А кто-то другой, возможно тоже, но уже в защиту. Собственно из-за эмоциональности суждений ценность самой критики теряется, даже если она здравая. А если читать аргументы оправдывающие, или оспаривающие его мнение, то без собственного опыта так и не понять кто тут прав. В итоге проще не разбираться, а довериться тому, у кого для "вас" авторитет выше.
N>>Их можно фильтровать — эмоциональные так точно, бенчмарки — сложнее, но тоже получается, когда надо. N>>А эмоциональный фактор тоже важен — когда он происходит из "ё500-й раз наткнулся на эту дебильную говнофичу". W>Я не привык так реагировать на неодушевленное и вряд ли тут мы с вами придем к соглашению.
Ну, завидую, если так. Я вообще-то в какой-то мере не о себе говорил, а о коллегах, но всё равно я считаю, что эмоциональная реакция данного типа не просто оправдана, но ещё и уместна и полезна.
W>>>Есть такая книга, Inside The C++ Object Model. Она старая и во многом неактуальная, но там есть одна интересная вещь.
N>>...когда гегелевско-марксистское "переход количества в качество" реализуется в банальнейшем сценарии "говно вода поднялась выше рта". W>Очень сложно здесь рассуждать объективно, т.к. очень сильно влияет субъективный опыт. W>Например я ни про один из инструментов, которыми я пользовался, не смог бы так сказать.
Завидую(2). Я на нескольких таки обжигался до такой степени, чтобы дальше отказываться от них по максимуму.
W>У вас опыт иной, и вы можете. Значит и тут мы с вами никогда не сойдемся.
Но понять-то меня вполне можете? Не обязательно же принимать только то, что прочувствовал на собственной шкуре.
Здравствуйте, Igore, Вы писали:
N>>>>Собственно на этом выезжают managed среды, начиная с BASIC и Java: какой бы говнокод на них не писался и не импортировался, он не доведёт обстановку до совсем нерабочего состояния, если не использовать спец. средства, которые легко детектируются. А в unmanaged — наоборот. I>>>Ну, как бэ, как человек который искал и устранял утечки памяти в JS и C#, могу сказать что в С++ с этим попроще(именно нахождение), N>>О каких утечках памяти речь в JS и C#? В managed слое, или в переходном к unmanaged? I>В кроссылках, когда один объект ссылается на другой, и при удалении GC это оставляет жить, в итоге ПО съедало всю память и падало.
Звучит как тяжёлая недоработка конкретных рантаймов.
Потому что если он упирается в жёсткий предел памяти, он обязан вызвать полный GC. Но желательно делать инкрементальный и раньше.
Мне в этом смысле особенно нравится, как сделано в Lua. По умолчанию — превысили двойной размер после прошлой сборки — запускаем новую. Тяжёлого разрастания без причин там в итоге не бывает, есть чёткое представление, на сколько делать запас.
В ранних Java, да, было с этим хуже, там обычно пока операционка не скажет "фиг тебе, а не страничка", не собиралось. Но и то исправили достаточно давно.
Я вначале подумал, что вы про случай, когда на какое-то уже ненужное дерево объектов висит забытая ссылка из одного из тех, что должны сейчас жить. Такие вещи, да, диагностируются тяжело, если нет возможности у системы спросить и проитерировать множество вообще всех объектов.
Не знаю про типовые реализации JS, но в дотнете, вроде бы, такое есть везде?
I>>> хотя и опыта в С++ у меня намного больше, а последнии годы я вообще не сталкивался с такой проблемой как утечка памяти в С++. N>>Вам, наверно, везёт, что не приходится использовать посторонние библиотеки? I>Вот перечень стороних: I>rapidjson, boost, qt5, xerces, xalan, xsec, sqlite, odb, openssl, curl, protobuf, ncreport, zlib, soci, librsync
Полный список не знаю, и не могу сказать, кто из них на самом деле покемон, но в пределах моих знаний тут нет проприетарных либ всяких тематических коннекторов, в которых больше всего подобных граблей (на OCI, кажется, только ленивый не ругался).
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, BacCM, Вы писали:
BCM>>Одна из моих любимых задачек про плюсы для новичков в этом деле. BCM>> . . .
R>Столько строк кода только лишь для того, чтобы проверить знание приоритета оператора запятая? Или это одновременно и тест на внимательность?
Это не тест на знание, просто иногда показать и посмотреть на реакцию. Код писался не для собеседований, а так посмотреть какую еще можно дичь наваять, чтобы было похоже на правильный код.
Здравствуйте, BacCM, Вы писали:
BCM>Это не тест на знание, просто иногда показать и посмотреть на реакцию. Код писался не для собеседований, а так посмотреть какую еще можно дичь наваять, чтобы было похоже на правильный код.
У меня в этом плане любимая вот эта, что выведет программа:
Здравствуйте, rg45, Вы писали:
N>>Передёргиваете. Не всё "на автомате", но сильно больше, чем у C++, легче контролируемо и диагностируемо. И переусложнённость последнего это фактор, независимый от его unmanaged характера. R>Не передергиваю, а подчеркиваю, что не настолько сильно, как многие хотят это показать. У C++ есть свои преимущества, причем весомые.
Так именно веса аргументов это та вещь, которая достаточно индивидуальна.
Вам преимущества кажутся весомее недостатков, а кому-то настолько наоборот, что он начинает публично плеваться.
N>>Если писать, как seen on national TV рекомендовано в книге, то работает без вреда. R>Вот именно, расхлябанность, присущая многим C# разработчикам, проистекает из базовых рекоммендаций. Подумаешь, беда — Dispose вызвался не один раз, а три. А можно вообще не вызывать — памперс все впитает. Во всем вот это вот "срала-мазала", тьфу, терпеть этого не могу.
Понятно, но "других людей для вас у меня нет", как обычно.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, BacCM, Вы писали:
BCM>>Это не тест на знание, просто иногда показать и посмотреть на реакцию. Код писался не для собеседований, а так посмотреть какую еще можно дичь наваять, чтобы было похоже на правильный код.
R>У меня в этом плане любимая вот эта, что выведет программа:
R>https://ideone.com/w3ZXdB
R>