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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод типов 
:(
    Опции темы
 
Как вы относитесь к выводу типов?
Вывод типов - добро [ 20 ]  [74.07%]
Вывод типов - зло [ 2 ]  [7.41%]
Не знаю, что это такое [ 5 ]  [18.52%]
Всего проголосовавших: 27
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

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

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


 




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


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

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