Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет yigal_s ([info]yigal_s)
@ 2011-09-17 21:22:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
(C++)++
Сподобился прочитать сорсы функции std::move и std::forward.


Что-то они в этом Сипипи совсем куда-то не туда зашли. Уж лучше многоярусные навороты в духе буста или Александеску, чем вот такие интересные примеры хлопков одной рукой.

С другой стороны, к сожалению, внятную альтернативу этому монструозному стилю я как-то не вижу. Хотите константы, временные переменные, типы, передаваемые по значению, наконец темплейты? Ну тогда жрите и продукты брожения всей этой, на первый взгляд, безобидной смеси, накопившиеся к 21-му веку.


(Добавить комментарий)


[info]spamsink@lj
2011-09-17 23:01 (ссылка)
В чем печаль? В Форте, вон, тоже, многие с виду тривиальные операции не встроены в язык, а определяются.

(Ответить) (Ветвь дискуссии)


[info]yigal_s@lj
2011-09-17 23:46 (ссылка)
беда в том, что многие возможности, достигаемые в С++ посредством невстроенных операций, возникают как бы случайно, как сайд-эффекты. Собственно, случайно оказалось, что на темплейтах можно заниматься функциональным программированием в компайл-тайм, случайно оказалось, что можно тем или иным способом написать (или почти написать) вот это всё: http://www.boost.org/doc/libs/1_47_0/libs/type_traits/doc/html/index.html

Если в форте или лиспе возможности саморасширения языка внятно заложены изначально, то С++ в подобной амплуа - странный малоадекватный уродец. При этом у этого уродца странным образом очень многое получается, надо признать. Но всё это в целом оставляет гнетущее впечатление.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]spamsink@lj
2011-09-18 00:35 (ссылка)
Я продолжаю не понимать, почему это именно беда, а не что-либо другое (от забавности до закономерного эффекта эволюционного развития).
Собственно, что заниматься программированием в компайл-тайм можно было и на Си с помощью препроцессора, тоже оказалось случайно (http://www0.us.ioccc.org/1988/applin.hint), но гнетущего впечатления это ни у кого не вызвало - в первую очередь потому, что пользоваться малоадекватными уродцами никто не заставляет.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yigal_s@lj
2011-09-18 00:57 (ссылка)
беда - потому что С++ требует экспертного уровня владения для написания достатчно элементарных вещей (http://dr-tambowsky.livejournal.com/39813.html).

Вот как бы факт - лишь нынешний стандарт дает обычным людям, а не гикам, накурившихся некоторых работ Александреску, возможность относительно вменяемым образом писать полиморфные функции, способные принимать произвольные аргументы (константы, неконстанты, временные объекты).
"This would allow us to handle all examples, but at a cost of an exponential explosion" http://www.artima.com/cppsource/rvalue.html.

Т.е. в языке уже лет 16 присутствуют темплейтные функции, и всё это время эти функции не способны, скажем, принять в качестве аргумента целый литерал. Без экспоненциального роста объема кода. )))

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]spamsink@lj
2011-09-18 01:37 (ссылка)
Я не зря сказал "закономерное явление эволюционного развития". Описанное в статье есть, в сущности, дефектная парадигма, характерная для естественных языков. А т.к. С++ - язык неестественный, используется с утилитарной целью, и радетелей за чистоту его овеянных временем традиций нет (или очень немного) - у комитета по стандартизации есть возможность время от времени корректировать парадигмы, чем комитет успешно и занимается. В русском же языке подобным образом внедрить, скажем, форму 1 л. ед.ч. от "победить" или форму род.п. мн.ч. от "мзда" не удастся.

(Ответить) (Уровень выше)


[info]iwr@lj
2011-09-18 08:16 (ссылка)
> Сподобился прочитать сорсы функции std::move Эту? template< class _Ty > inline typename tr1::_Remove_reference< _Ty >::_Type&& move(_Ty&& _Arg) { return ((typename tr1::_Remove_reference< _Ty >::_Type&&)_Arg); } И чем она тебя так шокировала?

(Ответить) (Ветвь дискуссии)


[info]yigal_s@lj
2011-09-18 15:45 (ссылка)
блять. всем!

(Ответить) (Уровень выше)


[info]yigal_s@lj
2011-09-18 15:53 (ссылка)
ты вообще отдаешь себе отчет, что судя по тому, как она ВЫГЛЯДИТ, она принимает и возращает один и тот же тип и одно и то же значение, то есть, С ВИДУ не делает вообще ничего?

Т.е. градус эзотерики ползёт в языке всё выше и выше на радость посвященным в тайны языка долбоёбам.

"C++ is mostly focused about addressing the wrong kinds of problems in the wrong ways" (с) кто-то

Ну вот подумай здраво, откуда вообще взялась эта херня, что мы объекты сначала бездумно копируем (а кто бля сказал, что ОБЪЕКТЫ можно копировать? Вам что, одного объекта мало? Это, бля, такой обджыкт ориентед, что объекты создаются и исчезают прямо пропорционально количеству передаваемых и возвраемых из функций значений? У нас что, процессорного времени до хрена, объекты копировать вместо того, чтобы делом заниматься), а потом 20 лет после появления языка в промышленном использовании(!!!) учимся, как бы нам бля сделать, чтобы они не копировались? И не придумываем для этого через двадцать бля лет ничего лучше, как написать функцию, которая с виду вообще ничего не делает?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]iwr@lj
2011-09-18 16:16 (ссылка)
с такими крамольными мыслЯми тебе надо срочно переходить на ФП! :-р

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yigal_s@lj
2011-09-18 18:48 (ссылка)
всё обман. надо переходить на VHDL.

(Ответить) (Уровень выше)


[info]yigal_s@lj
2011-09-18 16:01 (ссылка)
кстати, страус её вот так записывал:

template < class T >
typename remove_reference< T >::type&&
move(T&& a)
{
return a;
}

что-то я не понимаю пока, зачем понадобился более сложный вариант, что ты приводишь

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]iwr@lj
2011-09-18 16:32 (ссылка)
если я правильно помню, в бусте она тоже как страуса
а M$, видимо, просто выёбывается

(Ответить) (Уровень выше)