Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод типов 
:(
    Опции темы
 
Как вы относитесь к выводу типов?
Вывод типов - добро [ 20 ]  [74.07%]
Вывод типов - зло [ 2 ]  [7.41%]
Не знаю, что это такое [ 5 ]  [18.52%]
Всего проголосовавших: 27
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
Любитель
Дата 15.5.2010, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



После просмотра последних обсуждений захотелось спросить.
Классическая холиварная тема. Адресовано в первую очередь к тем людям, кто пользуется языками, где вывод типов есть, но вовсе не обязателен (понятно, что я отталкиваюсь от шарпа, но.. мало ли). Уж точно не адресовано к тем, кто пользуется языками с динамической типизацией smile


--------------------
PM MAIL ICQ Skype   Вверх
djamshud
Дата 15.5.2010, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



В двух словах, что это такое? Вот я пользуюсь с, с++ и bash в основном, хз, есть там "вывод типа" или нет...


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Vasay
Дата 15.5.2010, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



djamshud, 

http://ru.wikipedia.org/wiki/%D0%92%D1%8B%...%BF%D0%BE%D0%B2






Не стал голосовать - в Java пока этого нет, на первый взгляд - зло, но может начну пользоваться и понравится smile


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
djamshud
Дата 15.5.2010, 01:25 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Vasay, tnx!

Не вижу никакого смысла в этом. Писать чуть "проще", но в итоге эта простота выльется в "а что это вообще переменная, и почему у меня все работает совсем не так, как я хочу". В динамических языках само собой хорошо, но вот тянуть бяку в статические, имхо, не нужно. То есть фича, по определению полезная в одном случае, за уши притягивается туда, где ей быть совсем не нужно (это я про с++0х в первую очередь).


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Любитель
Дата 15.5.2010, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



В моём понятии, в языках с динамической типзиацией этого нет. Не ну то есть есть, конечно, но просто там без вывода типов - никак. И там, естественно, это рантаймовый вывод типов, а не компайл-таймовый. Что, вообще говоря, несколько иное.


--------------------
PM MAIL ICQ Skype   Вверх
k0rvin
Дата 15.5.2010, 10:19 (ссылка) |  (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(djamshud @ 15.5.2010,  01:25)
Vasay, tnx!

Не вижу никакого смысла в этом. Писать чуть "проще", но в итоге эта простота выльется в "а что это вообще переменная, и почему у меня все работает совсем не так, как я хочу". В динамических языках само собой хорошо, но вот тянуть бяку в статические, имхо, не нужно. То есть фича, по определению полезная в одном случае, за уши притягивается туда, где ей быть совсем не нужно (это я про с++0х в первую очередь).

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


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Vasay
Дата 15.5.2010, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



k0rvin, 

Цитата

как раз в статически типизированных это весьма необходимая, удобная вещь. 


А чем это удобно? На первый взгляд, кроме ухудшения читаемости кода и увеличении времени компиляции программы ничего не дает. Но я могу и ошибаться - устриц не ел  smile 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
GoldFinch
Дата 15.5.2010, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, ты видимо кодишь не на С++, а на С с классами

попробуй объявить переменную с типом результата boost.bind например
какбэ не всегда программисту известен тип того с чем он работает
PM MAIL ICQ   Вверх
k0rvin
Дата 15.5.2010, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Vasay @ 15.5.2010,  10:37)
k0rvin, 

Цитата

как раз в статически типизированных это весьма необходимая, удобная вещь. 


А чем это удобно? На первый взгляд, кроме ухудшения читаемости кода и увеличении времени компиляции программы ничего не дает. Но я могу и ошибаться - устриц не ел  smile

попробуй Haskell или OCaml


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Vasay
Дата 15.5.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



k0rvin, 

Может все же приведешь конкретный пример, где это может быть полезно?





--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
k0rvin
Дата 15.5.2010, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



что значит где? везде в коде


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
GoldFinch
Дата 15.5.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Vasay, 
Код

unknown_type foo();
auto x = foo();

PM MAIL ICQ   Вверх
Vasay
Дата 15.5.2010, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



k0rvin, 

Цитата

что значит где? везде в коде 


Это не ответ на вопрос - "А чем это удобно?"  


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
djamshud
Дата 15.5.2010, 11:59 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



>попробуй Haskell или OCaml

Какое отношение с++ имеет к этой функциональщине? С++ решает _другие_ задачи, вот нагородили вокруг него монстров вроде буста, а потом ревут "с++ мостроузное ###, да на лиспе я это в пару десятков скобок заколбашу!". Достала школота.

GoldFinch, про буст уже написал. А пишу я на и на С, и на С++, с классами, шаблонами, покером, куртизанками и прочими ништяками, но решаю задачи средствами языка, а не нагороженных вокруг него костылей. И да, я наверное не программист, раз всегда знаю типы того, с чем работаю.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Vasay
Дата 15.5.2010, 12:04 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



Цитата(GoldFinch @ 15.5.2010,  11:50)
Vasay, 
Код

unknown_type foo();
auto x = foo();

Это был пример плохо читаемого кода, вводящего в ступор  механизм подсказок IDE?

Или, Вы хотели сказать этим что-то другое?

Это сообщение отредактировал(а) Vasay - 15.5.2010, 12:05


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
k0rvin
Дата 15.5.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Vasay @ 15.5.2010,  11:54)
k0rvin, 

Цитата

что значит где? везде в коде 


Это не ответ на вопрос - "А чем это удобно?"

ты и не задавал такой вопрос

Добавлено @ 12:10
Цитата(djamshud @ 15.5.2010,  11:59)
>попробуй Haskell или OCaml

Какое отношение с++ имеет к этой функциональщине? С++ решает _другие_ задачи, вот нагородили вокруг него монстров вроде буста, а потом ревут "с++ мостроузное ###, да на лиспе я это в пару десятков скобок заколбашу!". Достала школота.

никакого. давай так: какое отношение С++ имеет к моему посту, в котором я привёл пример языков с хорошо реализованным выводом типов?

Это сообщение отредактировал(а) k0rvin - 15.5.2010, 12:12


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Vasay
Дата 15.5.2010, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



Цитата


ты и не задавал такой вопрос



Вы невнимательны:

http://forum.vingrad.ru/index.php?showtopi...t&p=2153052


Цитата

давай так: какое отношение С++ имеет к этому топику? 


Причем, вдвойне:

Цитата(djamshud @  15.5.2010,  01:25 Найти цитируемый пост)
(это я про с++0х в первую очередь). 




--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
djamshud
Дата 15.5.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



k0rvin, кончай вилять. Или ответь уже кому-нибудь по существу, или сливайся.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
k0rvin
Дата 15.5.2010, 12:17 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Vasay @ 15.5.2010,  12:12)
Цитата


ты и не задавал такой вопрос



Вы невнимательны:

http://forum.vingrad.ru/index.php?showtopi...t&p=2153052


Цитата

давай так: какое отношение С++ имеет к этому топику? 


Причем, вдвойне:

Цитата(djamshud @  15.5.2010,  01:25 Найти цитируемый пост)
(это я про с++0х в первую очередь). 

еще как внимателен: 

здесь только "где?": http://forum.vingrad.ru/index.php?showtopi...t&p=2153073

ни слова про С++: http://forum.vingrad.ru/index.php?showtopi...t&p=2153052

Добавлено через 37 секунд
Цитата(djamshud @ 15.5.2010,  12:14)
k0rvin, кончай вилять. Или ответь уже кому-нибудь по существу, или сливайся.

никто по существу ничего спросить не может


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Vasay
Дата 15.5.2010, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



k0rvin, 

Может хватит, а?  Тебе дали конкретные ссылки на посты, где задан вопрос (на который тебе, похоже, нечего ответить) и упомянут с++0х в котором присутствует вывод типов.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
k0rvin
Дата 15.5.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Vasay @ 15.5.2010,  12:24)
k0rvin, 

Может хватит, а?  Тебе дали конкретные ссылки на посты, где задан вопрос (на который тебе, похоже, нечего ответить) и упомянут с++0х в котором присутствует вывод типов.


может хватит в меня тыкать С++-ом? хотите обсуждать С++ -- обсуждайте, мне он не интересен.
всё моё обсуждение С++ началось и закончилось этой фразой:
"С++ понятное дело ###, поэтому в нем даже вывод типов нормальный не смогли сделать. "

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

Добавлено @ 12:34
Цитата(Vasay @ 15.5.2010,  12:24)
с++0х в котором присутствует вывод типов.

там присутствует костыль, а не вывод типов. у С++ слишком слабая система типов, чтобы на ней сделать нормальный вывод.

Это сообщение отредактировал(а) k0rvin - 15.5.2010, 12:46


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Vasay
Дата 15.5.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



Цитата(k0rvin @  15.5.2010,  12:30 Найти цитируемый пост)
например отсутствием необходимости описывать никому неинтересные типы локальных переменных, нагромождать код этими описаниями.


И как следствие ухудшить  читаемость кода,  остаться без подсказок IDE по методам, вывода  ***doc-ов, а так же лишиться проверки кода на стадии написания.

Не высокая ли цена?

Это сообщение отредактировал(а) Vasay - 15.5.2010, 12:53


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
GoldFinch
Дата 15.5.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, Vasay, 
вы на С++ boost.bind, boost.lambda, boost.spirit видели?
первые 2 - костыли, а вот спирит не костыль

если нет, то вам "повезло", вы не юзаете ту часть С++, которую юзает большинство С++ программистов,
и вам auto и decltype в C++0x не надо.

а всем остальным - надо.

Добавлено @ 12:57
В: чем это удобно
О: тем что тип может быть слишком длинным чтобы его написать, или неизвестным вообще, или unspecified (может поменяться в дальнейшем)


Это сообщение отредактировал(а) GoldFinch - 15.5.2010, 13:04
PM MAIL ICQ   Вверх
k0rvin
Дата 15.5.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Vasay @ 15.5.2010,  12:52)
Цитата(k0rvin @  15.5.2010,  12:30 Найти цитируемый пост)
например отсутствием необходимости описывать никому неинтересные типы локальных переменных, нагромождать код этими описаниями.


И как следствие ухудшить  читаемость кода,  остаться без подсказок IDE по методам, вывода  ***doc-ов, а так же лишиться проверки кода на стадии написания.

Не высокая ли цена?

в каком месте это ухудшит читаемость кода? куда денутся подсказки? куда денется вывод ***doc-ов? и куда денется проверка кода?
и главное: почему это все должно куда-то деться?

Это сообщение отредактировал(а) k0rvin - 15.5.2010, 13:05


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Vasay
Дата 15.5.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



GoldFinch, 

Цитата

вы на С++ boost.bind, boost.lambda, boost.spirit видели?


Честно - не видел, да и С++ последний раз видел много лет тому назад. Но если бы Вы привели пример - был бы благодарен.


Цитата

тем что тип может быть слишком длинным чтобы его написать


Для решения этой проблемы существует система пакетов и хорошие IDE. 

Цитата

или неизвестным вообще
 

Есть такое дело, однако я не уверен что "Вывод типов" - самое красивое решение данной ситуации.


Цитата

unspecified (может поменяться в дальнейшем) 


ИМХО - подобного  лучше стараться избегать.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
GoldFinch
Дата 15.5.2010, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Vasay,
Код

#include <boost/bind.hpp>

int foo(int&){return 0;}

int main()
{
    int x;

    typedef boost::_bi::bind_t<int, int (__cdecl *)(int &), boost::_bi::list1<boost::reference_wrapper<int> > > bind_ret_t;
    bind_ret_t f= boost::bind(foo, boost::ref(x));
}

вот это пример типа который
1) длиный
2) неизвестный (чтобы его узнать мне пришлось сгенерить ошибку компиляции)
3) в boost.bind типы возвращаемые boost::bind() не указаны, они могут поменяться в следующей версии библиотеки
PM MAIL ICQ   Вверх
Любитель
Дата 15.5.2010, 13:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Ну, поехали...

Цитата(Vasay @  15.5.2010,  01:10 Найти цитируемый пост)
в Java пока этого нет

AFAIK, в какой-то там яве (7-ой?) обещали/предлагали что-то такое:
Код

ArrayList<String> list = new();


Это немного наизнанку по сравнению с классическим подходом, но цель-то такая же. Избежать дублирования информации. Это одна из задач, решаемых выводом типов.

Цитата(Vasay @  15.5.2010,  10:37 Найти цитируемый пост)
А чем это удобно? На первый взгляд, кроме ухудшения читаемости кода и увеличении времени компиляции программы ничего не дает. Но я могу и ошибаться - устриц не ел

Ухудшения читаемости? Ну, классический пример:
Код

Dictionary<string, int> dict = new Dictionary<string, int>();
var dict = new Dictionary<string, int>();


Что читаемей?

Тут, как всегда. Мы ведь уже знает тип, раз присваиваем данные этого типа. И, классическая фраза - "если и мы, и компилятор это знаем, зачем это говорить лишний раз?". Можно, конечно, сказать, что знаем не всегда:
Код

Base obj = SomethingThatReturnsInstanceOfDerived();


Ну.. Что сказать? Во-первых, не всегда приемлем вывод типов. Но.. вот в конкретно данном случае - это зачастую повод подумать. Вполне может, что нам достаточно было бы возвращать из метода объект класса Base (всмысле декларировать метод, как возвращающий Base).

Далее. Время компиляции. На самом деле, компилятору всё равно необходимо понять какого типа выражение, поэтому увидев var/auto/etc. ему не проблема считать, что у переменной именно этот тип.

Цитата(djamshud @  15.5.2010,  11:59 Найти цитируемый пост)

GoldFinch, про буст уже написал. А пишу я на и на С, и на С++, с классами, шаблонами, покером, куртизанками и прочими ништяками, но решаю задачи средствами языка, а не нагороженных вокруг него костылей. И да, я наверное не программист, раз всегда знаю типы того, с чем работаю. 

Средства абстракции не есть костыли smile 

Цитата(djamshud @  15.5.2010,  11:59 Найти цитируемый пост)
Какое отношение с++ имеет к этой функциональщине?

Тут дело в другом. То, что type inference исторически появился в "функциональщине" - это.. просто исторически. По-моему, полезность каких-нибудь лямбд (если это не требует синтаксического насилия) уже никому не приходится доказывать?

Цитата(Vasay @  15.5.2010,  12:52 Найти цитируемый пост)
И как следствие ухудшить  читаемость кода,  остаться без подсказок IDE по методам, вывода  ***doc-ов, а так же лишиться проверки кода на стадии написания.

Ну.. Я не буду утверждать за С++, там всегда всё было плохо с ИДЕ, но шарпу и студии var ни капли не вредит. F12 по var переходит к определению нужного типа, автокомплит работает и т. д. Короче - всё отлично с ИДЕ smile

Добавлено @ 13:30
Цитата(Vasay @  15.5.2010,  13:10 Найти цитируемый пост)
Для решения этой проблемы существует система пакетов и хорошие IDE. 

Когда говорят про "длинные типы" обычно имеют ввиду всякие темлпейты/дженерики. На самом деле, без вывода типов решение есть только в С++ (из мейнстримных языков) - это typedef. Есть using type = ... в шарпе, но это действует только в пределах одного файла.

Цитата(Vasay @  15.5.2010,  13:10 Найти цитируемый пост)
ИМХО - подобного  лучше стараться избегать. 

Ты слишком строг! smile На самом деле гибкость - это хорошо. У нас же не всякие руби с пайтонами - всё равно всё при компиляции увидим (если вдруг на новой версии библиотеки нет какого-то метода и пр.) smile 


Это сообщение отредактировал(а) Любитель - 15.5.2010, 14:54


--------------------
PM MAIL ICQ Skype   Вверх
djamshud
Дата 15.5.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



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

>длиный
Да, бывает неприятно, но при "нормальном" для меня кодировании проблема сводится на нет typedef-ами и макросами.

>неизвестный (чтобы его узнать мне пришлось сгенерить ошибку компиляции)
Скажите спасибо используемой библиотеке костылей, палок и веревок.

>в boost.bind типы возвращаемые boost::bind() не указаны, они могут поменяться в следующей версии библиотеки 
См. предыдущий пункт.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Любитель
Дата 15.5.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



К слову о мнимых проблемах в ИДЕ. Вот мы пишем какой-нить экспрешен (скажем, вызов метода) и ставим точку. Неужели при этом мы не увидим списка мемберов?! Но ведь мы не говорили (в данной строке) о типе выражения? Сделать тривиальный парсинг в рантайме современные ИДЕ просто обязаны. Вон для скриптовых языков пытаются сделать нормальную работу с ИДЕ (скажем, в той же студии недавно оч хвалились, что JS-ный эдитор теперь имеет виртуальную машину, чтоб заметить динамически добавляемые поля), а мы тут боимся за мирный вывод типов..


--------------------
PM MAIL ICQ Skype   Вверх
GoldFinch
Дата 15.5.2010, 13:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, твоя позиция понятна, но если ты не используешь полностью ни язык ни библиотеки, то что ты забыл в этой теме?
Так кто угодно может сказать "*** не нужно, потому что это плохо, потому что мне это не нужно, потому что я это не юзаю".

То что ты говоришь "поделки", "костыли, палки и веревки" - так это говорит только о том, что ты не знаешь языка, не понимаешь как он работает и как им пользоваться.
Да язык сложный, библиотеки сложные, но если не можешь с этим разобраться - то зачем это ругать? А те кто разобрались - те юзают и радуются %)
PM MAIL ICQ   Вверх
djamshud
Дата 15.5.2010, 14:07 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



GoldFinch, я, как и все остальные наверно, в этой теме провожу время. И выражаю свою гражданскую позицию, которая заключается в том, что в изначально мощные изящные языки (я говорю все же скорее о с++, ибо он мне ближе) тянут бяки, которые безусловно хороши там, где им место, там, где они заложены в архитектуру языка. В с++ же это "костыли, палки и веревки", которые нарушают его изящную концепцию и приводят к тому, что программисты начинают думать не в терминах языка, а в терминах "костылей, палок и веревок" в то время, как задача изумительно (ИЧСХ, чаще проще) решается без них.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 15.5.2010, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, по тому что ты говоришь - получается что ты не знаешь языка, 
не знаешь настолько чтобы вообще говорить о "терминах языка"

STL - это часть языка.
алгоритмы - это часть языка.
функторы которые нужны алгоритмам - тоже часть языка.
адапторы в <functional> - часть STL но, она устарела, по этому сделали boost.bind, сейчас std::tr1::bind
tr1 - это во всех смыслах часть языка

термины языка это например Callable. В С++98 это как правило подразумевает собой функтор, как правило результат bind

djamshud, знаешь ли ты такой термин языка, как адаптер?

Это сообщение отредактировал(а) GoldFinch - 15.5.2010, 14:21
PM MAIL ICQ   Вверх
djamshud
Дата 15.5.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



>STL - это часть языка.
>алгоритмы - это часть языка.
>функторы которые нужны алгоритмам - тоже часть языка.

Да

><functional> - часть STL но, она устарела, по этому сделали boost.bind, сейчас std::tr1::bind
>tr1 - это во всех смыслах часть языка

Костыли. Которые к сожалению наверное скоро попадут в язык, но в данный момент это еще не стандарт.

>djamshud, по тому что ты говоришь - получается что ты не знаешь языка, 
>не знаешь настолько чтобы вообще говорить о "терминах языка"

smile

Добавлено через 6 минут и 56 секунд
>djamshud, знаешь ли ты такой термин языка, как адаптер?

Я знаю такой паттерн проектирования, который никаким боком не относится к языку. Мы же говорим о языковых конструкциях.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 15.5.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, а про bind1st, mem_fn и еще кучу других биндеров и адаптеров ты слышал? 
это знаешь ли стандарт С++98

Добавлено @ 14:40
Цитата(djamshud @  15.5.2010,  15:21 Найти цитируемый пост)
Я знаю такой паттерн проектирования, который никаким боком не относится к языку. Мы же говорим о языковых конструкциях. 

Цитата("ISO\IEC 14882 20.3")

Код

/ / 20.3.6, binders:
template < class Operation > class binder1st ;
template < class Operation , class T>
binder1st < Operation > bind1st ( const Operation &, const T&);
template < class Operation > class binder2nd ;
template < class Operation , class T>
binder2nd < Operation > bind2nd ( const Operation &, const T&);
/ / 20.3.7, adaptors:
template < class Arg , class Result > class pointer_to_unary_function ;
template < class Arg , class Result >
pointer_to_unary_function <Arg ,Result > ptr_fun ( Result (*)( Arg ));
template < class Arg1 , class Arg2 , class Result >
class pointer_to_binary_function ;
template < class Arg1 , class Arg2 , class Result >
pointer_to_binary_function <Arg1 ,Arg2 ,Result >
ptr_fun ( Result (*)( Arg1 , Arg2 ));
/ / 20.3.8, adaptors:
template < class S , class T > class mem_fun_t ;
template < class S , class T , class A > class mem_fun1_t ;
template < class S , class T>
mem_fun_t <S,T > mem_fun (S (T::*f )());
.................................................................


binders and adaptors

Это сообщение отредактировал(а) GoldFinch - 15.5.2010, 14:41
PM MAIL ICQ   Вверх
djamshud
Дата 15.5.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



GoldFinch, я понимаю, к чему ты клонишь. Но само по себе наличие этого в стандарте с++ не делает их "правильными" в моих глазах. К сожалению библиотеки (в т.ч. стандартные) изобилуют идеями, доведенными до идиотизма. Что влечет за собой необходимость введения все новых и новых идей, которые бы обслуживали старые.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
JackYF
Дата 15.5.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



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


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 15.5.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(JackYF @  15.5.2010,  14:54 Найти цитируемый пост)
оно ещё даёт возможности переписывать меньшее количество кода при изменении возвращаемых значений фунцкий. 

Во!

Я вначале хотел сказать, что вывод типов позволяет минимизировать количество изменений при рефакторинге, но что-т подумал, что все скажут, что "фигня, моя ИДЕ итак это делает в один клик". Но, учитывая, что про С++ столько говорим - я думаю, что можно акцентировать и на этом плюсе. smile 


--------------------
PM MAIL ICQ Skype   Вверх
Vasay
Дата 15.5.2010, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 2
Всего: 73



Любитель, 



В целом, я с вами согласен.

Понятно, что местами применение вывода типов будет весьма уместно. А там где неуместно - можно его и не применять.

Но, как показывает практика - чем больше свободы, тем ближе анархия. Люди начнут писать auto (var, ....)  везде, где только можно, и мы будем иметь код, типа:

Код


auto myVar = someObj.someMethod();




И человек, который будет в дальнейшем читать этот код, будет вынужден лезть в доки класса, к которому принадлежит someObj, что бы посмотреть, что же там возвращает someMethod.  И дай бог, чтоб IDE нормально все это разбирали.


Это сообщение отредактировал(а) Vasay - 15.5.2010, 23:07


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
GoldFinch
Дата 15.5.2010, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Vasay, в моей ИДЕ достаточно навести мышку на "someMethod" чтобы получить ее прототип и коммент с доками к ней (если есть)
PM MAIL ICQ   Вверх
Любитель
Дата 16.5.2010, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Vasay @  15.5.2010,  23:06 Найти цитируемый пост)
И человек, который будет в дальнейшем читать этот код, будет вынужден лезть в доки класса, к которому принадлежит someObj, что бы посмотреть, что же там возвращает someMethod.  И дай бог, чтоб IDE нормально все это разбирали.

Ещё раз. А почему этой проблемы нет, если мы не присваиваем переменной (ну мало ли) а сразу вызываем парочку методов?
Код

someObj.someMethod().someAnotherMethod();


Понятно, что длинная цепочка обычно просто плохочитабельная, хотя тоже зависит от подхода - есть и вполненормальные цепочечноориентированные методы, тот же LINQ на самом деле. Но сам факт - что возвращает someMethod строго говоря мы не знаем, тем не менее мы вполне можем так написать - я не вижу в этом ничего плохого.

Да, поддержка со стороны IDE нужна, опять-таки, я не говорю про С++ - там вообще всё иначе (по крайней было в моё время). Но для ИДЕ ни с цепочками, ни с "варами" проблем нет.

Было время, когда я одобрял var только тогда, когда в присваиваемом экспрешене явно было видно тип (либо вызов конструктора, либо вызов какого-нибудь статик-проперти Instance или Current). Однако на текущем проекте и я, и не только я активно используем var - ни разу проблем не было. Даже, на мой взгляд код чище и читабельней smile


--------------------
PM MAIL ICQ Skype   Вверх
Joil
Дата 16.5.2010, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 24.1.2008

Репутация: нет
Всего: 8



Я не в теме пока что... А к методам это применительно? т е можно написать что то типа:
Код

auto getVar() {
    //bla bla bla
}

По сабжу, поставил Зло, т. к. мне показалось это не совсем удобным с т. з. читабельности и не очень красивым кодом. Хотя может я изменю свое мнение, нужна практика (но так как в Java этого нет, пока ее не будет).

Это сообщение отредактировал(а) Joil - 16.5.2010, 11:14
--------------------
Who had deceived thee so often as thyself? © Benjamin Franklin--------------------Always bear in mind that your own resolution to succeed is more important than any other. © Abraham Lincoln--------------------If you need it - do it, if you want it - take it! © ...
PM MAIL ICQ   Вверх
Любитель
Дата 16.5.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Joil @  16.5.2010,  11:09 Найти цитируемый пост)
Я не в теме пока что... А к методам это применительно? т е можно написать что то типа:

К доступным извне - нет. К "локальным", если такое понятие есть в языке - да. В случае шарпа - это лямбды. НУ скаем, типичный пример:
Код

var orderedProducts = productsList.OrderBy(p => p.Name);


p => p.Name это метод (в данном случае). С параметром типа Product и результатом типа string. Ничего явно мы не писали.


--------------------
PM MAIL ICQ Skype   Вверх
KelTron
Дата 17.5.2010, 04:52 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Цитата(GoldFinch @  15.5.2010,  10:56 Найти цитируемый пост)
какбэ не всегда программисту известен тип того с чем он работает

Тогда и выведение типов не поможет, оно совсем не для этого..

Добавлено через 9 минут и 46 секунд
Цитата(Любитель @  16.5.2010,  11:52 Найти цитируемый пост)
К доступным извне - нет. К "локальным", если такое понятие есть в языке - да

По моему он про другое, т.е. можно ли в определении функции возвращаемый тип описывать как var / auto.
Так делать нельзя, ибо var / auto это НЕ тип, это ключевое слово языка, которое говорит компилеру, чтобы тот сам определил тип по выражению в правой части...

Это сообщение отредактировал(а) KelTron - 17.5.2010, 04:56


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Любитель
Дата 17.5.2010, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(KelTron @  17.5.2010,  04:52 Найти цитируемый пост)
По моему он про другое, т.е. можно ли в определении функции возвращаемый тип описывать как var / auto.
Так делать нельзя, ибо var / auto это НЕ тип, это ключевое слово языка, которое говорит компилеру, чтобы тот сам определил тип по выражению в правой части...

А чем лямбды (в случае использования их как делегатов, а не как expression tree) не являются функцией? Для которой мы не задаём (явно) возвращаемый тип. В случае какого-нибудь Nemerle можно описать и вполне себе именованную локальную функцию:
Код

def SomeMethod(products : IEnumerable[Product]) : void
{
    def ProductNameSelector(p) { p.Name };
    def orderedProducts = products.OrderBy(ProductNameSelector);
    // ...
}


В то же время можно пользоваться и лямбдами (более похоже на шарповский вариант):
Код

def SomeMethod(products : IEnumerable[Product]) : void
{
    def orderedProducts = products.OrderBy(fun(p) { p.Name });
    // ...
}


Для методов же класса (а не локальных функций) в Nemerle вывод типов принципиально не поддерживается тоже.


--------------------
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 17.5.2010, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Для C# - определенно добро - учитывая как в .Net любят обзывать классы, да и при работе с LINQ удобно.

Хотя, по большому счету, syntactic sugar.
PM MAIL   Вверх
GoldFinch
Дата 17.5.2010, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Цитата(KelTron @ 17.5.2010,  05:52)
Цитата(GoldFinch @  15.5.2010,  10:56 Найти цитируемый пост)
какбэ не всегда программисту известен тип того с чем он работает

Тогда и выведение типов не поможет, оно совсем не для этого..

программисту не известно, а компилятору известно.
смотрите пример выше.
PM MAIL ICQ   Вверх
KelTron
Дата 19.5.2010, 10:37 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Цитата(Любитель @  17.5.2010,  05:58 Найти цитируемый пост)
Для методов же класса

Именно об этом я и говорю, если это значило то же что и
Цитата(Любитель @  16.5.2010,  11:52 Найти цитируемый пост)
К доступным извне

значит я не не правильно тебя понял.

Цитата(Любитель @  17.5.2010,  05:58 Найти цитируемый пост)
А чем лямбды (в случае использования их как делегатов, а не как expression tree) не являются функцией?

На счёт лямбд, мне кажется пример некорректен, т.к. у функции OrderBy вполне явный тип у параметра.
Мы можем написать так:
Код

delegate int XXX();
XXX x = () => 1 + 2;

Но так нет:
Код

delegate int XXX();
var x = () => 1 + 2;


Цитата(GoldFinch @  17.5.2010,  13:26 Найти цитируемый пост)
программисту не известно, а компилятору известно.

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





--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
mes
Дата 19.5.2010, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(KelTron @  19.5.2010,  09:37 Найти цитируемый пост)
Если компилятору известно, значит и программисту известно

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

Цитата(KelTron @  19.5.2010,  09:37 Найти цитируемый пост)
 Другое дело если ему лень посмотреть, что там функция возвращает

бывает это не столько лень, сколько затратно .. к тому же самому программисту это и не нужно, так чего на это тратить силы ? smile

Цитата(KelTron @  19.5.2010,  09:37 Найти цитируемый пост)
но тогда как он будет работать с чем то ему неизвестным... 

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

Цитата(KelTron @  19.5.2010,  09:37 Найти цитируемый пост)
Если ты говоришь про то, что тип очень неудобен для восприятия то да, соглашусь, но это не значит, что он неизвестен, всё-таки это разные понятия

да разные, и в обоих случаях есть польза от автоопределения.




--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 19.5.2010, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



KelTron, все что надо знать программисту о типе - это то каким концепциям он соответствует. конкретный тип знать не зачем.

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

для typedef'ов есть typeof (decltype)
PM MAIL ICQ   Вверх
KelTron
Дата 19.5.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Цитата(mes @  19.5.2010,  10:51 Найти цитируемый пост)
программисту для работы не нужен реальный тип, ему нужно знать только какой интерфейс поддерживается.

Цитата(GoldFinch @  19.5.2010,  11:07 Найти цитируемый пост)
KelTron, все что надо знать программисту о типе - это то каким концепциям он соответствует. конкретный тип знать не зачем.

Да кто с этим спорит..?

Похоже мы не понимаем друг друга.. Пара вопросов для уточнения:
Разве в определении boost::bind() не указано что оно возвращает, и мы не можем написать ЧтоТо ххх = boost::bind() ?

Цитата(mes @  19.5.2010,  10:51 Найти цитируемый пост)
чтоб программисту стало известно, он должен изучить весь контекст, который к тому же со временем ( например с новой версией библиотеки) может измениться

Но вот это ЧтоТо, возвращаемое boost::bind(), ведь останется прежним?


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
kemiisto
Дата 19.5.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Проголосовал за добро, но, как и любое "добро", использовать надо с осторожностью. smile Что прочуствовал, поигравшись пару дней со Scala (где-то раньше читал, не могу найти smile ) - не надо использовать вывод типов:
  • В выражениях, где происходит присваивание константы одного из встроенных типов данных. Специфицировать тип явно:
    Код

    val x: Double = 0.0

    а иначе компилятор может вывести что-то другое. Скажем, если опустить Double в примере выше, тип x будет Float.
  • В выражениях, где происходит присваивание значения выражения, тип которого трудно визуально определить. Всякие уже упомянутые цепочечные вызовы и т.п.
  • Ну и ежу понятно, в случае наличия иерархии типов и необходимости, скажем, хранить ссылку на экземпляр конкретного типа-потомка в переменной абстрактного типа-родителя. Тут точно не то выведиццо.


Это сообщение отредактировал(а) kemiisto - 19.5.2010, 12:33


--------------------
PM MAIL WWW GTalk Jabber   Вверх
mes
Дата 19.5.2010, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(kemiisto @  19.5.2010,  11:32 Найти цитируемый пост)
Ну и ежу понятно, в случае наличия иерархии типов и необходимости, скажем, хранить ссылку на экземпляр конкретного типа-потомка в переменной абстрактного типа-родителя. Тут точно не то выведиццо.

Так естественно голову надо голову иметь, а не пихать _вся повдюду_ smile Вопрос, имхо, в том , поможет ли подобное программисту облегчить выражение его мыслей на ЯП.
smile

Цитата(KelTron @  19.5.2010,  11:03 Найти цитируемый пост)
Но вот это ЧтоТо, возвращаемое boost::bind(), ведь останется прежним? 

это _ЧтоТо_ зависит от того, что биндим и состоит из такой цепочки адаптеров, которую программист в уме и вычислить не сможет smile

Цитата(KelTron @  19.5.2010,  11:03 Найти цитируемый пост)
Разве в определении boost::bind() не указано что оно возвращает 


http://www.boost.org/doc/libs/1_43_0/libs/bind/bind.html :
Цитата

bind

template<class R, class F> unspecified-1 bind(F f)

Returns: A function object λ such that the expression λ(v1, v2, ..., vm) is equivalent to f(), implicitly converted to R.


Это сообщение отредактировал(а) mes - 19.5.2010, 13:10


--------------------
PM MAIL WWW   Вверх
Любитель
Дата 19.5.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(KelTron @  19.5.2010,  10:37 Найти цитируемый пост)
На счёт лямбд, мне кажется пример некорректен, т.к. у функции OrderBy вполне явный тип у параметра.
Мы можем написать так:

Ты путаешь разные вещи. Вывод типов это не только var. Я говорил про вывод типа возвращаемого значения из локальной функции (лямбды в случае шарпа). И тип выводится из контекста использования. Это вполне себе относится к выводу типов.

В шарпе вывод типов не столь широк, как возможен в принципе. Напомню, как можно делать в том же немерле:
Код

def dict = Dictionary();
dict.Add("someKey", 123);


Dictionary в шарпе - это дженерик-класс, тем не менее мы не указываем явно дженерик параметры, они выводятся из дальнейшего использования. Вообще, в Немерле очень продвинутый движок вывода типов (что впрочем уже спорно, всему есть своя мера).


--------------------
PM MAIL ICQ Skype   Вверх
MAKCim
Дата 19.5.2010, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



неоднозначный вопрос
в каждом случае по-разному


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
KelTron
Дата 19.5.2010, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Цитата(Любитель @  19.5.2010,  13:45 Найти цитируемый пост)
Вывод типов это не только var. Я говорил про вывод типа возвращаемого значения из локальной функции 

На счёт дженериков согласен, не учёл. Но всё равно не то же самое, тут всё-таки более "узкий" вывод..

Цитата(mes @  19.5.2010,  12:58 Найти цитируемый пост)
это _ЧтоТо_ зависит от того, что биндим и состоит из такой цепочки адаптеров, которую программист в уме и вычислить не сможет

Т.е. по сути запись вида ЧтоТо ххх = boost::bind() невозможна для смертного и единственный способ это auto xxx = boost::bind()?
Как печально..





--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
mes
Дата 19.5.2010, 17:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(KelTron @  19.5.2010,  16:21 Найти цитируемый пост)
Т.е. по сути запись вида ЧтоТо ххх = boost::bind() невозможна для смертного и единственный способ это auto xxx = boost::bind()?
Как печально..

не единственный.. smile 
пока нет auto можно использовать boost::function smile но это не отменяет нужности auto.

например бустовская реализация концепции foreach :
http://www.boost.org/doc/libs/1_42_0/boost/foreach.hpp
обратите внимание сколько завязано на auto_any..  а будь в наличие автоопределение типа все выглядило бы гораздо проще smile

да чего далеко ходить вот например обход вектора векторов..
Код

for (std::vector<std::vector<int> >::iterator i = v.begin(); i != v.end(); ++i ) 
  for (std::vector<std::vector<int> >::value_type::iterator  j = i->begin(); j != i->end(); ++j ) 
  ...

сравните с этим:
Код

 for (auto i = v.begin(); i != v.end(); ++i)
  for (auto j = i->begin(); j != i->end(); ++j)
  ...

хотя конечно еще лучше будет так :
Код

 for (auto i: v)
  for (auto j: *i) 
   ...   

smile


Это сообщение отредактировал(а) mes - 19.5.2010, 17:47


--------------------
PM MAIL WWW   Вверх
k0rvin
Дата 26.5.2010, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(mes @ 19.5.2010,  17:30)
хотя конечно еще лучше будет так :
Код

 for (auto i: v)
  for (auto j: *i) 
   ...   

smile

а еще лучше так:
Код

 for (i: v)
  for (j: *i) 
   ...   



--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
mes
Дата 26.5.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(k0rvin @  26.5.2010,  18:15 Найти цитируемый пост)
а еще лучше так:

да, но это уже в С++ не затолкнуть.. как в вашем случае отличить какую i использовать внешнюю или новосозданную локальную ? 
smile

Добавлено через 1 минуту и 31 секунду
также не получится указать, как ссылку или как значение рассматривать итератор.


--------------------
PM MAIL WWW   Вверх
k0rvin
Дата 29.5.2010, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(mes @ 26.5.2010,  22:48)
Цитата(k0rvin @  26.5.2010,  18:15 Найти цитируемый пост)
а еще лучше так:

да, но это уже в С++ не затолкнуть.. как в вашем случае отличить какую i использовать внешнюю или новосозданную локальную ? 
smile

только новосозданную. использовать внешнюю -- дурной тон. как минимум

Добавлено через 1 минуту и 12 секунд
Цитата(mes @ 26.5.2010,  22:48)
также не получится указать, как ссылку или как значение рассматривать итератор.

и каким же образом auto указывает?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
mes
Дата 29.5.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(k0rvin @  29.5.2010,  00:23 Найти цитируемый пост)
и каким же образом auto указывает? 

Код

for ( auto& i : array ) {}



Это сообщение отредактировал(а) mes - 29.5.2010, 10:40


--------------------
PM MAIL WWW   Вверх
k0rvin
Дата 31.5.2010, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(mes @ 29.5.2010,  10:38)
Цитата(k0rvin @  29.5.2010,  00:23 Найти цитируемый пост)
и каким же образом auto указывает? 

Код

for ( auto& i : array ) {}

ну дык
Код

for ( &i : array ) {}



--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
mes
Дата 31.5.2010, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(k0rvin @  31.5.2010,  16:12 Найти цитируемый пост)
ну дык

ну дык:
Цитата(mes @  26.5.2010,  21:48 Найти цитируемый пост)
 но это уже в С++ не затолкнуть.. 

так как &i означает совсем другое..

тогда уж что то наподобие
for ( [&] i : array ) {}
но это по сути тот же авто только другими символами.. smile
а зачем изобретать ? если все и  так без проблем ложится..

кстати недостатки предыдущих ("обычных") примеров фора не столько в количестве букв, сколько в напряге программиста подбирать нужное поведение..
так что,имхо, просто отсутствие слова auto не  дает значительных преимуществ.







--------------------
PM MAIL WWW   Вверх
k0rvin
Дата 31.5.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(mes @ 31.5.2010,  20:18)
Цитата(k0rvin @  31.5.2010,  16:12 Найти цитируемый пост)
ну дык

ну дык:
Цитата(mes @  26.5.2010,  21:48 Найти цитируемый пост)
 но это уже в С++ не затолкнуть.. 

так как &i означает совсем другое..

тогда уж что то наподобие
for ( [&] i : array ) {}
но это по сути тот же авто только другими символами.. smile
а зачем изобретать ? если все и  так без проблем ложится..

кстати недостатки предыдущих ("обычных") примеров фора не столько в количестве букв, сколько в напряге программиста подбирать нужное поведение..
так что,имхо, просто отсутствие слова auto не  дает значительных преимуществ.

отсюда вывод: проблемы С++ в его долбанутой грамматике

а что означает &i? вроде как & -- взятие адреса?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
mes
Дата 31.5.2010, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(k0rvin @  31.5.2010,  19:36 Найти цитируемый пост)
отсюда вывод: проблемы С++ в его долбанутой грамматике

в принципе согласен, но для объективности скажем, в данном случае, не "проблемы", а "затруднения и неудобства".
smile
 плюс подобная грамматика свойственна не только С++.. к тому же ему она досталась по наследству..

Цитата(k0rvin @  31.5.2010,  19:36 Найти цитируемый пост)
что означает &i? вроде как & -- взятие адреса? 

 smile 



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1718 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.