Войти
ФлеймФорумПрограммирование

[C++] Как такая фигня с дизайном языка получилась? (2 стр)

Страницы: 1 2 3 411 Следующая »
#15
10:39, 2 июля 2019

Джек Аллигатор
от него можно диабет заработать


#16
10:49, 2 июля 2019

Джек Аллигатор
Тогда уж лучше
Изображение

#17
11:26, 2 июля 2019

=A=L=X=
> В плюсах тип вида TYPE && который тут получается в таком случае
Не получается. В этом случае и TYPE, и TYPE & превращаются в string &. И это типа нормально:

Because of the reference-to-reference, this instantiated code is prima facie invalid, but the source code– “f(x)” – is completely reasonable.  To avoid rejecting it, C++11 performs “reference collapsing” when references to references arise in contexts such as template instantiation.

Because there are two kinds of references (lvalue references and rvalue references), there are four possible reference-reference combinations: lvalue reference to lvalue reference, lvalue reference to rvalue reference, rvalue reference to lvalue reference, and rvalue reference to rvalue reference.  There are only two reference-collapsing rules:

    An rvalue reference to an rvalue reference becomes (“collapses into”) an rvalue reference.
    All other references to references (i.e., all combinations involving an lvalue reference) collapse into an lvalue reference.

#18
(Правка: 11:34) 11:30, 2 июля 2019

я не совсем понял, что именно смутило ОП'а, но подземный чёрт правильную ссылку привёл. читать про reference collapsing.

#19
(Правка: 11:40) 11:38, 2 июля 2019

Sbtrn. Devil
> Не получается.
Получается.
https://gamedev.ru/flame/forum/?id=245343&m=5002890#m4
Сперва получается, а уже потом схлопывается, ибо. Чистая шаблономагия.
И вообще я сразу в первом же комментарии сказал про perfect forwarding и привёл ссылку на подробное объяснение зачем и почему, поэтому 10 раз это повторять как то странно.

#20
(Правка: 4 июля 2019, 8:51) 12:28, 2 июля 2019

Отсутствие согласованности между вот этими подходами к codegen`у:

using TYPE=string&;
void foo(TYPE&ref){impl(TYPE,ref);}

template<class TYPE=string&> // ...
void baz(TYPE&ref){impl(TYPE,ref);}

#define TYPE string&
void bar(TYPE&ref){impl(TYPE,ref);} // ...
+ полностью весь код:

#21
12:33, 2 июля 2019

Adler
В одном случае ссылка на ссылку и схлопывание, в другом rvalue
ибо TYPE&& != (TYPE&) &

#22
14:53, 2 июля 2019

=A=L=X=
> Сперва получается, а уже потом схлопывается, ибо. Чистая шаблономагия.
Магия вот: https://ideone.com/9ZnihU

#23
22:52, 2 июля 2019

Джек Аллигатор
+1 за раст

#24
23:16, 2 июля 2019

mr.DIMAS

> +1 за раст
[rant]
Точно так же можно сказать +1 за какой-нибудь го или эрланг. Усилие по переводу существующего плюс-проекта на все это несопоставимо с рефакторингом. Легче избегать все это модное C++ кунг-фу, чем задаваться вопросами о том, как оно в конечном итоге будет  работать.
Ну а мое субъективное мнение по расту - до продакшена ещё далеко. В первую очередь из-за нестабильности экосистемы.
[/rant]

#25
12:10, 3 июля 2019

Пока в русте нельзя будет реализовать двусвязный список, не прибегая к ансейфу - не нужен.

#26
12:17, 3 июля 2019

Sbtrn. Devil
А в каком языке можно?
Сырые указатели в нодах в сипупе - это лишь одно из проявлений перманентного крестоансейфа.

#27
(Правка: 12:24) 12:23, 3 июля 2019

Sbtrn. Devil, сколько проектов начинается с написания собственной реализации двусвязного списка?
Тем более когда этот список есть в стандартной библиотеке?

А может в оценке языков программирования стоит руководствоваться не пропагандистскими аргументами блогерков с хабра, а собственным практическим опытом?
У меня за три года практики на расте не было вообще никаких проблем, я просто беру и воплощаю свои идеи в жизнь с его помощью.
В то время как с крестами много лет боролся, так нихрена и не осилив - потому что идет постоянная борьба с языком вместо написания проекта.
Не говоря уже о полной нечитабельности крестокода.

C++ ДОЛЖЕН БЫТЬ ЗАБЫТ

#28
(Правка: 12:29) 12:28, 3 июля 2019

1 frag / 2 deaths
> А в каком языке можно?
В жабе и иже с нею. Котлин тот же.

С растом проблема то не в двусвязном списке. Он в конце-концов есть в их std (хотя и не тред-сейф версия).
Проблема то в том, что и прикладной, бизнес-специфичной области всегда возникает куча задач, когда надо ссылаться в обе стороны. Именно прикладных задач, которые не вынесешь в либу. Да та же модель данных, где родитель имеет метод getChildren, а дети имеют метод getParent  превращается каждый раз непонятно во что.
Ну и да, проблема курицы и яйца. Либ и окружения нет, потому что раст никому не нужен, а раст никому не нужен, потому что нет либ и экосистемы.

#29
12:36, 3 июля 2019

9К720
> В жабе и иже с нею. Котлин тот же.
Управляемые не считаются.

Страницы: 1 2 3 411 Следующая »
ФлеймФорумПрограммирование