- 1
https://m.reddit.com/r/cpp/comments/4pmlpz/what_the_iso_c_committee_added_to_the_c17_working/
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+2
https://m.reddit.com/r/cpp/comments/4pmlpz/what_the_iso_c_committee_added_to_the_c17_working/
Мне остаётся только спросить:
laMer007 26.06.2016 20:42 # +3
inkanus-gray 26.06.2016 21:11 # +2
Вот это главная новость, ибо крестопитушня нужна только анскиллябрам заедушным.
meinf 26.06.2016 21:14 # 0
пффф
https://ideone.com/pglY9s
auto в шаблонах вроде выглядит нормально
про Forward progress guarantees чет не въехал
С11 радует
roman-kashitsyn 26.06.2016 21:23 # +3
Хех, так и знал, что это проталкивает какой-то гугловый гошник.
> пффф
Не то. Объекты, созданные в init, живут до конца скопа.
meinf 26.06.2016 21:36 # +1
и так постоянно наблюдаю ифы на охулиард строчек через && || а тут и небо и аллаха в этот бедный иф засунуть можно
(а еще, совершенно случайно, я недавно узнал, что в крестах можно использовать кейворды not and or not_eq...)
Antervis 27.06.2016 06:56 # 0
Скажем, для scoped variable старая версия слегка жирная:
Или, например, версия с ранним return'ом:
Превратится в
в общем, имо годнота получается.
wvxvw 27.06.2016 08:38 # +5
Вместо того, чтобы убирать всякую бесполезную херню, ее, наоборот, добавляют, чтобы сделать написание компилятора максимально трудным. И на по-настоящему нужные проверки / оптимизации можно забить, чтобы реализовать еще один вариант написания эквивалентного кода.
Antervis 27.06.2016 11:02 # +1
"Ой всё, три строчки в одной, я заблудился." И похер что можно в стектрейс глянуть.
> а куча точек возврата делает логирование максимально бесполезным.
Есть блядская тьма способов сделать эффективное логирование с кучей точек возврата. А вот способов сделать вложенные на 15 уровней if-ы читабельными - нет.
> чтобы сделать написание компилятора максимально трудным.
Конструкция имеет эквивалентную замену. Расскажи мне, насколько это усложнит компилятор...
> И на по-настоящему нужные проверки / оптимизации можно забить, чтобы реализовать еще один вариант написания эквивалентного кода.
И вообще похер что комитет стандартизации и разработчики компиляторов это разные коллективы с разными задачами
wvxvw 27.06.2016 11:49 # 0
Правильно, лень, т.как занимает время: я его лучше проведу с большей пользой, например, другой баг исправлю.
> Есть блядская тьма способов
Можно хотя бы один пример?
> Расскажи мне, насколько это усложнит компилятор...
1. У нас нет специального правила только на два выражения разделенных ;, его нужно добавить.
2. Это правило нужно специально обработать, т.как оно внезапно становится равносильно блоку, со всемы вытекающими (следить за тем, чтобы переменную не использовали вне блока, например).
Если бы у Си компиляторов был уровень лексической трансформации исходников перед составлением АСТ, то эту проблему можно было бы избежать, но т.как нету...
> И вообще похер что комитет стандартизации и разработчики компиляторов это разные коллективы
Очевидно, это похер комитету по стандартизации, потому что им по всей видимости просто нечем занятся, как придумывать бесполезную херню.
Antervis 27.06.2016 12:13 # 0
Не так уж это долго
> Можно хотя бы один пример?
Возвращаем std::error_code, например
> Это правило нужно специально обработать, т.как оно внезапно становится равносильно блоку, со всемы вытекающими
так или иначе, подобное уже делали и неоднократно
> придумывать бесполезную херню.
имо не бесполезную. Не хочешь - не пользуйся
wvxvw 27.06.2016 13:29 # 0
> Возвращаем std::error_code, например
Как это вообще логировать поможет? Лог, это когда мы записываем какую-то информацию о переменных выполняемой функции. Что мне даст это число, если мне нужно узнать какие значения были в полях нескольких структур с которыми эта функция работала.
Просто у мудаков, которые пишут
Логи выглядят так:
вместо
Antervis 27.06.2016 14:08 # +3
И да, когда "do something with x, y, z" выглядит как:
я говорю "идите все нахер это надо переписать"
wvxvw 27.06.2016 14:32 # +1
Antervis 27.06.2016 15:09 # 0
wvxvw 27.06.2016 15:51 # +1
Задача со звездочкой: решить без бумажки.
Antervis 27.06.2016 16:58 # 0
wvxvw 27.06.2016 17:12 # +1
guestinho 27.06.2016 17:15 # +1
а если нельзя, то не имеет
Antervis 27.06.2016 18:09 # +1
Успешный сценарий возвращает success.
А теперь вопрос на миллион: как ты бы реализовал подобную задачу?
wvxvw 27.06.2016 18:16 # +2
Почему return а не throw - я не знаю, но оставил как было.
Проблема разных типов аргументов решается замыканиями.
Antervis 27.06.2016 18:52 # +1
wvxvw 27.06.2016 19:06 # −1
1. Никто не запрещает переменные захватывать по ссылке.
2. Можно сделать так, чтобы action_fn_t возвращал состояние (StateMonad, да простят меня грешного).
В изначальном коде я не вижу отката, но, опять же, это не сложно реализовать: состояние возвращаемое экшнами содержит в себе ссылку на функцию откатывающую состояние. Тут недавно форсили мое тестовое задание, там это реализовано:
За синтаксис я не уверен, т.как не пишу на крестах, но идея должна быть понятной.
Antervis 27.06.2016 19:16 # +2
wvxvw 27.06.2016 19:29 # −1
gost 27.06.2016 19:34 # +1
Так это ж go!
wvxvw 27.06.2016 19:43 # 0
Antervis 27.06.2016 20:51 # 0
wvxvw 27.06.2016 21:13 # +2
1. Как числа.
2. Как два пальца.
3. Как все гениальное.
Го - простой потому что плохо продуман. Если не умрет на зачаточных стадиях - повторит историю С++: обрастет кучей костылей, нестыкующихся и недоделаных фич.
Его реальная привлекательность порстоена на одной единственной фиче: сорок лет спустя они реализовали идею из книжки Concurrent C. Там тоже не обошлось без лажи, но она там минимальная.
Все остальное в Го задумано и сделано популистами, которые хотели сыграть на надеждах сишников о том как ничего не меняя сделать сишку лучше. Ну и получилось, соответственно, чуть-чуть лучше, но суть та же говнистая осталась.
Есть языки, на которых - чем больше пишешь, тем больше проникаешься. Го - это наоборот, чем больше пишешь, тем больше разочаровываешься.
laMer007 28.06.2016 20:48 # +5
Он продумывался тысячелетиями. Ты просто не умеешь в него играть
roman-kashitsyn 27.06.2016 14:29 # +5
> log(start)
> do something with x, y, z
> log(before return)
"И тут мы бросаем исключение!" ⓒ
https://habrahabr.ru/company/infopulse/blog/279927/#comment_8817929
wvxvw 27.06.2016 14:34 # 0
Проблема в том, что мудаки которы используют "ранний выход" - они ж ленивые, и не пишут логи везде где они нужны, (их же еще и поддерживать потом нужно). И поэтому нужная информация пропадает / устаревает.
Antervis 27.06.2016 15:16 # 0
удовлетворит вашу беспокойную душу. Но с точки зрения скоупа функции, ранний возврат от выброса исключения не отличается ничем
laMer007 27.06.2016 13:19 # +2
> стектрейс глянуть
Компилятора?)))) Ошибка 00000000 в строке 100500 invalid token
wvxvw 27.06.2016 14:39 # 0
Antervis 27.06.2016 15:10 # 0
meinf 27.06.2016 12:43 # 0
а вот такое
> if (int i = doSmth(); i < 0) return i;
выглядит в лучших традициях труЪ сишников
Antervis 27.06.2016 14:10 # 0
if (int i = doSmth(); i < 0) goto before_exit;
guest 28.06.2016 11:41 # 0
if(int i = doSmth()) // всегда работало, i в scope`е If.
return i;
Antervis 28.06.2016 11:51 # 0
guest 28.06.2016 13:24 # −1
> Теперь ее просто расширить хотят.
Твой коммент - лишний.
meinf 28.06.2016 14:18 # 0
Steve_Brown 27.06.2016 11:14 # 0
Когда не понимаешь, почему не компилируется.
inkanus-gray 26.06.2016 21:24 # 0
Напоминает ECMAScript, в котором составной оператор возвращает значение, вычисленное в последнем операторе.
dxd 27.06.2016 09:02 # 0
laMer007 27.06.2016 00:22 # 0
kurwa 27.06.2016 00:27 # +2
defecate-plusplus 27.06.2016 00:27 # +4
laMer007 27.06.2016 00:45 # +2
Почему нормальная конструкция выглядит как днище? Потому что старперу, привыкшему к днищу - спокойнее всегда видеть его перед собой
3.14159265 27.06.2016 01:31 # +4
laMer007 27.06.2016 00:47 # −1
Antervis 27.06.2016 06:21 # +5
Вернет новый фольцваген жук версии 2.0.
Antervis 27.06.2016 07:00 # 0
а почему не доделали до кошерного
Antervis 27.06.2016 08:22 # +3
чтобы возвращаемое значение можно было кастить к чему угодно, преобразовываемому из {int,double}
dxd 27.06.2016 09:04 # +1
laMer007 27.06.2016 09:21 # +1
Antervis 27.06.2016 10:44 # 0
fixed
guesto 27.06.2016 13:29 # +1
spam[4][17]
Xom94ok 27.06.2016 21:19 # +8
Soul_re@ver 27.06.2016 23:07 # +2
guestinho 27.06.2016 23:13 # 0
Xom94ok 28.06.2016 06:16 # 0
roman-kashitsyn 28.06.2016 09:59 # +3
С джавой будешь новых "стандартов" ждать с нетерпением.
guestinho 28.06.2016 18:24 # 0
каждые десять лет новая версия языка выходит, и в ней обычно две-три новые фичи!
laMer007 28.06.2016 20:45 # 0
А у меня больше!
Фич в 5тилетку. Я Крестовик
guestinho 28.06.2016 18:26 # 0
яп довольно косный (даже восьмой) , он очень вербоус, в нем много букв, и много глупости. В общем не самый приятный язык (хотя и двольно стабильный)
А вот JVM сама по себе не плоха: нормальная кросс-платформенность и виртуалки, и инструментов (профилировщики, дебаггеры итд)
ЯПы под нее всякие разные, Kotlin вон, Scala, итд
Xom94ok 28.06.2016 21:00 # 0
1024-- 28.06.2016 09:16 # +2
Antervis 28.06.2016 07:25 # +1