decltype?
От: _FRED_ Черногория
Дата: 16.05.11 11:31
Оценка:
По мотивам http://rsdn.ru/forum/nemerle/4272477.flat.aspx
Автор:
Дата: 15.05.11
. Есть возможность прикрутить decltype?
Help will always be given at Hogwarts to those who ask for it.
Re: decltype?
От: _nn_ www.nemerleweb.com
Дата: 16.05.11 11:33
Оценка: 22 (1)
Здравствуйте, _FRED_, Вы писали:

_FR>По мотивам http://rsdn.ru/forum/nemerle/4272477.flat.aspx:
Автор:
Дата: 15.05.11
Есть возможность прикрутить decltype?


Compile-Time typeof
Автор: _nn_
Дата: 14.03.09
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: decltype?
От: hardcase Пират http://nemerle.org
Дата: 16.05.11 11:48
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>По мотивам http://rsdn.ru/forum/nemerle/4272477.flat.aspx:
Автор:
Дата: 15.05.11
Есть возможность прикрутить decltype?


А для чего его использовать?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: decltype?
От: _FRED_ Черногория
Дата: 16.05.11 12:22
Оценка:
Здравствуйте, hardcase, Вы писали:

_FR>>По мотивам http://rsdn.ru/forum/nemerle/4272477.flat.aspx:
Автор:
Дата: 15.05.11
Есть возможность прикрутить decltype?


H>А для чего его использовать?


Когда требуемый тип не хочется забивать явно, ибо он однозначно определяется другими компонентами программы.
Help will always be given at Hogwarts to those who ask for it.
Re[3]: decltype?
От: hardcase Пират http://nemerle.org
Дата: 16.05.11 13:16
Оценка:
Здравствуйте, _FRED_, Вы писали:

H>>А для чего его использовать?


_FR>Когда требуемый тип не хочется забивать явно, ибо он однозначно определяется другими компонентами программы.


В такой постановке проблемы её решение уже имеется в языке — вывод типов.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: decltype?
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.05.11 14:16
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>По мотивам http://rsdn.ru/forum/nemerle/4272477.flat.aspx
Автор:
Дата: 15.05.11
. Есть возможность прикрутить decltype?


Сделать такую штуку довольно просто. Но...
Для публичного интерфейса от этого только вред будет, так как появится зависимость между отдельными членами.
Ну, а для кода — это не нужно так как есть полноценный вывод типов. Он без участия программиста сам все выведет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: decltype?
От: _FRED_ Черногория
Дата: 16.05.11 15:26
Оценка:
Здравствуйте, VladD2, Вы писали:

_FR>>По мотивам http://rsdn.ru/forum/nemerle/4272477.flat.aspx
Автор:
Дата: 15.05.11
. Есть возможность прикрутить decltype?


VD>Сделать такую штуку довольно просто. Но...

VD>Для публичного интерфейса от этого только вред будет, так как появится зависимость между отдельными членами.
VD>Ну, а для кода — это не нужно так как есть полноценный вывод типов. Он без участия программиста сам все выведет.

1. И в декларациях [не публичных] членов класса?
2. Иногда компилятором выводится не совсем тот тип, что нужен и требуется явное уточнение, то есть указание типа.
Help will always be given at Hogwarts to those who ask for it.
Re[3]: decltype?
От: _nn_ www.nemerleweb.com
Дата: 16.05.11 17:21
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, VladD2, Вы писали:


_FR>>>По мотивам http://rsdn.ru/forum/nemerle/4272477.flat.aspx
Автор:
Дата: 15.05.11
. Есть возможность прикрутить decltype?


VD>>Сделать такую штуку довольно просто. Но...

VD>>Для публичного интерфейса от этого только вред будет, так как появится зависимость между отдельными членами.
VD>>Ну, а для кода — это не нужно так как есть полноценный вывод типов. Он без участия программиста сам все выведет.

_FR>1. И в декларациях [не публичных] членов класса?

_FR>2. Иногда компилятором выводится не совсем тот тип, что нужен и требуется явное уточнение, то есть указание типа.

Дайте пример что ли.

Для начала ответьте на простом примере.
Какой тип у "x", а какой у "y" и почему ?

mutable x;              // 1
def y = 1 : TypeOf(x);  // 2
x = 1.0;                // 3
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: decltype?
От: catbert  
Дата: 16.05.11 19:21
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>По мотивам http://rsdn.ru/forum/nemerle/4272477.flat.aspx
Автор:
Дата: 15.05.11
. Есть возможность прикрутить decltype?


Мне кажется, что внутри кода это можно сделать нехитрым макросом, а снаружи делать не стоит.

Хотя, с другой стороны, в С++ оно не зря, так что надо подумать еще.
Re[2]: decltype?
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.05.11 20:25
Оценка:
Здравствуйте, catbert, Вы писали:

C>Мне кажется, что внутри кода это можно сделать нехитрым макросом, а снаружи делать не стоит.


+1

C>Хотя, с другой стороны, в С++ оно не зря, так что надо подумать еще.


В С++ — это очередной костыль. Затыкают кривой дизайн языка.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: decltype?
От: Аноним  
Дата: 17.05.11 03:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, catbert, Вы писали:


C>>Мне кажется, что внутри кода это можно сделать нехитрым макросом, а снаружи делать не стоит.


VD>+1


C>>Хотя, с другой стороны, в С++ оно не зря, так что надо подумать еще.


VD>В С++ — это очередной костыль. Затыкают кривой дизайн языка.

В nemerle не меньший это работа с типами в макросах.
Re[4]: decltype?
От: _FRED_ Черногория
Дата: 17.05.11 05:47
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Для начала ответьте на простом примере.

__>Какой тип у "x", а какой у "y" и почему ?

__>mutable x;              // 1
__>def y = 1 : TypeOf(x);  // 2
__>x = 1.0;                // 3


Я вижу как минимум два варианта — нельзя использовать выражения, тип которых ещё однозначно не вычислен или использовать "отложенное вычисление", то есть в данном случае тип "y" вычислять после того, как будет вычислен тип "х". При наличии циклов — посылать в лес.
Help will always be given at Hogwarts to those who ask for it.
Re[5]: decltype?
От: Аноним  
Дата: 17.05.11 06:02
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, _nn_, Вы писали:


__>>Для начала ответьте на простом примере.

__>>Какой тип у "x", а какой у "y" и почему ?

_FR>
__>>mutable x;              // 1
__>>def y = 1 : TypeOf(x);  // 2
__>>x = 1.0;                // 3
_FR>


_FR>Я вижу как минимум два варианта — нельзя использовать выражения, тип которых ещё однозначно не вычислен или использовать "отложенное вычисление", то есть в данном случае тип "y" вычислять после того, как будет вычислен тип "х". При наличии циклов — посылать в лес.


тут решается граф

type y=type x
type x=float

первое вычислить мы не можем, поэтому пытаемся вычислить через унификацию второе
получаем x=float
далее ищим еще вариант который мы можем решить
это первая строка.
Re[4]: decltype?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.11 18:22
Оценка: +1
Здравствуйте, Аноним, Вы писали:

C>>>Хотя, с другой стороны, в С++ оно не зря, так что надо подумать еще.


VD>>В С++ — это очередной костыль. Затыкают кривой дизайн языка.

А>В nemerle не меньший это работа с типами в макросах.

И что с ними не так?

В прочем, что-то я не вижу связи с вопросом темы. Кажется пошел какой-то флуд.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: decltype?
От: catbert  
Дата: 17.05.11 20:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В С++ — это очередной костыль. Затыкают кривой дизайн языка.


Да нет, не то что бы. Система типов С++ просто побогаче .НЕТ-ной. Допустим, есть два типа А и Б, и определен оператор (x : A) + (y : Б) = (z : В). Как выразить тип шаблона функции, которая возвращает сумму х и у? С помощью decltype.

В .NET просто так нельзя.
Re[4]: decltype?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.11 22:43
Оценка:
Здравствуйте, catbert, Вы писали:

C>Да нет, не то что бы. Система типов С++ просто побогаче .НЕТ-ной. Допустим, есть два типа А и Б, и определен оператор (x : A) + (y : Б) = (z : В). Как выразить тип шаблона функции, которая возвращает сумму х и у? С помощью decltype.


C>В .NET просто так нельзя.


Тут дело не в системе типов, а в извращенческой логике которая выработалась в С++.
Если тебе нужно описать функцию, то и описывай ее в терминах типов:
A * B -> C
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: decltype?
От: Аноним  
Дата: 18.05.11 04:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Аноним, Вы писали:


C>>>>Хотя, с другой стороны, в С++ оно не зря, так что надо подумать еще.


VD>>>В С++ — это очередной костыль. Затыкают кривой дизайн языка.

А>>В nemerle не меньший это работа с типами в макросах.

VD>И что с ними не так?


VD>В прочем, что-то я не вижу связи с вопросом темы. Кажется пошел какой-то флуд.



макросы до типизации, макросы после типизации.... получение типов выражений, но при этом нельзя получить тип функционального выражения и т д
Re[6]: decltype?
От: hardcase Пират http://nemerle.org
Дата: 18.05.11 10:12
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>макросы до типизации, макросы после типизации.... получение типов выражений, но при этом нельзя получить тип функционального выражения и т д


Не надо путать типизацию членов типов и типизацию тел методов — это два различных процесса. Когда говорят о выводе типов, то подразумевают второй процесс.

"Макросы до типизации" работают на стадиях BeforeInheritance и BeforeTypedMembers — до типизации членов типов..
"Макросы после типизации" вообще что-то непонятное. Есть лишь WithTypedMembers — этап, когда все сигнатуры членов типов вычислены и начинается типизация тел методов.

Что значит нельзя получить "тип функционального выражения"? Его получить можно точно также как и любой другой: typer.TypeExpr(...).
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: decltype?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.05.11 11:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>макросы до типизации, макросы после типизации.... получение типов выражений, но при этом нельзя получить тип функционального выражения и т д


Типизируешь выражение с помощью typer.TypeExpr() и получаешь тип. Единственная сложность заключается в том, что типизация бывает отложенная. Так что для некоторых случаев нужно свою обработку заворачивать в typer.DelayMacro().
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: decltype?
От: catbert  
Дата: 18.05.11 20:20
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Тут дело не в системе типов, а в извращенческой логике которая выработалась в С++.


Эквивалент ситуации на Немерле


public Frobnicate[A, B]() : / * что тут писать? */
{
    def x : A = GetSomeA();
    def y : B = GetSomeB();

    x + y;
}


В .NET тип x + y известен всегда. В С++ нет. Поэтому в С++ нужен decltype или что-то другое в этом направлении.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.