Вы думаете, что вы знаете С++?
Mar. 8th, 2009 02:04 pmНет, вы не знаете С++. Вы знаете С++ с хорошей стороны, но вы еще узнаете С++ с плохой стороны!
Я в последние годы как-то остерегаюсь высказывать категоричные мнения по таким темам, как будущее языков программирования, но мне кажется, что будет интересно.
Я в последние годы как-то остерегаюсь высказывать категоричные мнения по таким темам, как будущее языков программирования, но мне кажется, что будет интересно.
no subject
on 2009-03-09 05:44 am (UTC)no subject
on 2009-03-09 06:26 am (UTC)хотя, на самом деле есть два основных типа ситуаций, в которых auto может облегчить жизнь:
1. Alexandresku-style шаблонные мета-извращения, когда тип переменной либо умаешься выписывать, либо надо передавать по всему каскаду нудными typedef'ами. по поводу этих ситуаций можно сказать, что в психически здоровой кодобазе такого ужоса просто не должно быть.
2. объявления итераторов (ну реально же задалбывает писать все эти "std::vector<МойДлинныйТип>::iterator i"!). по поводу этих ситуаций можно сказать, что в психически здоровом языке должна быть родная конструкция типа for_each, на практике устраняющая практически полностью надобность пользоваться итераторами как класс.
но про идею и дух всё равно хотелось бы поподробнее. :)
no subject
on 2009-03-09 08:56 am (UTC)2. Ну так, там добавили foreach под маской for
С идеей и духом сложно, точнее неоднозначно - есть унаследованная из C идея, что программисто жестко все задает, зато знает, что происходит, и это естественно, включает типы переменных, и есть над этим надстройка C++, которая якобы экономит explicit typecasts, а на самом деле вносит subtle bugs и полностью лишает возможности узнать, какая функция вызвалась, не проверив все overloads функции и определения всех типов, чтобы занть что там во что неявно конвертировалось (я по крайненй мере дважды по ошибке передал стринг и эта сука компилятор построил мне из него полупустой объект класс, так что я потом обысклася, кто же мне поля стирает - да-да, я уже объявил этот конструктор explicit). Так вот, auto уводит нас еще радикальней по второму пути - теперь, чтобы понять, что происходит, надо будет еще посмотреть, а что же там возвращает функция - я говорю не о том, кто пишет код, а о том, кто его читает (как все мы знаем это может быть одно и то же лицо с перерывом в пару месяцев).
Ты пойми, я не говорю, что C++ хорош, а эти изменения его портят - я говорю, что он ужасен и все это как мертвому припарки.
no subject
on 2009-03-09 09:22 am (UTC)ужасен, да, но какая польза бедному практику от подобного максимализьма?
no subject
on 2009-03-09 09:47 am (UTC)more rope
no subject
on 2009-03-09 08:58 am (UTC)no subject
on 2009-03-09 09:05 am (UTC)без лямбд это было, гм, не очень практично. а с лямбдами посмотрим.
no subject
on 2009-03-09 09:07 am (UTC)no subject
on 2009-03-09 09:18 am (UTC)а, эээ.
там это разные вещи? "но как?!".
no subject
on 2009-03-09 09:22 am (UTC)no subject
on 2009-03-09 02:19 pm (UTC)Создает, правда, кривовато, inline-функтор, либо для вызова функции, либо для
вызова куска кода - тут, правда, тоже есть кривые ограничения.