Да, усложняют язык. При чём сильно. Достаточно почитать "этюды" от nikov'а (который, кстати, наверняка считает, что занимается чем-то очень полезным), например, вот этот
, например. Мне этот момент тоже непонятен. Язык задач не решает, ну не решает. Решают дополнительные модули, библиотеки, фреймворки, но не сам язык. Когда мне нужно было написать что-то на .Net'е (как правило, это были UI и инструментарий внутреннего пользования), я брал VS2003 и тамошний "древний" C#, затем я брал VS2005 и писал на новом C# с шаблонами (это единственное, что я заценил из нового стандарта, остальное никак и нигде не пригодилось), теперь пишу на VS2008 и совершенно не парюсь про какие-то там лямбды или Linq'и. А не парюсь, потому что по-прежнему использую фреймворки, а не язык. Был .Net 2.0, теперь .Net 3.5, WPF, WCF и прочие, — вот это то, что действительно решает проблемы заказчика.
Так вот скажите мне, зачем развивают/усложняют сам язык? Это маркетинговый ход такой, чтобы Java перегнать, или чего? Классы, методы, свойства, события, — всё! Чего для полноценной жизни не хватает ещё? Какие "навороченные" элементы языка реально используются у вас у конторе и почему? Я не вижу в этом смысла, я системщик, на C пишу, ассемблером разбавляю иногда... Может кто мне доходчиво пояснить зачем навороты в языке?
Здравствуйте, x64, Вы писали:
x64>Да, усложняют язык. При чём сильно.
Хых... скажите, а у вас хоть раз возникали какие-то трудности с шарпом на практике? Что-то сильно-сильно сомневаюсь.
Этюды nikov'a интересны в первую очередь для лениво интересующихся языком, ибо читать стандарт (подозреваю, писать тоже) -- занятие крайне трудоёмкое и неблагодарное.
Введение новых фич вовсе не означает что их тут же надо бросаться использовать. C# team просто планово закрывает corner cases, расширяя для этого функциональность языка. Если вы с этими сценариями не сталкивались — вам не горячо и не холоджно от новых фич. Если сталкивались — должны радоваться
x64>Я не вижу в этом смысла, я системщик, на C пишу, ассемблером разбавляю иногда... Может кто мне доходчиво пояснить зачем навороты в языке?
Вы сами сказали — от языка вам надо очень немногое. Может, стоит поменять шарп на что-то другое
P.S. Всё вышесказанное в двух словах: нефиг жаловаться.
x64>>ТМожет кто мне доходчиво пояснить зачем навороты в языке? L>Чтобы вместо десяти строк написать одну. И эта одна строка стала понятней десяти.
Вот так и знал, что один из ответов затронет скорость реализации задачи. Ok, тогда для полноты картины не будешь ли так любезен, не подскажешь ли, почему нельзя вместо введения новой конструкции языка реализовать пару дополнительных классов, решающих ту же задачу. А чего? Тоже одна строчка будет — вызов метода. Ммм?
Здравствуйте, x64, Вы писали:
x64>>>Может кто мне доходчиво пояснить зачем навороты в языке? L>>Чтобы вместо десяти строк написать одну. И эта одна строка стала понятней десяти.
x64>Вот так и знал, что один из ответов затронет скорость реализации задачи. Ok, тогда для полноты картины не будешь ли так любезен, не подскажешь ли, почему нельзя вместо введения новой конструкции языка реализовать пару дополнительных классов, решающих ту же задачу. А чего? Тоже одна строчка будет — вызов метода. Ммм?
Ну вот пример. Получить по строчке массив с частотами букв (например, «acccbe» → [1, 1, 3, 0, 1, ...]):
self.powers = [sum(ord(c) == ord("a") + i for c in s) for i in range(0, 26)]
и собрать строчку обратно (порядок букв не важен):
return"".join("".join(repeat(chr(ord("a") + i), self.powers[i])) for i in range(0, 26))
Здравствуйте, x64, Вы писали:
x64>>>ТМожет кто мне доходчиво пояснить зачем навороты в языке? L>>Чтобы вместо десяти строк написать одну. И эта одна строка стала понятней десяти.
x64>Вот так и знал, что один из ответов затронет скорость реализации задачи. Ok, тогда для полноты картины не будешь ли так любезен, не подскажешь ли, почему нельзя вместо введения новой конструкции языка реализовать пару дополнительных классов, решающих ту же задачу. А чего? Тоже одна строчка будет — вызов метода. Ммм?
Не любую фичу языка можно классом заменить. Возьмём шаблоны С++, каким класом ты их заменишь? Или каким классом можно анонимные функции и анонимные типы в C# заменить? А без них Linq уже не получишь.
Здравствуйте, x64, Вы писали:
x64>Вот так и знал, что один из ответов затронет скорость реализации задачи. Ok, тогда для полноты картины не будешь ли так любезен, не подскажешь ли, почему нельзя вместо введения новой конструкции языка реализовать пару дополнительных классов, решающих ту же задачу. А чего? Тоже одна строчка будет — вызов метода. Ммм?
Как пример: лямбды — там, где необходимо подписаться на событие ради пару строк, можно прямо по месту использования их написать. Как результат в классе меньше функций, следовательно, меньше сложность.
Здравствуйте, x64, Вы писали:
x64>Так вот скажите мне, зачем развивают/усложняют сам язык? Это маркетинговый ход такой, чтобы Java перегнать, или чего? Классы, методы, свойства, события, — всё! Чего для полноценной жизни не хватает ещё? Какие "навороченные" элементы языка реально используются у вас у конторе и почему? Я не вижу в этом смысла, я системщик, на C пишу, ассемблером разбавляю иногда... Может кто мне доходчиво пояснить зачем навороты в языке?
Мой взгляд на шарп со стороны. Он пытается усидеть на двух стульях, и практически повторяет судьбу C++. С одной стороны простой язык с мощным фреймворком для индустрии, на котором могут писать специалисты невысокой квалификации, с другой мощный язык для квалифицированных специалистов. Может лучше бы было разделить на два языка.
Здравствуйте, x64, Вы писали:
x64>Да, усложняют язык. При чём сильно. Достаточно почитать "этюды" от nikov'а (который, кстати, наверняка считает, что занимается чем-то очень полезным), например, вот этот
Здравствуйте, Roman Odaisky, Вы писали:
L>>>Чтобы вместо десяти строк написать одну. И эта одна строка стала понятней десяти.
Я бы не сказал что тут очень уж все понятно. Читается очень плохо (хотя, лет 10 назад меня бы подобная запись в восторг ввела, а то, что я такое могу написать и прочитать, я бы считал подтверждением своей крутости). И не сказал бы, что тут все в одну строчку, строчка уж большо длинная, каждое из выражений для меня состоит из трех строчек. Эдак можно что угодно в одну строчку длиной 100 000 000 символов запихнуть, и разбирайтесь как хотите .
На деле, мне очень нравятся некоторые из возможностей, многих из них мне не хватает. Но вот злоупотреблять этим всем не следует, как минимум от скобок рябит, а если б и скобок не было, было еще хуже. Увы, best practices для всего этого появятся наверно лет через 10 только, а сейчас будут все городить новые конструкции куда не попадя, пока в совершенстве не смогут легко такое читать. Как результат, поддерживаемость кода, написанного в таком стиле будет, увы, совсем не на высоте.
Здравствуйте, x64, Вы писали:
x64>Так вот скажите мне, зачем развивают/усложняют сам язык? Это маркетинговый ход такой, чтобы Java перегнать, или чего? Классы, методы, свойства, события, — всё! Чего для полноценной жизни не хватает ещё?
Много чего не хватает. x64>Какие "навороченные" элементы языка реально используются у вас у конторе и почему? Я не вижу в этом смысла, я системщик, на C пишу, ассемблером разбавляю иногда... Может кто мне доходчиво пояснить зачем навороты в языке?
Для того, чтобы писать меньше кода. Примеры тебе уже привели. Просто ты мыслишь набором категорий существующего языка.
Вот, к примеру, спроси ты срежнего джавного программера десять лет назад про то же самое — так он процитировал бы тебе тот же список, только без свойств и событий.
С# 3.0, в частности, позволяет получать на порядки более компактную запись некоторых фрагментов кода.
Примеры можно посмотреть здесь.
То, что ты не видишь пользы в этих средствах языка, свидетельствует об одном из двух:
1. Тебе не приходится писать код, который можно сократить при помощи новых средств (и нельзя при помощи старых).
2. Тебе приходится писать такой код, но ты считаешь его совершенно нормальным и не чувствуешь никакой избыточности.
В среднем, у большинства программистов-скептиков чаще срабатывает пункт 2, чем 1.
Он проходит после того, как попользуешься "фишкой" вплотную. Ну вот добавили в третьем шарпе ключевое слово var, и что?
Ну так тем, кто к нему привык, код вроде
мозолит глаза. Тебе, наверное, он кажется прекрасным, удобным и естественным.
Или вот те же блоки итераторов — офигенная ведь штука! Неужели тебе нравилось вручную реализовывать GetIterator/MoveNext/Current? Никакой "парой классов" ты не заменишь yield return.
А вот, скажем, тот же dynamic из четвёрки. Даже если пренебречь отвалом башки от того же Барта, он банально позволяет в разы сократить объем кода, который раньше приходилось писать для позднего связывания вызовов через Reflection. И при этом опять же в разы увеличить надёжность кода — потому что алгоритм динамического биндинга, встроенный в язык, куда как сложнее (и аккуратнее) тупого привязывания к методу по имени, которым обычно ограничивались прикладные пользователи reflection.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, x64, Вы писали: x64>Вот так и знал, что один из ответов затронет скорость реализации задачи. Ok, тогда для полноты картины не будешь ли так любезен, не подскажешь ли, почему нельзя вместо введения новой конструкции языка реализовать пару дополнительных классов, решающих ту же задачу. А чего? Тоже одна строчка будет — вызов метода. Ммм?
В шарп не вводят новые конструкции, если можно реализовать их "парой дополнительных классов".
Такая уж у них философия дизайна.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
x64>Так вот скажите мне, зачем развивают/усложняют сам язык? Это маркетинговый ход такой, чтобы Java перегнать, или чего? Классы, методы, свойства, события, — всё! Чего для полноценной жизни не хватает ещё?
Хм. А лет 10-15 назад частенько говорили, что для полноценной жизни нужны процедуры и модули. А "классы" всякие — ерунда полная и баловство бесполезное.
F>Хм. А лет 10-15 назад частенько говорили, что для полноценной жизни нужны процедуры и модули. А "классы" всякие — ерунда полная и баловство бесполезное.
Сейчас тоже самое говорят, что уже классы не очень то и нужны
Я вот в последнее время немного пишу на OCaml и начинаю соглашатся c этим мнением
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, Roman Odaisky, Вы писали:
L>>>>Чтобы вместо десяти строк написать одну. И эта одна строка стала понятней десяти. E>Я бы не сказал что тут очень уж все понятно.
Ну это просто пример неудачный
Там писалось, чтоб короче. А чтоб понятнее, например так:
F>>Хм. А лет 10-15 назад частенько говорили, что для полноценной жизни нужны процедуры и модули. А "классы" всякие — ерунда полная и баловство бесполезное.
FR>Сейчас тоже самое говорят, что уже классы не очень то и нужны FR>Я вот в последнее время немного пишу на OCaml и начинаю соглашатся c этим мнением
Странно, ведь OCaml — это Caml, к которому прикрутили объектно-ориентированный "слой".