Re[27]: Насколько важен синтаксис языка?
От: IT Россия linq2db.com
Дата: 06.09.06 14:11
Оценка: +1
Здравствуйте, Beam, Вы писали:

FDS>>Не знаю, как для Явы, а для C# — это нормально.

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

Смотрим внимательно на List<T>.ForEach(Action<T> action).

B>Зато пошли по пути расширения языка. Надоело программистам все время писать код обхода коллекции — в язык добавили foreach. Отлично! Скоро добавим ключевые слова select, collect, detect и т.п.


select точно скоро будет.

B>В C# все таки отступили от правил — изменили синтаксис.

B>В 1.0 там появились делегаты, это уже объект, ссылка на метод. Прогресс, но все равно не удобно.
B>Затем в 2.0 — появились анонимные методы. Удобно, но все еще слишком длинно.
B>И вот, наконец в 3.0 — лямбда. Вроде должно быть все ок.

B>Вот так, долго-долго шли к тому, что появилось очень давно. И, кстати, еще не дошли.


И в чём проблема? Пусть долго, но ведь дошли. В результате мы получили не просто отдельно мэйнсрим, а отдельно лямбды. Мы получили всё вместе. Или и это не устраивает?

Да и почему собственно долго? C# от роду чуть больше 4-х лет. Когда выйдет C# 3.0 ему будет 5 лет. Это много для языка?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[29]: Насколько важен синтаксис языка?
От: IT Россия linq2db.com
Дата: 06.09.06 14:11
Оценка: +1
Здравствуйте, Beam, Вы писали:

B>1. Closure — это ОЧЕНЬ УДОБНО. Они улучшают читаемость кода и его повторное использование.


+1

B>Возможно скоро не будет этих проблем в C#


Их уже нет и сейчас. Есть не большой оверхед на напсание delegate вместо fun, но это мелочь.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[12]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 06.09.06 14:12
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, Дарней, Вы писали:


ГВ>>>Этот постинг улыбнул меня своей пионерской наивностью. Я даже не нашёлся, что ответить.

Д>>Ты лучше не о чужой наивности рассуждай, а хоть что-нибудь по делу скажи. Для разнообразия.

ГВ>По какому ещё делу? Нет никакой связи между мощностью Lisp и волнами стартапов. Нет и быть не может. Мощность Lisp — это характеристика инструмента. Чтобы возникла "волна стартапов" нужно много чего, кроме самого инструмента. Если ты думаешь, что раз нет волны, то и преимущества Lisp "высосаны из пальца" — разубеждать не буду.


Что же это за преимущества, которые не дают экономических преимуществ при разработке ПО? И зачем они такие нужны?

Не уж, раз вы залезли в спор, дак не прекращайте его аргументом "мне стало неинтересно". Лучше скажите, что вы не знаете, что сказать. А если знаете, так сделайте полезное дело — поделитесь знаниями, иначе для чего вообще форум нужен?
Re[30]: Насколько важен синтаксис языка?
От: Programmierer AG  
Дата: 06.09.06 14:13
Оценка:
> Если речь идёт про тривиальное for (int i = 0; i < object.Length; i++) — то нет. Это, собственно, не дублирование кода. Не считаете же вы дублированием кода вызов одной и той же функции или применение одного и того же оператора
Любой паттерн, в котором изменяется незначительная часть — это дублирование.
Posted via RSDN NNTP Server 2.0
Re[31]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 06.09.06 14:21
Оценка: -1
Здравствуйте, Programmierer AG, Вы писали:


>> Если речь идёт про тривиальное for (int i = 0; i < object.Length; i++) — то нет. Это, собственно, не дублирование кода. Не считаете же вы дублированием кода вызов одной и той же функции или применение одного и того же оператора

PA>Любой паттерн, в котором изменяется незначительная часть — это дублирование.

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

А что, foreach(EnumeratorObject EO in Enumerator) — это не дублирование. Давайте избавимся от дублирования! И каждая программа будет занимать по 5 строчек.
Re[32]: Насколько важен синтаксис языка?
От: Programmierer AG  
Дата: 06.09.06 14:46
Оценка: +4 :)
FDSC wrote:
> PA>Любой паттерн, в котором изменяется незначительная часть — это дублирование.
> отлично, расскажите мне тогда, как избавиться от вызовов функций?
Очень просто, если этих вызовов много и они укладываются в некий
паттерн, этот паттерн выделяется в макрос или функцию высшего порядка.

> А что, foreach(EnumeratorObject EO in Enumerator) — это не дублирование. Давайте избавимся от дублирования! И каждая программа будет занимать по 5 строчек.


В приведенном примере я дублирования не вижу. Приведите пример побольше
— подумаем, как избавиться от дублирования, а пока — маленькое
лирическое отступление.

Абстракция — это присвоение имени некой сложной структуре. Языки
программирования отличаются в наибольшей степени тем, каким объектам
можно дать имя и каким образом можно комбинировать объекты. То, что в
языке Foo дублированием не считается, в языке Bar будет дублированием
просто потому, что Bar позволяет писать на более высоком уровне
абстракции. Вот, по-вашему, в коде ниже нет дублирования?
average (container) = sum(container) / num_elements(container);

Есть! Потому что, например, в языке J можно написать
average =: sum divided_by num_elements
Posted via RSDN NNTP Server 2.0
Re[32]: Насколько важен синтаксис языка?
От: Programmierer AG  
Дата: 06.09.06 14:51
Оценка:
FDSC wrote:
> А что, foreach(EnumeratorObject EO in Enumerator) — это не дублирование.
Кстати, если тело цикла — это просто вызов функции foo, то от
дублирования избавляются так: iter foo enumerator.
Posted via RSDN NNTP Server 2.0
Re[33]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 06.09.06 15:00
Оценка:
Здравствуйте, Programmierer AG, Вы писали:

>> А что, foreach(EnumeratorObject EO in Enumerator) — это не дублирование. Давайте избавимся от дублирования! И каждая программа будет занимать по 5 строчек.


PA>В приведенном примере я дублирования не вижу. Приведите пример побольше

PA>- подумаем, как избавиться от дублирования, а пока — маленькое
PA>лирическое отступление.

Ты мне скажи, чем for (int i = 0; i < Enumerator; i++)
{
........
}

отличается от foreach(EnumeratorObject EO in Enumerator?

Или, что for, что foreach — всё равно дублирование? Весь код — это дублирование тогда. Применение знака деления — дублирование. Давайте вместо a = c/b и f = d/b сделаем a, f = c, d / b — и устраним дублирование. Кому это надо?
Re[34]: Насколько важен синтаксис языка?
От: Programmierer AG  
Дата: 06.09.06 15:14
Оценка: +4
FDSC wrote:
>
> Ты мне скажи, чем for (int i = 0; i < Enumerator; i++)
> {
> ........
> }
>
> отличается от foreach(EnumeratorObject EO in Enumerator?
>
> Или, что for, что foreach — всё равно дублирование? Весь код — это дублирование тогда. Применение знака деления — дублирование. Давайте вместо a = c/b и f = d/b сделаем a, f = c, d / b — и устраним дублирование. Кому это надо?

for от foreach отличается созданием переменной int i (а может быть long
i? или size_t i? а может быть, переменная i уже используется, а потому j
или k), инициализацией нулем (а может единицей?), проверкой условия i <
container.size() (а может <= ? а может size()-1? а может не size(), а
length() или count()?) и наличием инкремента переменной (постинкремента
или пре-инкремента, это ооочень серьезный вопрос, зайдите в форум C++
. Видите, как много вопросов? Даже если код пишется на автомате, они
отнимают одну зиллионную творческой энергии, которую можно было
потратить лучше. Ну, и являются потенциальным источником ошибок.

Так что foreach в случае, когда нужно пройтись по всему
контейнеру
— однозначно upgrade. Хотя, как я уже написал, не предел
совершенству, во многих случаях само объявление переменной для элемента
контейнера (да еще и с типом) — уже дублирование.

Хао!
Posted via RSDN NNTP Server 2.0
Re[11]: Насколько важен синтаксис языка?
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.09.06 15:38
Оценка: +1
Здравствуйте, Mirrorer, Вы писали:

M>Не совсем уловил мысль..


Короче, чем сложнее задача, тем сильнее видна разница между регексами и EBDF.

VD>>мэйнстрим реально регекспы использует не часто. Многие программисты их или вообще не знают, или в них плавают.


M>Есть подозрение граничащее с уверенностью что то же самое будет и с немерловыми макросами,


Макросы в отличии от регексов можно использовать в готовом и отлаженном виде. Так что использовать их будут много и часто, а вот писать... Тут, да. Это скорее всего будет удел продвинутых прграммистов. Ну, оно и хорошо. Это все же мирный атом, а такие технологии лучше держать в квалифицированных и отвественных руках.

M> и с многострадальной лямбдой.


-1
Лямбду будет использоваться во всю. Просто нужно время.

M> Если С++ считать мейнстримом, то я уверен что то же самое можно сказать и про темплейты.


Опять -1. Шаблоны используются на право и на лево. Особенно готовые шаблонные классы. Вот метапрограммирование — это другое дело.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Насколько важен синтаксис языка?
От: vvotan Россия  
Дата: 06.09.06 16:06
Оценка:
Здравствуйте, FDSC, Вы писали:

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


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



M>>>Английский

M>>>I am teacher.
M>>>Я есть учитель.

V>>На самом деле "I am a teacher", то есть


FDS>"Я есть неопределённый экземпляр класса "учитель" "


Неопределенный это как? Конструктор не вызван?
--
Sergey Chadov

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[31]: Насколько важен синтаксис языка?
От: Lloyd Россия  
Дата: 06.09.06 16:30
Оценка: -2 :))) :))
Здравствуйте, Programmierer AG, Вы писали:


>> Если речь идёт про тривиальное for (int i = 0; i < object.Length; i++) — то нет. Это, собственно, не дублирование кода. Не считаете же вы дублированием кода вызов одной и той же функции или применение одного и того же оператора

PA>Любой паттерн, в котором изменяется незначительная часть — это дублирование.

Долой пробелы!!!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[28]: Насколько важен синтаксис языка?
От: Beam Россия  
Дата: 06.09.06 17:03
Оценка:
Здравствуйте, IT, Вы писали:

IT>select точно скоро будет.


Зачем добавлять ключевые слова в язык, если этой функциональности можно добиться с помощью делегатов?

IT>Да и почему собственно долго? C# от роду чуть больше 4-х лет. Когда выйдет C# 3.0 ему будет 5 лет. Это много для языка?


Добавьте к этому возраст Java и тогда станет видно, что много.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Best regards, Буравчик
Re[7]: Оффтоп о преподавателях
От: trophim Россия  
Дата: 06.09.06 17:07
Оценка: +1
Здравствуйте, Programmierer AG, Вы писали:

PA>trophim wrote:

>> З.Ы. Нам в университете както преподаватель сказал: пролог лучше не учите — голову сломаете.
PA>Это не преподаватель, это вредитель какой-то. Благодаря таким наше
PA>образование катится известно куда. Видел вчера книгу в магазине, явно
PA>вот такие отечественные преподаватели писали, — "Основы алгоритмизация и
PA>программирования в среде VBA". Вы себе можете представить такого зверя:
PA>"алгоритмизация в среде VBA"? Вот получает человек представление о
PA>программировании на таком курсе, а рынок — нехватку квалифицированных
PA>кадров, РСДН — рассуждения о расстоянии от мэйнстрима до нормальных
PA>инструментов и т.д.

О, да, вредитель тот еще. Без шуток. И представляете — зав кафедрой.

А я собственно быстро почуял, что слушать преподов не стоит — себе дороже выйдет, ибо мало кто из них очень хорошо знал предмет. Один только преподаватель меня радовал — по лиспу и смоллтоку. Толковый был мужик.

З.Ы. Усе давно прогнило в королевстве датском... Нет у нас нормального образования в направлении ИТ.
[EOF]
Let it be! — Давайте есть пчелу!
Re[5]: Насколько важен синтаксис языка?
От: trophim Россия  
Дата: 06.09.06 17:07
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

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


T>>Да фактически каждый новичок отмечает эту особенность синтаксиса смоллтока.


ANS>Интересно, были ли среди них "новички", знакомящиеся с ST, но еще не знакомых с C/Java/C#?


Гм, ну, мой поток в университете. Не то чтобы не знакомые с другми языками, но разум был еще не затуманен. Так что для нас тогда и смоллток был почти таким же новым, как C++.

А вот таких кто изучал ST, но не знал другого языка, конечно же не было (их бы уже под зад выгнали давно).
[EOF]
Let it be! — Давайте есть пчелу!
Re[13]: Насколько важен синтаксис языка?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.09.06 17:10
Оценка: -1
Здравствуйте, FDSC, Вы писали:

FDS>Что же это за преимущества, которые не дают экономических преимуществ при разработке ПО?


Где я отрицал возможность получения экономических преимуществ?
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[6]: I am a teacher - неопределённый экземпляр класса
От: FDSC Россия consp11.github.io блог
Дата: 06.09.06 17:18
Оценка:
Здравствуйте, vvotan, Вы писали:

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


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


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



M>>>>Английский

M>>>>I am teacher.
M>>>>Я есть учитель.

V>>>На самом деле "I am a teacher", то есть


FDS>>"Я есть неопределённый экземпляр класса "учитель" "


V>Неопределенный это как? Конструктор не вызван?


Нет, это значит, что он стоит в некоторой коллекции и ничем не выделяется. А вот если бы для него отдельную переменную бы завели, то был бы он "I am the national teacher"
Re[14]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 06.09.06 17:22
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

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


FDS>>Что же это за преимущества, которые не дают экономических преимуществ при разработке ПО?


ГВ>Где я отрицал возможность получения экономических преимуществ?


Вы сказали, что не будет волны стартапов, а это значит, что нет экономических преимуществ, так как иначе все им бы пользовались. Собственно, вот логика. Если вас логика не устраивает, объясните почему (вы её уже назвали "наивной", но всё же)
Re[29]: Насколько важен синтаксис языка?
От: IT Россия linq2db.com
Дата: 06.09.06 17:23
Оценка:
Здравствуйте, Beam, Вы писали:

IT>>select точно скоро будет.


B>Зачем добавлять ключевые слова в язык, если этой функциональности можно добиться с помощью делегатов?


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

IT>>Да и почему собственно долго? C# от роду чуть больше 4-х лет. Когда выйдет C# 3.0 ему будет 5 лет. Это много для языка?


B>Добавьте к этому возраст Java и тогда станет видно, что много.


Тогда надо добавлять ещё и возраст C++.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[30]: Насколько важен синтаксис языка?
От: Beam Россия  
Дата: 06.09.06 17:28
Оценка: +4 -1
Здравствуйте, FDSC, Вы писали:

B>>При любом дублировании кода (даже набор которого длится несколько секунд) вероятность ошибки возрастает.


FDS>Если речь идёт про тривиальное for (int i = 0; i < object.Length; i++) — то нет. Это, собственно, не дублирование кода. Не считаете же вы дублированием кода вызов одной и той же функции или применение одного и того же оператора


Возьмем этот тривиальный код:
for (int i = 0; i < 10; i++) {
    ...    // здесь i не используется
}


Что здесь написано? Присвоить переменной i значение 0. Пока i меньше 10, выполняй тело цикла и увеличивай i на единицу. Вы видите, что в теле не используется переменная i, и понимаете, что это конструкция обозначает повторение 10 раз тела цикла.

Другой код.
timesRepeat(10) {
    ...
}

Что написано здесь: повторить тело цикла 10 раз

Это и есть повышение уровня абстракции и повышение читабельности.

Где можно ошибиться при наборе timesRepeat(10): в слове timesRepeat (синтаксическая ошибка) или в числе 10 (логическая).
А теперь посмотрите на кучу мест, где можно совершить ошибки в for (да, я прекрасно понимаю, что набивание таких конструкций доведено до автоматизма, но все же).

Этот пример показывает, что даже в таком простом коде имеются предпосылки к удалению дублирования.
В данном случае Вы убрали дублирование кода: удалили введение локальной переменной, присваивание, сравнение, увеличение переменной.

FDS>Возможно я не понял, что именно удобно


Удобно то, что можно не меняя язык вводить такие конструкции как timesRepeat(number) { }
Разве Вы не пользовались бы таким оператором?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Best regards, Буравчик
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.