Здравствуйте, Timur I., Вы писали:
TI>Здравствуйте! TI>Как считаете, стоит ли тратить время на изучения "альтернативных" языков и технологий ? Под альтернативными я понимаю не C++/Java/Php/Perl/C# Или это будет пустая трата времени и сил ?
Можешь глянуть также Форт. Нестандартный язык. Не похожий ни на один из тех что я изучал ранее.
Очень помог мне посмотреть с "другой стороны" на программирование.
На сайте в списке литературы есть книжица:
"Способ мышления — ФОРТ. Язык и философия для решения задач." (c) Лео Броуди.
Даже если не будешь использовать сам Форт, то советую ее прочитать, помогает правильно мыслить при написании программ.
Здравствуйте, EvilChild, Вы писали:
EC>Т.е. когда мы возвращаем экземпляр анонимного типа, компилятор молчаливо создаёт в метаданных новый тип и это дело можно спокойно юзать в публичных интерфейсах сборки? Имена наверное стрёмные? Как у перечислителей, что C# компилятор создаёт? А если мы из 2х методов возвращаем структурно эквивалентные типы он их сведёт к одному в метаданных?
Эти типы представляют из себя буквально то, что я написал. Т.е. это просто generic типы, которых тупо набито в библиотеки поддержки компилятора примерно до 20 штук. Соотвественно, из других .NET языков они так и будут видны. Например, в Н:
void Bar()
{
Tuple<string,int> tp = Foo();
string x = tp.field0;
int y = tp.field1;
}
В самом Н для них сделана специальная, очень удобная поддержка, которая, естественно, не доступна из C#. Но, тем не менее, использовать сами типы из других языков вполне возможно.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Эти типы представляют из себя буквально то, что я написал. Т.е. это просто generic типы, которых тупо набито в библиотеки поддержки компилятора примерно до 20 штук. Соотвественно, из других .NET языков они так и будут видны. Например, в Н:
Вижу, это я протупил. Тогда действительно странно почему разработчикам C# это не сделать.
Я правильно понимаю, что если мы воспользовались этой фичей, то мы попадаем на деплоймент библиотеки поддержки?
now playing: Future Prophecies — Miniamba (featuring Mari Boine)
Здравствуйте, Shisaa, Вы писали:
S>Даже если не будешь использовать сам Форт, то советую ее прочитать, помогает правильно мыслить при написании программ.
Раскрыт сикрет мастера Йоды: "Программист форте на старый он."
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, EvilChild, Вы писали:
EC>Здравствуйте, VladD2, Вы писали:
VD>>ну, и совместимасть по совпадению типа и имени поля. EC>По типу было бы достаточно — структурная эквивалентность. Было бы действительно полезно.
Это был бы еще один косяк. Делая "а" (вводя имена у полей), надо делать и "б" (учитывать их при сопоставлении).
Проблема в том, что без изменения рантайма (по словам Хейслсберга) сопсоставление сдаелать нельзя. А менять рантайм они что-то боятся. В общем, прогнали лажу, на мой взгляд.
VD>>Короче огнаниченная утиная типизация. EC>Утиная типизация вроде как предполагает позднее связывание,
Нет. Она предпологает сопоставление по именам. Объект (или тип) должен всего лишь крякать как утка, плавать как утка и летать как утка.
EC>если не брать в расчёт C++ templates, EC>а здесь всё статически можно проверить или я что-то путаю?
Путаешь. Шаблоны С++ работают на уровне АСТ на котором типизации еще просто нет. С их помощью генерирвется АСТ которое уже в готовом виде типизируется. Учитывая отсуствие поддержки компонентности это в С++ прокатывает. В дотнете это не прокатывает, так как типы должны храниться в бинарном виде (типизированными по определению). Так что решение из С++ тут никак не катит. Но можно просто подменять типы имеющие одну и ту же структуру в рантайме. Скажем загружается сборка использующая анонимный тип { string Name; DateTime Age } который уже был загружен другой сборкой... рантайм определяет это и подменяет ссылку на тип той что была порождена первой сборкой.
Собственно это и есть изменение которое нужно сделать в рантайме. Если предполжить, что код рантайма хорошо струтурирован и спокойно подвергается расширения, то это работа на день (максимум неделю). Так что зачем в МС прогоняют лажу я понять не могу.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, IT, Вы писали:
IT>Главное, что проблема стоит выеденного яйца. Вариант туплов в Н не требует никакой рантайм поддержки и не имеет таких проблем.
Проблема в том, что они выбрали другой дизайн, но не смогли его довести до ума при воплощении в жизнь.
А сам дизайн, в общем-то, выглядит даже лучше чем кортежи из из ФЯ... на мой взгляд.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, EvilChild, Вы писали:
EC>Вижу, это я протупил. Тогда действительно странно почему разработчикам C# это не сделать.
Потому что дизайнеры C# 3.0 решили сделать именованные поля у неименованных типов. Мол это привычнее обывателям и больше защищает от ошибок (ведь в кортеже можно легко перепутать значения местами, если они имеют один тип). Но такой тип уже дженериком не опишишь. Компилятору приходится каждый раз порождать новый (скрытый) класс. Ну, а так как разные библиотеки порождают разные (физически) классы, то они не совместимы. Далее думаю ясно.
EC>Я правильно понимаю, что если мы воспользовались этой фичей, то мы попадаем на деплоймент библиотеки поддержки?
Правильно. Только C# 3.0 тоже вынужден ввести новую библиотеку которую прийдется поставлять отдельно. Так что это не проблема для разработчиков этого языка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Timur I., Вы писали:
TI>Здравствуйте! TI>Как считаете, стоит ли тратить время на изучения "альтернативных" языков и технологий ? Под альтернативными я понимаю не C++/Java/Php/Perl/C# Или это будет пустая трата времени и сил ?
Друг, здесь мнений много, но послушай и моё. С помощью таких вещей как Java или C# уже можно зарабатывать миллионы долларов.
Мой тебе совет: заработай их, а потом решай, нужно тебе что-то или нет, т.е. отталкивайся от цели к средствам, а не от средств в поисках цели. Жинь коротка, а дни лукавы и обманчивы, стоит ли её тратить на все языки мира или лучше это время подарить своей семье?
Здравствуйте, Java2, Вы писали:
TI>>Как считаете, стоит ли тратить время на изучения "альтернативных" языков и технологий ? Под альтернативными я понимаю не C++/Java/Php/Perl/C# Или это будет пустая трата времени и сил ?
J>Друг, здесь мнений много, но послушай и моё. С помощью таких вещей как Java или C# уже можно зарабатывать миллионы долларов.
Миллионы долларов проще заработать при помощи нефти/банков/героина, etc. А вот с Java/C# заработать миллионы крайне трудно. Если только самому не основать мегакорпорацию, в которой мартышки будут за ломоть хлеба писать на Java/C#
J>Мой тебе совет: заработай их, а потом решай, нужно тебе что-то или нет, т.е. отталкивайся от цели к средствам, а не от средств в поисках цели. Жинь коротка, а дни лукавы и обманчивы, стоит ли её тратить на все языки мира или лучше это время подарить своей семье?
Иногда нужно уделить своё время самосовершенствованию. Хотя бы для того, чтобы в будущем заработать больше денег за меньшее время, и подарить сэкономленное время (и деньги) семье. В этом вопросе поможет только здравый смысл. Главное — не ударяться в крайности.
Нельзя "лучше изучить" Java/C#. Можно только стать лучшим специалистом. А для этого, в том числе, нужно и расширить кругозор. Причём это касается не только языков, и даже не только программирования.
Здравствуйте, Java2, Вы писали:
J>Здравствуйте, Timur I., Вы писали:
TI>>Здравствуйте! TI>>Как считаете, стоит ли тратить время на изучения "альтернативных" языков и технологий ? Под альтернативными я понимаю не C++/Java/Php/Perl/C# Или это будет пустая трата времени и сил ?
J>Друг, здесь мнений много, но послушай и моё. С помощью таких вещей как Java или C# уже можно зарабатывать миллионы долларов.
Здравствуйте, konsoletyper, Вы писали:
K>Здравствуйте, Java2, Вы писали:
TI>>>Как считаете, стоит ли тратить время на изучения "альтернативных" языков и технологий ? Под альтернативными я понимаю не C++/Java/Php/Perl/C# Или это будет пустая трата времени и сил ?
J>>Друг, здесь мнений много, но послушай и моё. С помощью таких вещей как Java или C# уже можно зарабатывать миллионы долларов.
K>Миллионы долларов проще заработать при помощи нефти/банков/героина, etc. А вот с Java/C# заработать миллионы крайне трудно. Если только самому не основать мегакорпорацию, в которой мартышки будут за ломоть хлеба писать на Java/C#
Честным путём деньги везде трудно зарабатывать и под силу только сильным людям.
J>>Мой тебе совет: заработай их, а потом решай, нужно тебе что-то или нет, т.е. отталкивайся от цели к средствам, а не от средств в поисках цели. Жинь коротка, а дни лукавы и обманчивы, стоит ли её тратить на все языки мира или лучше это время подарить своей семье?
K>
K>Иногда нужно уделить своё время самосовершенствованию. Хотя бы для того, чтобы в будущем заработать больше денег за меньшее время, и подарить сэкономленное время (и деньги) семье. В этом вопросе поможет только здравый смысл. Главное — не ударяться в крайности.
K>Нельзя "лучше изучить" Java/C#. Можно только стать лучшим специалистом. А для этого, в том числе, нужно и расширить кругозор. Причём это касается не только языков, и даже не только программирования.
Здравствуйте, VladD2, Вы писали:
VD>Возврат значения из метода. Сделал ты красивый запрос через LINQ и хочешь поместить его в фукнцию. Ан та тебе — нельзя. Ведь запрос твой возвращает анонимный тип.
Запрос совсем не обязан возвращать именно анонимный тип. Для публичных контрактов вполне можно кортеж и явно описать. Единственное, где были бы полезны анонимные типы снаружи метода — в пределах одного класса. И тут, наверное, можно было бы реализовать подобное и без правки рантайма.
Здравствуйте, AndrewVK, Вы писали:
AVK>Запрос совсем не обязан возвращать именно анонимный тип.
Ни кто и не спорит. Вопрос только в том, что описать тип кортежа можно по месту в описании фукнции. А описать отдельный класс это геборой. Да и не будут совместимы иэти типы (анонимный и такой же, но явный). В общем, это криво.
AVK> Для публичных контрактов вполне можно кортеж и явно описать.
Дык нельзя. Нет такой возможности. Можно только классы описывать. А это несколько не то.
AVK> Единственное, где были бы полезны анонимные типы снаружи метода — в пределах одного класса. И тут, наверное, можно было бы реализовать подобное и без правки рантайма.
Анонимные типы были бы полезны везде. Текущее решение — это банальная недоработка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Alexander_S_U, Вы писали:
A_S>Здравствуйте, Lloyd, Вы писали:
L>>Здравствуйте, Timur I., Вы писали:
TI>>>Здравствуйте! TI>>>Как считаете, стоит ли тратить время на изучения "альтернативных" языков и технологий ? Под альтернативными я понимаю не C++/Java/Php/Perl/C# Или это будет пустая трата времени и сил ?
L>>Имхо, стоит.
A_S>Какие языки из "альтернативных" для общего развития посоветуете?
Здравствуйте, VladD2, Вы писали:
AVK>>Запрос совсем не обязан возвращать именно анонимный тип.
VD>Ни кто и не спорит. Вопрос только в том, что описать тип кортежа можно по месту в описании фукнции.
Ну да. Но когда кортеж является частью публичного контракта, делать этого в любом случае не стоит. Остаются приватные, и, возможно, internal методы. Но в таком раскладе править рантайм нет нужды.
VD> А описать отдельный класс это геборой. Да и не будут совместимы иэти типы (анонимный и такой же, но явный).
А зачем нужен анонимный, если уже есть явный?
AVK>> Для публичных контрактов вполне можно кортеж и явно описать.
VD>Дык нельзя. Нет такой возможности. Можно только классы описывать.
А линковский кортеж это и есть банальный класс и ничто иное. И в этом, кстати, одно из его полезных свойств, потому что другие реализации кортежей порождают код вроде x = tuple(0) или x = tuple.First вместо линковского x = tuple.X.
Здравствуйте, IT, Вы писали:
IT>Главное, что проблема стоит выеденного яйца. Вариант туплов в Н не требует никакой рантайм поддержки и не имеет таких проблем.
И как они обеспечили совместимость туплов между сборками. И что насчет именованных элементов кортежа? Нет, ну то есть я понимаю что все это сделать при желании можно, интересно как это выглядит в реальности.
Здравствуйте, AndrewVK, Вы писали:
AVK>И как они обеспечили совместимость туплов между сборками. И что насчет именованных элементов кортежа? Нет, ну то есть я понимаю что все это сделать при желании можно, интересно как это выглядит в реальности.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, IT, Вы писали:
IT>>Главное, что проблема стоит выеденного яйца. Вариант туплов в Н не требует никакой рантайм поддержки и не имеет таких проблем.
AVK>И как они обеспечили совместимость туплов между сборками. И что насчет именованных элементов кортежа? Нет, ну то есть я понимаю что все это сделать при желании можно, интересно как это выглядит в реальности.