|
|
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
Предчувствуя, что явный офтопик в теме про навязший всем в зубах полиморфизм так или иначе забанят, рискну продолжить обсуждение в новой ветке. Краткое intro: судя по тенденциям в т.н. "мейнстриме" современных ЯВУ (еще тынц и тынц ), в последнее время прослеживается явный тренд от чисто "императивных" языковых конструкций к более-менее "декларативным"... (чисто "декларативными", к сожалению, пока невозможно решить все существующие задачи). Все кругом (и NGGU в цитируемом топике про полиморфизм, и В. Шепелев в своих обзорных статьях, и мн. др. в разных других местах) отмечают "крутость", "полезность", "перспективность" и т.д. - возникновения такого явления, как, например, LINQ/C#3.0 (то, что эти 2 понятия - суть "близнецы-братья" будет объяснено позже). Что же мы имели в начале? Когда-то давно умные дядьки из Редмонда решили "прикрутить" к платформе .NET (или даже к конкретному ADO.NET) "всего-то-навсего" кусочек "синтаксического сахара" для удобной манипуляции данными (на уровне реляционной модели) на стороне клиента... (тем более, что удобный "прототип" для реализации уже был "практически" готов в виде System.Data.DataSet, который позиционировался, ни много, ни мало, как - "целая БД" внутри памяти клиентского приложения). То ли "сообщество FoxPro" заклевало "сообщество .NET" своими "клиентскими курсорами" и "встроенным SQL", то ли еще какая иная благая мысль закралась в их умные головы (действительно: хрен ли - "БД в памяти" есть, а "диалекта SQL" для нее - нету, "неаккуратненько как-то"), но результат оказался - необычен во всех отношениях. Для того, чтобы реализовать задуманное не "грубой силой" (ака "вкручивание" на выбор: пре-процессорных директив, атрибутного ORM, или еще каких-нить иных "рефлексионных чудес"), а вполне себе "концептуально", в рамках т.с. "основной парадигмы" - был выбран путь тоже казавшийся вначале "проторенным", т.к. System.CodeDom и System.Reflection.Emit тоже, вроде бы, к тому времени уже существовали и были "практически" готовы к решению поставленных задач. Однако ж, когда дошло до "дела", то выяснилось, что оказывается - мало "разложить" выражение типа "select a from b group by c order by d" в дерево вызовов AST типа b.Group(c).Order(d).Select(a); Оказывается, что надо еще как-то реализовать "where" и желательно на уровне AST получать не ...Filter( _variable )...; (потому что _variable еще как-то "инстанцировать" по контексту придется), а сразу иметь возможность передать туда "компаратор" с заранее выставленными условиями сравнения (но компараторы - громоздки в записи, а без анонимных делегатов так и вообще - отделены от AST LINQ-выражения их использующего), или что-то еще, само-по-себе "знающее" и "умеющее" как и что сравнивать/фильтровать... (а что может быть проще и понятнее "лямбды" в таких условиях?). Ну что ж, подумали дядьки, "лямбды" так "лямбды", всего делов-то... Вон, в том же Nemerle - вообще одни сплошные "лямбды" и ничего, живут себе люди и "в ус не дуют", в IL компилируются, под CLR выполняются, нешто и мы не смогем? Ну а дальше, как говорится: "коготок увяз - всей птичке пропАсть...", чтобы "лямбды" можно было инстанцировать "по месту" на сцену выходят: "выведение типов", "анонимные конструкторы" даже "анонимными типами" не побрезговали... (вали все до кучи, чего уж там). Что же мы имеем в итоге? C#3.0 - практически превращается в ФЯ, сан-техники смотрят на ето дело и срочно пытаются повторить то же самое с Java, Nemerle - гордо ждет когда его "примут" в мейнстрим, Haskell и Erlang "нервно курят в сторонке" и недоумевают - "а мы что, уже больше не такие особенные?"... Так ли это на самом деле, или я просто - слишком много нафантазировал, обладая только обрывками информации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 17:33 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
больше кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 17:48 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewC#3.0 - практически превращается в ФЯ, сан-техники смотрят на ето дело и срочно пытаются повторить то же самое с Java, Nemerle - гордо ждет когда его "примут" в мейнстрим, Haskell и Erlang "нервно курят в сторонке" и недоумевают - "а мы что, уже больше не такие особенные? Давайте откроем спецификацию C#3.0 (кстати где она?) и внимательно почитаем. Если он обладает набором признаков ФП (на заметку - поискать этот набор) тогда и будет резолюция. В противном случае - у вас действительно не на шутку разыгралась фантазия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 18:10 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
mayton...Давайте откроем спецификацию C#3.0 (кстати где она?) и внимательно почитаем... А я чем, по вашему, занимался перед тем как запостить этот спич? Именно - внимательно "читал спецификацию" (кстати, вот она , не БГ весть что - просто вордовый файлик с описанием наиболее "продвинутых" фич, но зато - прямо из "первоистчника"). Причем, именно "внимательное" чтение упомянутого выше документа и привело меня к построению "цепочки зависимостей": LINQ -> AST -> "lambdas" -> (all other FP stuff) -> C#3.0. Так что, не такая уж это и "фантазия"... maXmoбольше кода Это вы - "обо што"? Если нужны примеры новых фич C#3.0 - см. по ссылке выше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 18:28 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
брр… там написано, что лямбды – это чисто синтаксический сахар над генериковскими делегатами, а встроенный скл как работает? Я так понял, что только на клиенте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 18:58 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
если весь скл ворочается на клиенте, нах тогда бд придумывали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 19:04 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
maXmoбрр… там написано, что лямбды – это чисто синтаксический сахар над генериковскими делегатами... Если так рассуждать, то весь Nemerle - "это чисто синтаксический сахар над" CLR/IL. Однако ж, жив "курилка", и вполне себе за ФЯ сходит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 19:10 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavew maXmoбрр… там написано, что лямбды – это чисто синтаксический сахар над генериковскими делегатами... Если так рассуждать, то весь Nemerle - "это чисто синтаксический сахар над" CLR/IL. Однако ж, жив "курилка", и вполне себе за ФЯ сходит... Что-то перечитал еще раз про "Lambda expressions", ей-БГ, не заметил ничего "порочащего" их "функциональную чистоту", кроме того, что они могут неявно каститься в генерик-делегаты там, где это необходимо "по месту". По-моему, все-таки это не "синтаксический сахар над генериковскими делегатами", это что-то "бОльшее"... (вот цитатка: "... Lambda expressions are a functional superset of anonymous methods, providing the ... additional functionality...") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 19:22 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
Нет перспектив конвергенции - ни полной, ни частичной. Мысли о конвергенции могут возникнуть у любителя ф.п. которого печалит - а почему публика равнодушна к языкам вроде Haskell и Erlang? Ну если нельзя никого уговорить ими пользоваться, то может разработчики обычных языков тайком протащат что-нибудь функциональное. Зачем? А вдруг захочется попользоваться... Думаю, пуюлике захочется только если она увидит пользу. Вот XSLT функциональный язык. Польза от этого есть. Использую его, вызывая в обычном языке функции работы с XSLT. О конвергенции и речи нет. Или JavaScript - давно применяю его, но недавно с удивлением узнал, что в нём есть элементы ф.п. (стал изучать AJAX, попалась библиотека Scriptaculous - её JavaScript - код совершенно непонятен, оказалось, что она использует библиотеку Prototype, которая пользуясь этими элементами вводит в JavaScript возможность имитировать ООП). Вижу, полезно для упрощения кода на JavaScript. Буду пользоваться. Haskell, Erlang - зачем? Никто не знает (ну Haskell - для умственного развития, чтобы увидеть как можно делать не так, как другие). Nemerle - бред сумасшедшего, выраженный в программной форме. О нём бы никто и не знал, если б его не разрекламировал журнал RSDN, превратившийся в помойку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2007, 12:10 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
Partisan M если б его не разрекламировал журнал RSDN, превратившийся в помойку. Простите. Меня задела фраза. Почему вы считаете, что RSDN стал "помойкой" ? Из каких фактов это следует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2007, 12:33 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
Partisan MНет перспектив конвергенции - ни полной, ни частичной. Мысли о конвергенции могут возникнуть у любителя ф.п. которого печалит - а почему публика равнодушна к языкам вроде Haskell и Erlang? Ну если нельзя никого уговорить ими пользоваться, то может разработчики обычных языков тайком протащат что-нибудь функциональное. Зачем? А вдруг захочется попользоваться... Мысли о переориентации мейнстрима на использование некоторых возможностей фя могут возникнуть у любого кто 1) читал спецификации с#3.0/java7 2) знаком с ФЯ Перовое нужно, чтобы увидеть неизбежность появления черт функциональных языков в ООЯзыках, второе - чтобы понять почему эти нововведения будут востребованны. Однако, нужно понимать, что эти нововведения не изменят кординально процесс разработки. Всё останется как есть с той разницей, что код станет более компактным. Так, например, было в java после введения генериков. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 11:34 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
Partisan MНет перспектив конвергенции - ни полной, ни частичной. Мысли о конвергенции могут возникнуть у любителя ф.п. которого печалит - а почему публика равнодушна к языкам вроде Haskell и Erlang? ... Ну, не знаю... Я себя к "любителям ф.п." отнести не могу, т.к. узнал о нем совсем недавно, со страниц того же RSDN (кстати, а чем он так вам не угодил, что сразу - "превратился в помойку"?). Зато я вижу отчетливо, что происходит в синтаксисе т.н. "обычных" ООЯ по мере движения их по шкале времени вперед... Те же самые приснопамятные "лямбды" (ака "анонимные делегаты", ака "упрощенная запись функторов с одним методом") даже если признать их "синтаксическим сахаром" над встроенными в платформу (любую) ОО-типами - ясно показывают, что такая "запись" проще, понятнее и удобнее в использовании для практических задач, и поэтому "кит" и "слон" - повсеместно тащат за уши этот "сахар" в свои ООЯ, придавая им "неявные" черты ФЯ - т.е. думающие люди выбирают путь развития для своих ООЯ не по принципу "академичности" и "концептуальности", а по принципу - "практичности" и "удобства"... З.Ы. а что за слово такое - "пуюлике"? и в каком контексте вы его использовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 11:38 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewи поэтому "кит" и "слон" - повсеместно тащат за уши этот "сахар" в свои ООЯ, придавая им "неявные" черты ФЯ - т.е. думающие люди выбирают путь развития для своих ООЯ не по принципу "академичности" и "концептуальности", а по принципу - "практичности" и "удобства"... А можно нескромный вопрос: что такое функция с точки зрения ООП: метод, свойство или что-то еще ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 14:03 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод... А можно нескромный вопрос: что такое функция с точки зрения ООП: метод, свойство или что-то еще ? А вам-то, как поклоннику "утиной типизации" какая разница? Если оно "крякает" как функция, "ходит" как функция, "плавает" как функция - используйте "это" по месту употребления функции... (например, как "уточняющий" аргумент в вызовах ФВП вроде map, fold или foreach). Или вы хотите, чтобы "внутри" среды исполнения была соблюдена "концептуальная чистота", т.е. lambda expressions "разворачивались" компиллятором не в "делегаты", или в "функторы", а во что-то еще более "концептуально чистое", вроде "функциональных объектов первого рода"? По большому счету, на данном этапе развития технологии (ИМХО) - "с головой" хватит и "делегатов" (с "функторами"), а ввести при необходимости (в борьбе за ту же "мифическую" производительность) в FCL дополнительную сущность - труда не составит (или немного "обработать напильником" концепцию делегатов). З.Ы. если отвечать прямо на поставленный вопрос, то для меня "функция в ООП" - это отдельный класс сущностей, характеризуемых только выполняемыми ими действиями, в самом грубом приближении - "публичный класс с единственным исполняемым методом по-умолчанию". Но, как правильно заметил NGGU (да и не он один) - в синтаксисе "классического" ООП такие конструкции довольно громоздки и запутывают суть происходящего в коде за паутиной "служебных" объявлений... А при введении в синтаксис ООЯ lambda expressions (ИМХО) - вся эта "паутина" отметается на совесть компиллятора... Вот и вся недолга... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 15:13 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewА вам-то, как поклоннику "утиной типизации" какая разница? Если оно "крякает" как функция, "ходит" как функция, "плавает" как функция - используйте "это" по месту употребления функции... Т.е. очередной гибрид ? В принципе я не против. Вот питон живет себе с ООП и ничего. Правда ООП в питоне опционально. зы а утиная типизация это что ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 15:48 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод... зы а утиная типизация это что ? Прикалываетесь, или правда - ни разу не слышали такого "термина"? (да, в том же приснопамятном RSDN #4, 2006 - это словосочетание упоминается по 10 раз чуть ли не в каждой статье, а там всего 3 "программных" статьи: Haskell, Ruby, Nemerle). Ну, если и правда не доводилось слышать - это такое правило "мягкого" выведения типов принимаемых аргументов, когда на тип аргумента не ставится никаких дополнительных "ограничений", сверх того, что необходимо "принимающей стороне" для их успешной обработки (больше характерно для т.н. "динамических" ЯВУ, чем для ФЯ/ООЯ). В ООП-аналогии похоже на повсеместное использование "интерфейсов" вместо иерархии наследования конкретных и абстрактных базовых классов (типов). Т.е. условно говоря, "договариваемся" о том, что MyCoolDataGrid, к примеру, будет способен отображать на GUI любые коллекции, реализующие IEnumerable с элементами, умеющими реализовать ToString() - и все... больше MyCoolDataGrid-у "заботиться" не о чем... хоть DataSet ему передавай, хоть List<int>, хоть MyCoolObject[] - он их всех "аккуратно" отобразит в клеточках по-порядку... потому как - "крякает" то, что ему передается - "как утка" (т.е. умеет "последовательно перебираться методом MoveNext()") и "плавает как утка" (т.е. умеет "отобразить себя методом ToString()"), значит для MyCoolDataGrid-а это и есть - "утка" (он только с такими "утками" и умеет работать, и что там конкретно за тип ему передается для отображения: DataSet, коллекция или массив - ему абсолютно фиолетово). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 16:12 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewи что там конкретно за тип ему передается для отображения: DataSet, коллекция или массив - ему абсолютно фиолетово). Спасибо, не знал. Но я действительно сторонник мягкой типизации или даже ее отсутствия. Возвращаясь к функциям в ООЯ: нужно ли объявлять класс для одной единственной функции ? Или можно просто объявить функцию вне всякого класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 16:32 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод dejavewи поэтому "кит" и "слон" - повсеместно тащат за уши этот "сахар" в свои ООЯ, придавая им "неявные" черты ФЯ - т.е. думающие люди выбирают путь развития для своих ООЯ не по принципу "академичности" и "концептуальности", а по принципу - "практичности" и "удобства"... А можно нескромный вопрос: что такое функция с точки зрения ООП: метод, свойство или что-то еще ? Если в java, то объект. Что же ещё? Класс этого объекта выводится автоматически из сигнатуры метода объекта или локального метода или анонимной функции или описании функциональной переменной. Создание функционального объекта происходит неявно при объявлении локального метода, анонимной функции и в момент создания ссылки на метода объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 17:01 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Речь, естественно, идёт о java 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 17:03 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsЕсли в java, то объект. Что же ещё? Причем тут java. Если я не ошибаюсь в ООП есть только классы объектов. У объектов есть свойства, а у классов методы, которые применяются к объектам. А что есть функции ? Вот в c# вообще нет функций - отчего бы это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 17:23 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод dejavewи что там конкретно за тип ему передается для отображения: DataSet, коллекция или массив - ему абсолютно фиолетово). Спасибо, не знал. Но я действительно сторонник мягкой типизации или даже ее отсутствия... Велкам, как говорится... (значит, насчет вашей приверженности мягкой типизации я угадал). мод... Возвращаясь к функциям в ООЯ: нужно ли объявлять класс для одной единственной функции ? Или можно просто объявить функцию вне всякого класса. Если вы спрашиваете мое личное мнение - то мне пока все равно... (исходя из той же концепции "мягкой типизации" или избегания всяких "жесткостей" без явной на то необходимости). Ведь, что по-сути происходит в коде ОО-программы на C# когда кто-то пишет в теле класса что-то типа такого (expression): Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. К чему мы приходим относительно вашего вопроса? В контексте использования lambda expressions - какая разница во что "выводятся" компиллятором синтаксические конструкции вроде этих? Код: plaintext 1. 2. 3. Если это будет "служебный функциональный объект" с одним и тем же методом (условно говоря - ___execute_me___()) в который из "лямбды" попадет только "тело" - ничего страшного в этом тоже нет. Даже если это будет - "полновесный" генерик-делегат со всей его "обвязкой" в виде XXXEventArgs, add, remove и перегрузкой операторов "+=" и "-=" - тоже вполне приемлемое "решение", по крайней мере - пока... Ну и сами скажите теперь - зачем при таком "выведении" сущностей исполняющей среды (types) из выражений ООЯ (expressions) нужно где-либо что-либо еще объявлять ("функции вне классов" или "классы для функций")? "Все уже объявлено до нас..." - перефразируя известный фильм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 17:59 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
to mayton Меня задела фраза. Почему вы считаете, что RSDN стал "помойкой" ? Из каких фактов это следует? Большинство статей по темам, которые я хорошо знаю (C++, Java) - неквалифицированны, бывает полная чушь. Из этого я делаю вывод, что и остальным нельзя доверять. Мне не нравится, что журнал опустился. Помню, было время, когда я охотно покупал его на свои деньги. Теперь на работе выписывают. На свои деньги уже не стал бы покупать. Смотрю - и ничего там нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2007, 20:37 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewНу и сами скажите теперь - зачем при таком "выведении" сущностей исполняющей среды (types) из выражений ООЯ (expressions) нужно где-либо что-либо еще объявлять ("функции вне классов" или "классы для функций")? Ну саму-то функцию надо где-то объявить. Заводить для этого класс явно лишнее. Получается "функция вне классов", но это фактически означает включение в ООЯ элементов "не ООП", т.е порождаем некий гибрид, что не есть хорошо. зы lambda expression как любое выражение всегда локально (пмсм), а вот имя функции имеет область видимости. ззы и еще - если что-то выглядит как кошка, то это и должна быть кошка, т.е. синтаксис и семантика элементов языка должны соответствовать друг другу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 09:24 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavew maXmoбольше кодаЭто вы - "обо што"?хотелось бы логически законченный пример, а не жалкие огрызки кода. NotGonnaGetUsВсё останется как есть с той разницей, что код станет более компактным. Код: plaintext 1. 2. 3. 4. dejavewЧто-то перечитал еще раз про "Lambda expressions", ей-БГ, не заметил ничего "порочащего" их "функциональную чистоту", кроме того, что они могут неявно каститься в генерик-делегаты там, где это необходимо "по месту".А как выглядит определение функции, принимающей в качестве параметра лямбду? Разве появился тип System.Lambda? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 11:15 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод Я бы со многими вашими тезисами поспорил... Поэтому, придется - по порядку следования (хоть, и ненавижу я interlaced quoting, вобщем-то). мод...Ну саму-то функцию надо где-то объявить. Первое "спорное" утверждение - "функция" как сущность ЯВУ определенная в синтаксисе этого ЯВУ (т.н. "ex-функция", от "expression") вполне может обойтись и без явного "объявления". На примере тех же "лямбд", "выведения типов" и пр. "pattern matching"-ов, мы уже сейчас можем убедиться в том, что для адекватного описания смысла происходящих действий на любом ЯВУ-диалекте практически необязательно "объявлять" в явном виде: имя "функции", "типы" ее аргументов, области "видимости" и пр. "классическую" лабуду, служащую лишь "синтаксической обвязкой" над единственным и неповторимым "смыслом" этой сущности - ее "телом" (где явно должны быть описаны действия или результаты, которые мы ожидаем от ее выполнения). С другой стороны - "функция" как набор инструкций Х86 или "виртуальной машины" среды исполнения (CLR/JVM) это уже совсем другая сущность (т.н. "rt-функция", от "run-time"), и ей безусловно необходимы все вышеперечисленные атрибуты (имя/адрес, сигнатура, scope) или их "отображения" на семантику этой самой среды исполнения. Но, беда (или радость?) в том, что сред исполнения ЯВУ может быть бесконечно много и даже при сходной внутренней архитектуре (например - "все - объект") они могут сильно различаться вариантами реализации и "стилевыми особенностями" этого самого "отбражения" (условно говоря: кому проще сделать из "ex-функции" класс - тот делает класс, которого мы никогда не "увидим", пока не залезем в исполняемый код "грязными руками", aka reflector, aka binary debugger, etc). Кому проще сделать из "ex-функции" скрытый метод текущего класса - делает скрытый метод. И т.д. - "по индукции"... мод... Заводить для этого класс явно лишнее. Что есть "явно лишний" класс в вашем понимании, Если этот класс является: чисто служебным, генерируемым автоматически при компиляции "ex-функций" в "rt-функции", скрытым от пользователя (в данном случае программиста), и занимает в памяти не более пары десятков "лишних" байтов, не считая собственно реализации "тела". мод... Получается "функция вне классов", но это фактически означает включение в ООЯ элементов "не ООП", т.е порождаем некий гибрид, что не есть хорошо. По-моему, вы сами себе "страшилки" выдумываете - lambda expression не может быть "вне классов", т.к. фактически в ООЯ используется либо для передачи в качестве аргумента в ФВП (локальное значение), либо для определения и последующего манипулирования "повторно-используемого" блока кода (приватный или публичный мембер). Зачем "ex-функциям" быть "вне классов" я пока не совсем понимаю... (для них и "внутри классов" дел хватает). мод зы lambda expression как любое выражение всегда локально (пмсм), а вот имя функции имеет область видимости. Как мы уже договорились раньше - имя для "ex-функции" не существенно, т.к. "настоящее имя" ей все равно присвоят компилятор/среда исполнения. Поэтому рассуждать об "области видимости" того, чего нет - бессмысленно. А по поводу заведомой "локальности" "ex-функции" - тоже не все так однозначно, она безусловно "локальна" по месту определения (внутри метода класса), но при этом - никто не запрещает из того же самого метода перекинуть ссылку на "ex-функцию" в другой метод, или даже в другой объект/класс, вот тут "локальности" и приходит "кирдык". А если вспомнить еще и про необходимость "замыкания контекста" в теле "ex-функции" (а в контексте легко могут "завязнуть" внешние ссылки), то от "локальности" остается совсем немного... (так что, вполне возможно, что мое предположение о том, что "ex-функцию" можно будет "развернуть" в приватный метод того же самого класса - очень оптимистично и обложено массой "дополнительных условий", за которые разработчики CLR даже бороться не станут). мод ззы и еще - если что-то выглядит как кошка, то это и должна быть кошка, т.е. синтаксис и семантика элементов языка должны соответствовать друг другу. Ну-у-у-у, тут уж даже не знаю - что и возразить, почему вам, вдруг, показалось, что введение в ООЯ "ex-функций" нарушает ОО-семантику? Только лишь потому, что рядом с lambda expression нигде в синтаксисе не мелькает "public class" или "new function()"? Ну и что? Надеюсь, вас концептуально не напрягает такое, например, использование "кошек" - " 12.345.GetType().ToString().Split('a')[0]; "? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 11:43 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewмогут сильно различаться вариантами реализации и "стилевыми особенностями" этого самого "отбражения" (условно говоря: кому проще сделать из "ex-функции" класс - тот делает класс, которого мы никогда не "увидим", пока не залезем в исполняемый код "грязными руками"вообще-то, вся эта ООпафосная шелуха просто шелуха над старым добрым асмом: где-то сидят метаданные, где-то vtable, в куче – объекты, а остальное – куски кода – тела функций, а вызов как и раньше: запихнули параметры в стек и – call по нужному адресу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 11:52 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод NotGonnaGetUsЕсли в java, то объект. Что же ещё? Причем тут java. Если я не ошибаюсь в ООП есть только классы объектов. У объектов есть свойства, а у классов методы, которые применяются к объектам. А что есть функции ? Вот в c# вообще нет функций - отчего бы это. 1. Java при том, что в другом ООЯ для представления сслылок на методы могут использоваться другие решения. 2. Друг мой, не надо снова изобретать новаторские толкования ООП. Класс содержит описания (т.е. методы и поля), по которым строятся объекты. 3. Ещё раз повторяю: типы функций - описываются классами, функциональные переменные ссылаются на объекты этих классов. Даже в С# 2.0, в "котором вообще нет функций". Смотрим пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:12 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavew Первое "спорное" утверждение - "функция" как сущность ЯВУ определенная в синтаксисе этого ЯВУ (т.н. "ex-функция", от "expression") вполне может обойтись и без явного "объявления". Может, но очень иногда. А почему вы ограничиваетесь только "ex-функциями" ? А как же Код: plaintext 1. 2. dejavewЧто есть "явно лишний" класс в вашем понимании Лишнии буквы в программе, которые должен написать программер. dejavew12.345.GetType().ToString().Split('a')[0]; "? А это что ? Действительно неочевидный текст напрягает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:13 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:23 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
maXmo NotGonnaGetUsВсё останется как есть с той разницей, что код станет более компактным. Код: plaintext 1. 2. 3. 4. ну и кто компактнее? Нужно "шырше" смотреть :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. maXmo А как выглядит определение функции, принимающей в качестве параметра лямбду? Разве появился тип System.Lambda? Вам ли не знать, как это выглядит? :) Возвращаясь к примеру кода из моего предыдущего сообщения: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:25 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
maXmo... вообще-то, вся эта ООпафосная шелуха просто шелуха над старым добрым асмом: где-то сидят метаданные, где-то vtable, в куче – объекты, а остальное – куски кода – тела функций, а вызов как и раньше: запихнули параметры в стек и – call по нужному адресу. Кто ж спорит-то? Набор инструкций х86 еще не скоро будет отменен за ненадобностью... Только, почему такое пренебрежение к категорям ЯВУ вообще, и ООП в частности ("вся эта ООпафосная шелуха")? Или вы - из т.н. "С-шников старой закалки", для которых - "Нет Бога кроме - Кернигана, а Ричи - пророк его!"? З.Ы. вдогонку к предыдущему спичу - чем вам генерик-делегаты-то не угодили? Что плохого в том, что в C#3.0 будет реализовано что-то типа этого? Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:27 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
maXmo NotGonnaGetUs Код: plaintext 1. 2. 3. 4. 5. К чему такие мудрые высказывания? См. сообщение http://sql.ru/forum/actualthread.aspx?tid=421067#4058712 я обо всём этом там написал. Не нужно путать детали реализации компилятора и язык программирования, о чём dejavew уже тоже писал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:32 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs... Возвращаясь к примеру кода из моего предыдущего сообщения: Код: plaintext 1. 2. 3. Это вы, уважаемый, не на c#2.0 писали, наверное, а "внутри головы" (бывает такое и со мной в порыве "запальчивости"). На c#2.0 надо примерно, так: Код: plaintext 1. 2. 3. 4. З.Ы. то maXmo - ну вот, кода-то наворотили за 4 поста - 3 горы, а что толку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:45 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewЭто вы, уважаемый, не на c#2.0 писали, наверное, а "внутри головы" (бывает такое и со мной в порыве "запальчивости"). А со мной не бывает :) Это код на с#2.0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:49 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsСмотрим пример Да уж. Спасибо, такое ФП нам не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:56 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs... А со мной не бывает :) Это код на с#2.0. Во, блин... (и точно). Как языки-то "вперед двинулись", не успеваешь за сокращением синтаксиса следить... А "мод" еще "причитает" о соответствии "семантики" и "синтаксиса"... По-моему как раз: Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 12:58 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод NotGonnaGetUsСмотрим пример Да уж. Спасибо, такое ФП нам не надо. Ну а, к примеру, какого бы "ФП" вам хотелось? Я там, давеча, приводил примеры "выведения" лямбд "по-месту": Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 13:03 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод NotGonnaGetUsСмотрим пример Да уж. Спасибо, такое ФП нам не надо. Кому "вам"? Тебе? Доводов не будет? Тогда, тут не поспоришь. Если, н-р, кому-то не хочется разбираться с ООП и из-за этого хочется поливать его грязью, то такому человеку уже ничего не поможет :) А "такого" в этом ФП ничего нет. Обычное ФП. Анонимные функции есть, все функции/методы свободно передаются по ссылке, соответственно легко строятся функции высших порядков и прочее. На данный момент записи лямбд избыточны, но этот вопрос будет решён в обозримом будущем и это никак не влияет на возможноть писать в ООЯзыках в функциональном стиле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 14:08 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavew Код: plaintext 1. А где чистота-то? Всё равно имя метода передаваемого в качестве параметра не является "ООП-выражением" :) "Чище" было бы: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 14:11 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewА "мод" еще "причитает" о соответствии "семантики" и "синтаксиса"... По-моему как раз: Код: plaintext 1. А так еще адекватнее: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 14:14 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод А так еще адекватнее: Код: plaintext 1. 2. Так не адекватнее, т.к. исключается возможность проверки типов. В переменной x легко может оказаться функция, которая принимает на вход не строку, а синих ёжиков. Естественно, если речь идёт не о МL языках, в которых вывод типов делается автоматически. Но, во-первых не любой функциональный язык обладает такой возможностью, во-вторых вывод типов в ООЯзыках тоже возможен, примером чего служит Nemerle. Там можно написать: def x = Preved; и следующая строчка приведёт к ошибке компиляции: x(1,2,3); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 14:21 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavew Код: plaintext Я же не против. lambda выражения нужны, но их применение ограничено например нет рекурсии. dejavewНу а, к примеру, какого бы "ФП" вам хотелось? Это сложный вопрос. Чистого ФП вообще не бывает, только как часть процедурно-ФП. К самим функциям (да и к процедурам) требования такие: 1 передача аргументов всех типов по значению 2 максимально ленивые вычисления 3 аргументы и значение любых типов (в т.ч. и функции) 4 динамический вызов по шаблонам (не путать с сигнатурой) 5 транзакционность 6 параллельность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 14:33 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод 5 транзакционность 6 параллельность Сорри, но я катаюсь под столом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 14:37 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsТак не адекватнее, т.к. исключается возможность проверки типов. Статическая проверка типов вещь нужная, но в данном случае не спасает: sin(x) и cos(x) имеют один тип, но функции то разные. Остается только динамическая проверка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 14:47 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsСорри, но я катаюсь под столом :) А подробнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 14:48 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод... 1 передача аргументов всех типов по значению 2 максимально ленивые вычисления 3 аргументы и значение любых типов (в т.ч. и функции) 4 динамический вызов по шаблонам (не путать с сигнатурой) 5 транзакционность 6 параллельность Я, конечно, как NGGU, под столом кататься не собираюсь, только очень сильно подозреваю, что весь вышеперечисленный список (за исключением п.п. 1 и 4, да и то "с натяжкой") - суть характеристики среды компиляции/исполнения, а отнюдь не ЯВУ... (будь он хоть ООП, хоть ФП, хоть "динамически-скриптовый", как это сейчас популярно на примере Ruby). Языку, как набору синтаксических выражений, абсолютно пофигу - в какую семантическую модель он "складывается" внутри среды компиляции/исполнения: объектную, функциональную, транзакционную, параллельную или "адресно-стековую"... (но, об этом уже 100 раз "перетиралось"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 15:21 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewтолько очень сильно подозреваю, что весь вышеперечисленный список (за исключением п.п. 1 и 4, да и то "с натяжкой") - суть характеристики среды компиляции/исполнения, а отнюдь не ЯВУ Нет, это все д. б. поддержано на уровне конструкций самого языка. А то что допускает семантическую неоднозначность, д.б. зафиксировано. Компилятор здесь не причем - он не определяет семантику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 15:29 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод dejavewтолько очень сильно подозреваю, что весь вышеперечисленный список (за исключением п.п. 1 и 4, да и то "с натяжкой") - суть характеристики среды компиляции/исполнения, а отнюдь не ЯВУ Нет, это все д. б. поддержано на уровне конструкций самого языка... Ну вот, не могу я понять - как "на уровне конструкций самого языка" поддержать "параллельность" и "транзакционность" задачи поиска человека по имени, фамилии и году рождения в огромном мегаполисе? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 16:01 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
мод NotGonnaGetUsТак не адекватнее, т.к. исключается возможность проверки типов. Статическая проверка типов вещь нужная, но в данном случае не спасает: sin(x) и cos(x) имеют один тип, но функции то разные. Остается только динамическая проверка. Казалось бы пишем на одном и том же языке, а значение слов друг друга не разумеем. В примере (def x = Preved; x(1,2,3);) было показано как статическая типизация позволяет избежать ошибки в run-time вызванной не верной передачей типов входных параметров. Как относится твой sin/cos к этому? Никак абсолютно. Хочешь вызывать sin(x) - ну так вызови по имени. Что ты собираешься "динамически" проверять мне не ясно. Если не трудно - объясни. Лучше с примером кода. мод NotGonnaGetUsСорри, но я катаюсь под столом :) А подробнее Куда уж подробнее... Рассказать какая крышка стола с обратной стороны? мод Это сложный вопрос. Чистого ФП вообще не бывает, только как часть процедурно-ФП. К самим функциям (да и к процедурам) требования такие: Чем по твоему процедура отличается от функции? Что за чудо-юдо такое "процедурно-ФП"? мод 1 передача аргументов всех типов по значению Так сделано в java. Все передаётся исключительно по значению, т.е. нельзя сделать так, чтобы после вызова X x = x1; someCode(x); x указывало не на х1. Может ты имел ввиду отсутствие в языке операций деструктивного присвоения? Забавно. мод 2 максимально ленивые вычисления Что значит "максимально"? Т.е. можно быть чуть-чуть беременным? Смешно. мод 3 аргументы и значение любых типов (в т.ч. и функции) Т.е. ты хотел сказать, что функции должны быть "персонами первого рода"? Очень забавная формулировка получилась. мод 4 динамический вызов по шаблонам (не путать с сигнатурой) Тут мы видим новаторская формулировку на тему паттерн-матчинга, представляющую нагромаждение странных слов. мод 5 транзакционность Что скрывается за столь красивым словом не ясно абсолютно. Жажду примера. мод 6 параллельность Это что за чудо? Потенциальная возможность компилятором выполнять вычисления во многопоточном режиме, опираясь на отсутствие деструктивных присвоений? Так об этом ограничении слова не было сказано... Или всё-таки было? А как тогда это связано с языком?! Требуются комментарии. Что не строчка - то анекдот. Вот и приходится крышку стола всестронне изучать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 17:02 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewНу вот, не могу я понять - как "на уровне конструкций самого языка" поддержать "параллельность" и "транзакционность" Ессно это надо не для всех задач, т.е. транзакции нужны только при параллельной работе. Пример Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 17:04 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
dejavewКто ж спорит-то? Набор инструкций х86 еще не скоро будет отменен за ненадобностью... не, это я рассказал, как ил работает. NotGonnaGetUsК чему такие мудрые высказывания?я просто перевёл на пафосный язык, а то слова неправильные были написаны. dejavewто maXmo - ну вот, кода-то наворотили за 4 поста - 3 горы, а что толку?я хотел примера для встроенного скруля. dejavewПо-моему как раз: Код: plaintext 1. Код: plaintext 1. NotGonnaGetUs dejavew Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 18:07 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
maXmo NotGonnaGetUsК чему такие мудрые высказывания?я просто перевёл на пафосный язык, а то слова неправильные были написаны. Нет. Ты описал, что значат эти строчки для компилятора с#, разбирающиего эти строчки, а я написал, что эти строчки значат для читающего программу. NotGonnaGetUsа делегаты особенные, что инкапсулируют, тем и инициализируются, усё логично. Это не логично, т.к. никакой другой конструктор, кроме конструктора делегате не может принять Preved в качестве аргумента. Логичной является мысль о том, что если в конструктор какого-то класса можно передать что-то, то ничто не должно ограничивать возможность передать это что-то в любой другой конструктор или метод, а значит это что-то может быть присвоено переменной. В версии 2.0 так и поступили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 18:24 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
maXmo... я хотел примера для встроенного скруля. А вы еще до сих пор думаете, что LINQ - это "встроенный SQL"? Не знаю уж, хорошо это или плохо, но это - не так... LINQ - это более "обобщенное" понятие, оперирующее "данными" на уровне абстракций (списки, наборы записей, наборы узлов и т.д.), хотя, синтаксически на SQL он все-таки "похож" (в ссылке, которую вы, надеюсь, читали - все это есть): Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 18:37 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
Тут вижу обсуждение на неопределённую тему. Продолжу про конвергенцию. Практически она может состоять в добавлении элементов ф.п. к одному из обычных языков программирования, скорее в Java или C#. В последнем случае как бы не пришлось вводить их во всё NET (что кажется большой проблемой), а в первом сторонникам ф.п. придётся доказать фирме Sun, что предлагаемое изменение полезно. Java был создан программистами, хорошо знающими C++, сл. понимающими его недостатки, поэтому они решительно вычистили из языка всё что можно было б оставить только "на всякий случай" . Потом стали осторожно добавлять элементы языка, когда стало ясно, для чего это нужно - например, generic-и (напоминающие шаблоны (template) в C++ и generic-и в C#, но не эквивалентные им). Вот поняла фирма Sun, что это полезно - тогда добавила. Хотите иметь ф.п. в Java - объясните фирме Sun пользу. Недавно читал забавную дискуссию. Один зарубежный чувак предолжил ввести в Java замыкания (closure). Спросили - зачем. Ничего конкретного - "хотелось бы" и всё. Кто-то ответил, что в Java их можно имитировать. Малоизвестная возможность, значит (подумал я) и не нужны они. Однако сейчас опять поискал в google информацию по словам closures java. Вижу - любители замыканий не унимаются, и уже состряпали что-то вроде обоснований, например: http://www.javac.info/ Вот это шаг в правильном направлении - не говорить "хочется", а обосновывать, какая польза будет для Java. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2007, 23:37 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
Модератор: удалено Partisan M... не говорить "хочется", а обосновывать, какая польза будет для Java. Модератор: удалено я считаю (возвращаясь к теме), что "польза для Java" как раз и выражается в том, что сначала некоторым, потом многим другим, а потом уже и большинству остальных (именно людей, использующих Java) начинает "чего-то хотеться". И следствием этого "хочется" - появляются технологии и решения, которые двигают Java (и не только ее, заметьте) по "абстрактной" шкале развития. Или, опять же, как "С-шник старой закалки", вы считаете - все, что не связано напрямую с записью в регистры процессора и манипулированием стеком/кучей/vtable - "пафосным бредом"? Ну дык, вспомните, хотя бы, тот же приснопамятный SQL (в его "чисто концептуальном" виде), никто же не будет спорить о том, что его различные реализации (в виде различных серверов СУБД) написаны с помощью "манипулирования стеком/кучей/vtable", зато - где вы найдете в синтаксисе SQL хоть 1 намек на такие "низкоуровневые" подробности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2007, 10:55 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
Partisan M... в добавлении элементов ф.п. к одному из обычных языков программирования, скорее в Java или C#. В последнем случае как бы не пришлось вводить их во всё NET (что кажется большой проблемой)... ...Один зарубежный чувак предолжил ввести в Java замыкания (closure). Спросили - зачем. Ничего конкретного - "хотелось бы" и всё.... ...Вижу - любители замыканий не унимаются, и уже состряпали что-то вроде обоснований... По-моему, вы невнимательно читаете обсуждение (или вообще не читаете приводимые ссылки). Добавление "элементов ф.п. ... во всё NET" - давно уже не является ни проблемой ("большой" или "маленькой"), ни даже вопросом обсуждения - это уже делается полным ходом в полном соответствии со спецификацией C#3.0. Равно как и реализация замыканий (closures) в Java 7... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2007, 11:05 |
|
||
|
ООЯ/ФЯ перспективы полной конвергенции?
|
|||
|---|---|---|---|
|
#18+
Partisan M... По сабжу я - за конвергенцию. Однако у меня возникают опасения за дальнейшую судьбу такого OOP/FL языка. Ведь язык должен иметь исчерпывающий набор грамматик и семантик, доступный для освоения хотя-бы в рамках "постановили-разработали-внедрили". Не будет ли он недостижимой вехой в современных коллективных методологиях разработки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2007, 23:34 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1346091]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
195ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 515ms |

| 0 / 0 |
