- 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/
Мне остаётся только спросить:
Вот это главная новость, ибо крестопитушня нужна только анскиллябрам заедушным.
пффф
https://ideone.com/pglY9s
auto в шаблонах вроде выглядит нормально
про Forward progress guarantees чет не въехал
С11 радует
Хех, так и знал, что это проталкивает какой-то гугловый гошник.
> пффф
Не то. Объекты, созданные в init, живут до конца скопа.
и так постоянно наблюдаю ифы на охулиард строчек через && || а тут и небо и аллаха в этот бедный иф засунуть можно
(а еще, совершенно случайно, я недавно узнал, что в крестах можно использовать кейворды not and or not_eq...)
Скажем, для scoped variable старая версия слегка жирная:
Или, например, версия с ранним return'ом:
Превратится в
в общем, имо годнота получается.
Вместо того, чтобы убирать всякую бесполезную херню, ее, наоборот, добавляют, чтобы сделать написание компилятора максимально трудным. И на по-настоящему нужные проверки / оптимизации можно забить, чтобы реализовать еще один вариант написания эквивалентного кода.
"Ой всё, три строчки в одной, я заблудился." И похер что можно в стектрейс глянуть.
> а куча точек возврата делает логирование максимально бесполезным.
Есть блядская тьма способов сделать эффективное логирование с кучей точек возврата. А вот способов сделать вложенные на 15 уровней if-ы читабельными - нет.
> чтобы сделать написание компилятора максимально трудным.
Конструкция имеет эквивалентную замену. Расскажи мне, насколько это усложнит компилятор...
> И на по-настоящему нужные проверки / оптимизации можно забить, чтобы реализовать еще один вариант написания эквивалентного кода.
И вообще похер что комитет стандартизации и разработчики компиляторов это разные коллективы с разными задачами
Правильно, лень, т.как занимает время: я его лучше проведу с большей пользой, например, другой баг исправлю.
> Есть блядская тьма способов
Можно хотя бы один пример?
> Расскажи мне, насколько это усложнит компилятор...
1. У нас нет специального правила только на два выражения разделенных ;, его нужно добавить.
2. Это правило нужно специально обработать, т.как оно внезапно становится равносильно блоку, со всемы вытекающими (следить за тем, чтобы переменную не использовали вне блока, например).
Если бы у Си компиляторов был уровень лексической трансформации исходников перед составлением АСТ, то эту проблему можно было бы избежать, но т.как нету...
> И вообще похер что комитет стандартизации и разработчики компиляторов это разные коллективы
Очевидно, это похер комитету по стандартизации, потому что им по всей видимости просто нечем занятся, как придумывать бесполезную херню.
Не так уж это долго
> Можно хотя бы один пример?
Возвращаем std::error_code, например
> Это правило нужно специально обработать, т.как оно внезапно становится равносильно блоку, со всемы вытекающими
так или иначе, подобное уже делали и неоднократно
> придумывать бесполезную херню.
имо не бесполезную. Не хочешь - не пользуйся
> Возвращаем std::error_code, например
Как это вообще логировать поможет? Лог, это когда мы записываем какую-то информацию о переменных выполняемой функции. Что мне даст это число, если мне нужно узнать какие значения были в полях нескольких структур с которыми эта функция работала.
Просто у мудаков, которые пишут
Логи выглядят так:
вместо
И да, когда "do something with x, y, z" выглядит как:
я говорю "идите все нахер это надо переписать"
Задача со звездочкой: решить без бумажки.
а если нельзя, то не имеет
Успешный сценарий возвращает success.
А теперь вопрос на миллион: как ты бы реализовал подобную задачу?
Почему return а не throw - я не знаю, но оставил как было.
Проблема разных типов аргументов решается замыканиями.
1. Никто не запрещает переменные захватывать по ссылке.
2. Можно сделать так, чтобы action_fn_t возвращал состояние (StateMonad, да простят меня грешного).
В изначальном коде я не вижу отката, но, опять же, это не сложно реализовать: состояние возвращаемое экшнами содержит в себе ссылку на функцию откатывающую состояние. Тут недавно форсили мое тестовое задание, там это реализовано:
За синтаксис я не уверен, т.как не пишу на крестах, но идея должна быть понятной.
Так это ж go!
1. Как числа.
2. Как два пальца.
3. Как все гениальное.
Го - простой потому что плохо продуман. Если не умрет на зачаточных стадиях - повторит историю С++: обрастет кучей костылей, нестыкующихся и недоделаных фич.
Его реальная привлекательность порстоена на одной единственной фиче: сорок лет спустя они реализовали идею из книжки Concurrent C. Там тоже не обошлось без лажи, но она там минимальная.
Все остальное в Го задумано и сделано популистами, которые хотели сыграть на надеждах сишников о том как ничего не меняя сделать сишку лучше. Ну и получилось, соответственно, чуть-чуть лучше, но суть та же говнистая осталась.
Есть языки, на которых - чем больше пишешь, тем больше проникаешься. Го - это наоборот, чем больше пишешь, тем больше разочаровываешься.
Он продумывался тысячелетиями. Ты просто не умеешь в него играть
> log(start)
> do something with x, y, z
> log(before return)
"И тут мы бросаем исключение!" ⓒ
https://habrahabr.ru/company/infopulse/blog/279927/#comment_8817929
Проблема в том, что мудаки которы используют "ранний выход" - они ж ленивые, и не пишут логи везде где они нужны, (их же еще и поддерживать потом нужно). И поэтому нужная информация пропадает / устаревает.
удовлетворит вашу беспокойную душу. Но с точки зрения скоупа функции, ранний возврат от выброса исключения не отличается ничем
> стектрейс глянуть
Компилятора?)))) Ошибка 00000000 в строке 100500 invalid token
а вот такое
> if (int i = doSmth(); i < 0) return i;
выглядит в лучших традициях труЪ сишников
if (int i = doSmth(); i < 0) goto before_exit;
if(int i = doSmth()) // всегда работало, i в scope`е If.
return i;
> Теперь ее просто расширить хотят.
Твой коммент - лишний.
Когда не понимаешь, почему не компилируется.
Напоминает ECMAScript, в котором составной оператор возвращает значение, вычисленное в последнем операторе.
Почему нормальная конструкция выглядит как днище? Потому что старперу, привыкшему к днищу - спокойнее всегда видеть его перед собой
Вернет новый фольцваген жук версии 2.0.
а почему не доделали до кошерного
чтобы возвращаемое значение можно было кастить к чему угодно, преобразовываемому из {int,double}
fixed
spam[4][17]
С джавой будешь новых "стандартов" ждать с нетерпением.
каждые десять лет новая версия языка выходит, и в ней обычно две-три новые фичи!
А у меня больше!
Фич в 5тилетку. Я Крестовик
яп довольно косный (даже восьмой) , он очень вербоус, в нем много букв, и много глупости. В общем не самый приятный язык (хотя и двольно стабильный)
А вот JVM сама по себе не плоха: нормальная кросс-платформенность и виртуалки, и инструментов (профилировщики, дебаггеры итд)
ЯПы под нее всякие разные, Kotlin вон, Scala, итд