dimrub: (Default)
[personal profile] dimrub
Нет, вы не знаете С++. Вы знаете С++ с хорошей стороны, но вы еще узнаете С++ с плохой стороны!

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

on 2009-03-09 06:26 am (UTC)
Posted by [identity profile] cmm.livejournal.com
а под "идеей и духом C++" следует понимать чистый неразбавленный мазохизм, что ли?

хотя, на самом деле есть два основных типа ситуаций, в которых auto может облегчить жизнь:

1. Alexandresku-style шаблонные мета-извращения, когда тип переменной либо умаешься выписывать, либо надо передавать по всему каскаду нудными typedef'ами.  по поводу этих ситуаций можно сказать, что в психически здоровой кодобазе такого ужоса просто не должно быть.

2. объявления итераторов (ну реально же задалбывает писать все эти "std::vector<МойДлинныйТип>::iterator i"!).  по поводу этих ситуаций можно сказать, что в психически здоровом языке должна быть родная конструкция типа for_each, на практике устраняющая практически полностью надобность пользоваться итераторами как класс.

но про идею и дух всё равно хотелось бы поподробнее. :)

on 2009-03-09 08:56 am (UTC)
Posted by [identity profile] gianthare.livejournal.com
Ага.
2. Ну так, там добавили foreach под маской for
С идеей и духом сложно, точнее неоднозначно - есть унаследованная из C идея, что программисто жестко все задает, зато знает, что происходит, и это естественно, включает типы переменных, и есть над этим надстройка C++, которая якобы экономит explicit typecasts, а на самом деле вносит subtle bugs и полностью лишает возможности узнать, какая функция вызвалась, не проверив все overloads функции и определения всех типов, чтобы занть что там во что неявно конвертировалось (я по крайненй мере дважды по ошибке передал стринг и эта сука компилятор построил мне из него полупустой объект класс, так что я потом обысклася, кто же мне поля стирает - да-да, я уже объявил этот конструктор explicit). Так вот, auto уводит нас еще радикальней по второму пути - теперь, чтобы понять, что происходит, надо будет еще посмотреть, а что же там возвращает функция - я говорю не о том, кто пишет код, а о том, кто его читает (как все мы знаем это может быть одно и то же лицо с перерывом в пару месяцев).
Ты пойми, я не говорю, что C++ хорош, а эти изменения его портят - я говорю, что он ужасен и все это как мертвому припарки.

on 2009-03-09 09:22 am (UTC)
Posted by [identity profile] cmm.livejournal.com
он ужасен и все это как мертвому припарки.

ужасен, да, но какая польза бедному практику от подобного максимализьма?

on 2009-03-09 09:47 am (UTC)
Posted by [identity profile] gianthare.livejournal.com
Более важный вопрос - какой вред от нововведений. И он таков - как только auto доберется до курсов по C++, 90% локальных переменных будут объявляться только так. А если будет возможность, то и 100%. Потому что так проще. Казалось бы, вот и хорошо, наконец-то не надо заботиться о том, что какого типа. Но реально-то то, какие перегруженные функции будут вызываться, будет зависить от типа, определенного компиляторов для этих переменных. Вот и пойми потом, почем что-то перестало работать - а это потому, что изменился тип возвращаемого значения у функции - раньше это бы вызвало type mismatch и ошибку или warning - теперь будет тихо съедено компилятором, неявно сконвертитровано во что можно и полностью скрыто от тебя, но работать начнет чуть-чуть по другому, например, перестанет работать ==, потому что int заменился на float. Недостаточно апокалиптическая картина?

more rope

on 2009-03-09 09:50 am (UTC)
Posted by [identity profile] cmm.livejournal.com
что-то в этом, конечно, есть.

on 2009-03-09 08:58 am (UTC)
Posted by [identity profile] dimrub.livejournal.com
По поводу №2 тут надо заметить, что, во-первых, в новом стандарте добавили for_each, а во-вторых, что идеология STL подразумевает использование std::for_each где только можно вместо использования итераторов, и что судя по всему, изменения языка теперь предпочтительно идут через stdlib, а не через внесение изменений в core.

on 2009-03-09 09:05 am (UTC)
Posted by [identity profile] cmm.livejournal.com
идеология STL подразумевает использование std::for_each где только можно вместо использования итераторов

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

on 2009-03-09 09:07 am (UTC)
Posted by [identity profile] dimrub.livejournal.com
Да, функторы по каждому поводу определять - геморой еще тот. Именно что посмотрим (в пайтоне, например, зачастую удобнее определить анонимную функцию, чем писать лямбду).

on 2009-03-09 09:18 am (UTC)
Posted by [identity profile] cmm.livejournal.com
в пайтоне, например, зачастую удобнее определить анонимную функцию, чем писать лямбду

а, эээ.
там это разные вещи?  "но как?!".

on 2009-03-09 09:22 am (UTC)
Posted by [identity profile] dimrub.livejournal.com
Пардон, соврал (точнее, спутал с javascript-ом). Таки лямбда, и никаких гвоздей. Либо именованную функцию. Но ее зато на месте можно определить, в отличие от плюсов, в которых если на месте определять - то только класс.

on 2009-03-09 02:19 pm (UTC)
Posted by [identity profile] ionial.livejournal.com
для этого есть херня в бусте, называемая bind.
Создает, правда, кривовато, inline-функтор, либо для вызова функции, либо для
вызова куска кода - тут, правда, тоже есть кривые ограничения.

Profile

dimrub: (Default)
Adventures of a somewhat curious character

September 2013

S M T W T F S
12 345 67
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 22nd, 2026 09:32 am
Powered by Dreamwidth Studios