powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ООЯ/ФЯ перспективы полной конвергенции?
57 сообщений из 57, показаны все 3 страниц
ООЯ/ФЯ перспективы полной конвергенции?
    #34477048
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предчувствуя, что явный офтопик в теме про навязший всем в зубах полиморфизм так или иначе забанят, рискну продолжить обсуждение в новой ветке.

Краткое 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 "нервно курят в сторонке" и недоумевают - "а мы что, уже больше не такие особенные?"...

Так ли это на самом деле, или я просто - слишком много нафантазировал, обладая только обрывками информации?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34477126
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
больше кода
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34477209
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewC#3.0 - практически превращается в ФЯ, сан-техники смотрят на ето дело и срочно пытаются повторить то же самое с Java, Nemerle - гордо ждет когда его "примут" в мейнстрим, Haskell и Erlang "нервно курят в сторонке" и недоумевают - "а мы что, уже больше не такие особенные?

Давайте откроем спецификацию C#3.0 (кстати где она?) и внимательно почитаем. Если он обладает набором признаков ФП (на заметку - поискать этот набор) тогда и будет резолюция.

В противном случае - у вас действительно не на шутку разыгралась фантазия
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34477260
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton...Давайте откроем спецификацию C#3.0 (кстати где она?) и внимательно почитаем...

А я чем, по вашему, занимался перед тем как запостить этот спич?
Именно - внимательно "читал спецификацию" (кстати, вот она , не БГ весть что - просто вордовый файлик с описанием наиболее "продвинутых" фич, но зато - прямо из "первоистчника").
Причем, именно "внимательное" чтение упомянутого выше документа и привело меня к построению "цепочки зависимостей": LINQ -> AST -> "lambdas" -> (all other FP stuff) -> C#3.0.
Так что, не такая уж это и "фантазия"...

maXmoбольше кода
Это вы - "обо што"?
Если нужны примеры новых фич C#3.0 - см. по ссылке выше...
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34477334
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
брр… там написано, что лямбды – это чисто синтаксический сахар над генериковскими делегатами, а встроенный скл как работает? Я так понял, что только на клиенте.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34477347
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если весь скл ворочается на клиенте, нах тогда бд придумывали?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34477353
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoбрр… там написано, что лямбды – это чисто синтаксический сахар над генериковскими делегатами...
Если так рассуждать, то весь Nemerle - "это чисто синтаксический сахар над" CLR/IL.
Однако ж, жив "курилка", и вполне себе за ФЯ сходит...
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34477374
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dejavew maXmoбрр… там написано, что лямбды – это чисто синтаксический сахар над генериковскими делегатами...
Если так рассуждать, то весь Nemerle - "это чисто синтаксический сахар над" CLR/IL.
Однако ж, жив "курилка", и вполне себе за ФЯ сходит...

Что-то перечитал еще раз про "Lambda expressions", ей-БГ, не заметил ничего "порочащего" их "функциональную чистоту", кроме того, что они могут неявно каститься в генерик-делегаты там, где это необходимо "по месту".
По-моему, все-таки это не "синтаксический сахар над генериковскими делегатами", это что-то "бОльшее"...
(вот цитатка: "... Lambda expressions are a functional superset of anonymous methods, providing the ... additional functionality...")
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34478530
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет перспектив конвергенции - ни полной, ни частичной. Мысли о конвергенции могут возникнуть у любителя ф.п. которого печалит - а почему публика равнодушна к языкам вроде Haskell и Erlang? Ну если нельзя никого уговорить ими пользоваться, то может разработчики обычных языков тайком протащат что-нибудь функциональное. Зачем? А вдруг захочется попользоваться...
Думаю, пуюлике захочется только если она увидит пользу. Вот XSLT функциональный язык. Польза от этого есть. Использую его, вызывая в обычном языке функции работы с XSLT. О конвергенции и речи нет. Или JavaScript - давно применяю его, но недавно с удивлением узнал, что в нём есть элементы ф.п. (стал изучать AJAX, попалась библиотека Scriptaculous - её JavaScript - код совершенно непонятен, оказалось, что она использует библиотеку Prototype, которая пользуясь этими элементами вводит в JavaScript возможность имитировать ООП). Вижу, полезно для упрощения кода на JavaScript. Буду пользоваться. Haskell, Erlang - зачем? Никто не знает (ну Haskell - для умственного развития, чтобы увидеть как можно делать не так, как другие). Nemerle - бред сумасшедшего, выраженный в программной форме. О нём бы никто и не знал, если б его не разрекламировал журнал RSDN, превратившийся в помойку.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34478544
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M если б его не разрекламировал журнал RSDN, превратившийся в помойку.

Простите. Меня задела фраза. Почему вы считаете, что RSDN стал "помойкой" ? Из каких фактов это следует?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34479710
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan MНет перспектив конвергенции - ни полной, ни частичной. Мысли о конвергенции могут возникнуть у любителя ф.п. которого печалит - а почему публика равнодушна к языкам вроде Haskell и Erlang? Ну если нельзя никого уговорить ими пользоваться, то может разработчики обычных языков тайком протащат что-нибудь функциональное. Зачем? А вдруг захочется попользоваться...

Мысли о переориентации мейнстрима на использование некоторых возможностей фя могут возникнуть у любого кто
1) читал спецификации с#3.0/java7
2) знаком с ФЯ

Перовое нужно, чтобы увидеть неизбежность появления черт функциональных языков в ООЯзыках, второе - чтобы понять почему эти нововведения будут востребованны.

Однако, нужно понимать, что эти нововведения не изменят кординально процесс разработки.
Всё останется как есть с той разницей, что код станет более компактным.

Так, например, было в java после введения генериков.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
//Вместо 
 for ( int  i= 0 ; i< strings.size(); i++) {
    string s = (string)strings.get(i);
    System.out.println(s + ", " + s.length());
}

//Стало
 for (string s: strings) {
    System.out.println(s + ", " + s.length());
}

//И будет после введения лямбд
strings.foreach((string s) : System.out.println(s + ", " + s.length()););
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34479726
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Partisan MНет перспектив конвергенции - ни полной, ни частичной. Мысли о конвергенции могут возникнуть у любителя ф.п. которого печалит - а почему публика равнодушна к языкам вроде Haskell и Erlang? ...
Ну, не знаю...
Я себя к "любителям ф.п." отнести не могу, т.к. узнал о нем совсем недавно, со страниц того же RSDN (кстати, а чем он так вам не угодил, что сразу - "превратился в помойку"?).
Зато я вижу отчетливо, что происходит в синтаксисе т.н. "обычных" ООЯ по мере движения их по шкале времени вперед...
Те же самые приснопамятные "лямбды" (ака "анонимные делегаты", ака "упрощенная запись функторов с одним методом") даже если признать их "синтаксическим сахаром" над встроенными в платформу (любую) ОО-типами - ясно показывают, что такая "запись" проще, понятнее и удобнее в использовании для практических задач, и поэтому "кит" и "слон" - повсеместно тащат за уши этот "сахар" в свои ООЯ, придавая им "неявные" черты ФЯ - т.е. думающие люди выбирают путь развития для своих ООЯ не по принципу "академичности" и "концептуальности", а по принципу - "практичности" и "удобства"...

З.Ы. а что за слово такое - "пуюлике"? и в каком контексте вы его использовали?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34480293
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewи поэтому "кит" и "слон" - повсеместно тащат за уши этот "сахар" в свои ООЯ, придавая им "неявные" черты ФЯ - т.е. думающие люди выбирают путь развития для своих ООЯ не по принципу "академичности" и "концептуальности", а по принципу - "практичности" и "удобства"...

А можно нескромный вопрос: что такое функция с точки зрения ООП: метод, свойство или что-то еще ?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34480645
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мод...
А можно нескромный вопрос: что такое функция с точки зрения ООП: метод, свойство или что-то еще ?
А вам-то, как поклоннику "утиной типизации" какая разница?
Если оно "крякает" как функция, "ходит" как функция, "плавает" как функция - используйте "это" по месту употребления функции... (например, как "уточняющий" аргумент в вызовах ФВП вроде map, fold или foreach).
Или вы хотите, чтобы "внутри" среды исполнения была соблюдена "концептуальная чистота", т.е. lambda expressions "разворачивались" компиллятором не в "делегаты", или в "функторы", а во что-то еще более "концептуально чистое", вроде "функциональных объектов первого рода"?
По большому счету, на данном этапе развития технологии (ИМХО) - "с головой" хватит и "делегатов" (с "функторами"), а ввести при необходимости (в борьбе за ту же "мифическую" производительность) в FCL дополнительную сущность - труда не составит (или немного "обработать напильником" концепцию делегатов).

З.Ы. если отвечать прямо на поставленный вопрос, то для меня "функция в ООП" - это отдельный класс сущностей, характеризуемых только выполняемыми ими действиями, в самом грубом приближении - "публичный класс с единственным исполняемым методом по-умолчанию". Но, как правильно заметил NGGU (да и не он один) - в синтаксисе "классического" ООП такие конструкции довольно громоздки и запутывают суть происходящего в коде за паутиной "служебных" объявлений... А при введении в синтаксис ООЯ lambda expressions (ИМХО) - вся эта "паутина" отметается на совесть компиллятора... Вот и вся недолга...
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34480828
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewА вам-то, как поклоннику "утиной типизации" какая разница?
Если оно "крякает" как функция, "ходит" как функция, "плавает" как функция - используйте "это" по месту употребления функции...
Т.е. очередной гибрид ? В принципе я не против. Вот питон живет себе с ООП и ничего. Правда ООП в питоне опционально.
зы а утиная типизация это что ?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34480974
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мод... зы а утиная типизация это что ?
Прикалываетесь, или правда - ни разу не слышали такого "термина"?
(да, в том же приснопамятном RSDN #4, 2006 - это словосочетание упоминается по 10 раз чуть ли не в каждой статье, а там всего 3 "программных" статьи: Haskell, Ruby, Nemerle).

Ну, если и правда не доводилось слышать - это такое правило "мягкого" выведения типов принимаемых аргументов, когда на тип аргумента не ставится никаких дополнительных "ограничений", сверх того, что необходимо "принимающей стороне" для их успешной обработки (больше характерно для т.н. "динамических" ЯВУ, чем для ФЯ/ООЯ).
В ООП-аналогии похоже на повсеместное использование "интерфейсов" вместо иерархии наследования конкретных и абстрактных базовых классов (типов).
Т.е. условно говоря, "договариваемся" о том, что MyCoolDataGrid, к примеру, будет способен отображать на GUI любые коллекции, реализующие IEnumerable с элементами, умеющими реализовать ToString() - и все... больше MyCoolDataGrid-у "заботиться" не о чем... хоть DataSet ему передавай, хоть List<int>, хоть MyCoolObject[] - он их всех "аккуратно" отобразит в клеточках по-порядку... потому как - "крякает" то, что ему передается - "как утка" (т.е. умеет "последовательно перебираться методом MoveNext()") и "плавает как утка" (т.е. умеет "отобразить себя методом ToString()"), значит для MyCoolDataGrid-а это и есть - "утка" (он только с такими "утками" и умеет работать, и что там конкретно за тип ему передается для отображения: DataSet, коллекция или массив - ему абсолютно фиолетово).
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34481084
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewи что там конкретно за тип ему передается для отображения: DataSet, коллекция или массив - ему абсолютно фиолетово).
Спасибо, не знал. Но я действительно сторонник мягкой типизации или даже ее отсутствия.
Возвращаясь к функциям в ООЯ: нужно ли объявлять класс для одной единственной функции ? Или можно просто объявить функцию вне всякого класса.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34481229
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод dejavewи поэтому "кит" и "слон" - повсеместно тащат за уши этот "сахар" в свои ООЯ, придавая им "неявные" черты ФЯ - т.е. думающие люди выбирают путь развития для своих ООЯ не по принципу "академичности" и "концептуальности", а по принципу - "практичности" и "удобства"...

А можно нескромный вопрос: что такое функция с точки зрения ООП: метод, свойство или что-то еще ?


Если в java, то объект. Что же ещё?

Класс этого объекта выводится автоматически из сигнатуры метода объекта или локального метода или анонимной функции или описании функциональной переменной.

Создание функционального объекта происходит неявно при объявлении локального метода, анонимной функции и в момент создания ссылки на метода объекта.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34481238
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
Речь, естественно, идёт о java 7.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34481324
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsЕсли в java, то объект. Что же ещё?
Причем тут java. Если я не ошибаюсь в ООП есть только классы объектов.
У объектов есть свойства, а у классов методы, которые применяются к объектам. А что есть функции ? Вот в c# вообще нет функций - отчего бы это.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34481454
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мод dejavewи что там конкретно за тип ему передается для отображения: DataSet, коллекция или массив - ему абсолютно фиолетово).
Спасибо, не знал. Но я действительно сторонник мягкой типизации или даже ее отсутствия...
Велкам, как говорится... (значит, насчет вашей приверженности мягкой типизации я угадал).

мод... Возвращаясь к функциям в ООЯ: нужно ли объявлять класс для одной единственной функции ? Или можно просто объявить функцию вне всякого класса.
Если вы спрашиваете мое личное мнение - то мне пока все равно... (исходя из той же концепции "мягкой типизации" или избегания всяких "жесткостей" без явной на то необходимости).
Ведь, что по-сути происходит в коде ОО-программы на C# когда кто-то пишет в теле класса что-то типа такого (expression):
Код: plaintext
1.
2.
3.
...
public event AlarmEventHandler Alarm;
...
Это похоже на "объявление поля события" с "именем" Alarm и "типом" AlarmEventHandler внутри класса, хотя, на самом деле CLR (компилятор) - создает поле делегата типа System.MulticastDelegate c "внутренним" признаком того, что он может выполнять методы (функции) с сингатурой, описанной уже вне класса другим "выражением" (expression):
Код: plaintext
1.
2.
3.
...
public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
...
И одно выражение и другое - "синтаксически" выглядят как "объявления" чего-то связанного с вызовами событий/обработчиков, но на самом деле - таковыми не являются, т.к. первое создает поле System.MulticastDelegate внутри класса, а второе - уточняет сигнатуру конкретного System.MulticastDelegate (или его неявного прямого наследника, но нам-то - какая разница?), который будет использоваться "по месту" везде, где встретится вызов "типа" AlarmEventHandler...
К чему мы приходим относительно вашего вопроса?
В контексте использования lambda expressions - какая разница во что "выводятся" компиллятором синтаксические конструкции вроде этих?
Код: plaintext
1.
2.
3.
x => x +  1 
// или
(x, y) => { return x * y; }
Если это будет "служебный" приватный метод класса (выведенный "умным" компиллятором из "знания" о том, что все аргументы и результат не выходят за scope одного и того же "внешнего" вызова) - замечательно... (ничего проще и яснее - придумывать не надо).
Если это будет "служебный функциональный объект" с одним и тем же методом (условно говоря - ___execute_me___()) в который из "лямбды" попадет только "тело" - ничего страшного в этом тоже нет.
Даже если это будет - "полновесный" генерик-делегат со всей его "обвязкой" в виде XXXEventArgs, add, remove и перегрузкой операторов "+=" и "-=" - тоже вполне приемлемое "решение", по крайней мере - пока...
Ну и сами скажите теперь - зачем при таком "выведении" сущностей исполняющей среды (types) из выражений ООЯ (expressions) нужно где-либо что-либо еще объявлять ("функции вне классов" или "классы для функций")?
"Все уже объявлено до нас..." - перефразируя известный фильм...
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34481792
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to mayton

Меня задела фраза. Почему вы считаете, что RSDN стал "помойкой" ? Из каких фактов это следует?

Большинство статей по темам, которые я хорошо знаю (C++, Java) - неквалифицированны, бывает полная чушь. Из этого я делаю вывод, что и остальным нельзя доверять. Мне не нравится, что журнал опустился. Помню, было время, когда я охотно покупал его на свои деньги. Теперь на работе выписывают. На свои деньги уже не стал бы покупать. Смотрю - и ничего там нет.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34482302
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewНу и сами скажите теперь - зачем при таком "выведении" сущностей исполняющей среды (types) из выражений ООЯ (expressions) нужно где-либо что-либо еще объявлять ("функции вне классов" или "классы для функций")?
Ну саму-то функцию надо где-то объявить. Заводить для этого класс явно лишнее. Получается "функция вне классов", но это фактически означает включение в ООЯ элементов "не ООП", т.е порождаем некий гибрид, что не есть хорошо.
зы lambda expression как любое выражение всегда локально (пмсм), а вот имя функции имеет область видимости.
ззы и еще - если что-то выглядит как кошка, то это и должна быть кошка, т.е. синтаксис и семантика элементов языка должны соответствовать друг другу.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34482689
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavew maXmoбольше кодаЭто вы - "обо што"?хотелось бы логически законченный пример, а не жалкие огрызки кода.
NotGonnaGetUsВсё останется как есть с той разницей, что код станет более компактным.
Код: plaintext
1.
2.
3.
4.
 for (string s: strings) System.out.println(s + ", " + s.length());

//И будет после введения лямбд
strings.foreach((string s) : System.out.println(s + ", " + s.length()););
ну и кто компактнее?
dejavewЧто-то перечитал еще раз про "Lambda expressions", ей-БГ, не заметил ничего "порочащего" их "функциональную чистоту", кроме того, что они могут неявно каститься в генерик-делегаты там, где это необходимо "по месту".А как выглядит определение функции, принимающей в качестве параметра лямбду? Разве появился тип System.Lambda?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34482812
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мод
Я бы со многими вашими тезисами поспорил...
Поэтому, придется - по порядку следования (хоть, и ненавижу я 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]; "?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34482856
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewмогут сильно различаться вариантами реализации и "стилевыми особенностями" этого самого "отбражения" (условно говоря: кому проще сделать из "ex-функции" класс - тот делает класс, которого мы никогда не "увидим", пока не залезем в исполняемый код "грязными руками"вообще-то, вся эта ООпафосная шелуха просто шелуха над старым добрым асмом: где-то сидят метаданные, где-то vtable, в куче – объекты, а остальное – куски кода – тела функций, а вызов как и раньше: запихнули параметры в стек и – call по нужному адресу.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34482964
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод 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.
    namespace Mod
    {
        public delegate void Proc<T>(T t); //Описание типа функции

        class Evil
        {
            public void Preved(string s)
            {
                Console.Out.WriteLine("Preved, {0}!", s);
            }

            public void ForMod()
            {
                //Самая настоящая "функция" (ссылка на метод объекта (не класса) Evil):
                Proc<string> function = Preved; 
                function("Mod"); 
               
                //Тем не менее, эта функция ничто иное как объект (Delegate - это обычный класс):
                Delegate functionObject = function;

                Console.Out.WriteLine(functionObject.GetType());
            }
        }
    }
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34482966
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavew
Первое "спорное" утверждение - "функция" как сущность ЯВУ определенная в синтаксисе этого ЯВУ (т.н. "ex-функция", от "expression") вполне может обойтись и без явного "объявления".
Может, но очень иногда. А почему вы ограничиваетесь только "ex-функциями" ? А как же
Код: plaintext
1.
2.
public func f1(x) return x
private func f2(x) return x
"ex-функции" нужны только иногда, когда не хочется сочинять новые имена и когда это имя никогда не потребуется. В остальных случаях - явное объявление. А как еще использовать функцию везде где потребуется.
dejavewЧто есть "явно лишний" класс в вашем понимании
Лишнии буквы в программе, которые должен написать программер.
dejavew12.345.GetType().ToString().Split('a')[0]; "?
А это что ? Действительно неочевидный текст напрягает.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483018
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
Код: plaintext
1.
2.
3.
4.
5.
        public delegate void Proc<T>(T t); //Описание типа функции
        //это описание типа делегата – объявление класса

        //Самая настоящая "функция" (ссылка на метод объекта (не класса) Evil):
        Proc<string> function = Preved; //неявное создание объекта делегата
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483023
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo
NotGonnaGetUsВсё останется как есть с той разницей, что код станет более компактным.
Код: plaintext
1.
2.
3.
4.
 for (string s: strings) System.out.println(s + ", " + s.length());

//И будет после введения лямбд
strings.foreach((string s) : System.out.println(s + ", " + s.length()););

ну и кто компактнее?

Нужно "шырше" смотреть :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 for (string s: strings) {
    System.out.println(s + ", " + s.length());
}
 for (string s: anotherStrings) {
    System.out.println(s + ", " + s.length());
}
 for (string s: strings) {
     if  (s.length() >  5 )  {
        System.out.println(s + ", " + s.length());
    }
}

//И будет после введения лямбд
 void (string) x = (string s) : System.out.println(s + ", " + s.length());
 boolean (string) f = (string s) : s.length() >  5 ;

strings.foreach(x);
anotherStrings.foreach(x);
strings.filter(f).foreach(x);

И главным образом сокращается не количество строк, а количество дублируемой логики, т.к. появляется возможность строить абстракции более высокого порядка, чем for и if-else.

maXmo
А как выглядит определение функции, принимающей в качестве параметра лямбду? Разве появился тип System.Lambda?

Вам ли не знать, как это выглядит? :)

Возвращаясь к примеру кода из моего предыдущего сообщения:
Код: plaintext
1.
2.
3.
Proc<string> function = Preved;
...
function = delegate(string s) { Console.Out.WriteLine(s.Length); };
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483037
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmo... вообще-то, вся эта ООпафосная шелуха просто шелуха над старым добрым асмом: где-то сидят метаданные, где-то vtable, в куче – объекты, а остальное – куски кода – тела функций, а вызов как и раньше: запихнули параметры в стек и – call по нужному адресу.
Кто ж спорит-то? Набор инструкций х86 еще не скоро будет отменен за ненадобностью...
Только, почему такое пренебрежение к категорям ЯВУ вообще, и ООП в частности ("вся эта ООпафосная шелуха")?
Или вы - из т.н. "С-шников старой закалки", для которых - "Нет Бога кроме - Кернигана, а Ричи - пророк его!"?

З.Ы. вдогонку к предыдущему спичу - чем вам генерик-делегаты-то не угодили?
Что плохого в том, что в C#3.0 будет реализовано что-то типа этого?
Код: plaintext
1.
2.
3.
4.
...
var lambda = x => x+ 1;
Console.WriteLine(lambda.GetType().BaseType.ToString()); // #=> System.MulticastDelegate
...
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483053
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo NotGonnaGetUs
Код: plaintext
1.
2.
3.
4.
5.
        public delegate void Proc<T>(T t); //Описание типа функции
        //это описание типа делегата – объявление класса

        //Самая настоящая "функция" (ссылка на метод объекта (не класса) Evil):
        Proc<string> function = Preved; //неявное создание объекта делегата


К чему такие мудрые высказывания?

См. сообщение http://sql.ru/forum/actualthread.aspx?tid=421067#4058712
я обо всём этом там написал.

Не нужно путать детали реализации компилятора и язык программирования, о чём dejavew уже тоже писал...
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483115
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs... Возвращаясь к примеру кода из моего предыдущего сообщения:
Код: plaintext
1.
2.
3.
Proc<string> function = Preved;
...
function = delegate(string s) { Console.Out.WriteLine(s.Length); };

Это вы, уважаемый, не на c#2.0 писали, наверное, а "внутри головы" (бывает такое и со мной в порыве "запальчивости").
На c#2.0 надо примерно, так:
Код: plaintext
1.
2.
3.
4.
Proc<string> function = new Proc<string>(Preved); // это - определение с помощью явного конструктора типа делегата...
... // тут можно уже function ("Mod"); дергать...
function = delegate(string s) { Console.WriteLine(s.Length); }; // а это уже переопределение с помощью анонимного делегата,
// (ака - замена функциональности "на лету").

З.Ы. то maXmo - ну вот, кода-то наворотили за 4 поста - 3 горы, а что толку?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483142
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewЭто вы, уважаемый, не на c#2.0 писали, наверное, а "внутри головы" (бывает такое и со мной в порыве "запальчивости").


А со мной не бывает :) Это код на с#2.0.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483171
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsСмотрим пример
Да уж. Спасибо, такое ФП нам не надо.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483181
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs...
А со мной не бывает :) Это код на с#2.0.
Во, блин... (и точно).
Как языки-то "вперед двинулись", не успеваешь за сокращением синтаксиса следить...
А "мод" еще "причитает" о соответствии "семантики" и "синтаксиса"...
По-моему как раз:
Код: plaintext
1.
Proc<string> function = Preved;
и "семантически", и "синтаксически" более адекватно выглядит, чем "старое-доброе" (ау, любителям ассемблера):
Код: plaintext
1.
Proc<string> function = new Proc<string>(Preved); // хотя, "концептуально" это - более "чистое" ООП-выражение...
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483200
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мод NotGonnaGetUsСмотрим пример
Да уж. Спасибо, такое ФП нам не надо.
Ну а, к примеру, какого бы "ФП" вам хотелось?
Я там, давеча, приводил примеры "выведения" лямбд "по-месту":
Код: plaintext
var lambda = x => x + 1;
Чем это вам не "объявление функции"?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483463
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод NotGonnaGetUsСмотрим пример
Да уж. Спасибо, такое ФП нам не надо.

Кому "вам"? Тебе? Доводов не будет? Тогда, тут не поспоришь.
Если, н-р, кому-то не хочется разбираться с ООП и из-за этого хочется поливать его грязью, то такому человеку уже ничего не поможет :)


А "такого" в этом ФП ничего нет. Обычное ФП. Анонимные функции есть, все функции/методы свободно передаются по ссылке, соответственно легко строятся функции высших порядков и прочее.
На данный момент записи лямбд избыточны, но этот вопрос будет решён в обозримом будущем и это никак не влияет на возможноть писать в ООЯзыках в функциональном стиле.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483478
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavew
Код: plaintext
1.
Proc<string> function = new Proc<string>(Preved); // хотя, "концептуально" это - более "чистое" ООП-выражение...


А где чистота-то? Всё равно имя метода передаваемого в качестве параметра не является "ООП-выражением" :)

"Чище" было бы:
Код: plaintext
1.
Proc<string> function = new Proc<string>(this, "Preved"); //а внутри дикий рефлекшин :)
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483490
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewА "мод" еще "причитает" о соответствии "семантики" и "синтаксиса"...
По-моему как раз:
Код: plaintext
1.
Proc<string> function = Preved;
и "семантически", и "синтаксически" более адекватно выглядит
А так еще адекватнее:
Код: plaintext
1.
2.
x=Preved
x("Hello word")
Имя процедуры как значение переменной - всего и делов-то.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483514
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод
А так еще адекватнее:
Код: plaintext
1.
2.
x=Preved
x("Hello word")
Имя процедуры как значение переменной - всего и делов-то.

Так не адекватнее, т.к. исключается возможность проверки типов. В переменной x легко может оказаться функция, которая принимает на вход не строку, а синих ёжиков.

Естественно, если речь идёт не о МL языках, в которых вывод типов делается автоматически.

Но, во-первых не любой функциональный язык обладает такой возможностью, во-вторых вывод типов в ООЯзыках тоже возможен, примером чего служит Nemerle.
Там можно написать:
def x = Preved;

и следующая строчка приведёт к ошибке компиляции:
x(1,2,3);
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483557
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavew
Код: plaintext
var lambda = x => x + 1;
Чем это вам не "объявление функции"?
Я же не против. lambda выражения нужны, но их применение ограничено например нет рекурсии.
dejavewНу а, к примеру, какого бы "ФП" вам хотелось?
Это сложный вопрос. Чистого ФП вообще не бывает, только как часть процедурно-ФП.
К самим функциям (да и к процедурам) требования такие:
1 передача аргументов всех типов по значению
2 максимально ленивые вычисления
3 аргументы и значение любых типов (в т.ч. и функции)
4 динамический вызов по шаблонам (не путать с сигнатурой)
5 транзакционность
6 параллельность
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483577
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод
5 транзакционность
6 параллельность

Сорри, но я катаюсь под столом :)
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483620
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsТак не адекватнее, т.к. исключается возможность проверки типов.
Статическая проверка типов вещь нужная, но в данном случае не спасает: sin(x) и cos(x) имеют один тип, но функции то разные. Остается только динамическая проверка.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483624
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsСорри, но я катаюсь под столом :)
А подробнее
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483784
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мод...
1 передача аргументов всех типов по значению
2 максимально ленивые вычисления
3 аргументы и значение любых типов (в т.ч. и функции)
4 динамический вызов по шаблонам (не путать с сигнатурой)
5 транзакционность
6 параллельность
Я, конечно, как NGGU, под столом кататься не собираюсь, только очень сильно подозреваю, что весь вышеперечисленный список (за исключением п.п. 1 и 4, да и то "с натяжкой") - суть характеристики среды компиляции/исполнения, а отнюдь не ЯВУ... (будь он хоть ООП, хоть ФП, хоть "динамически-скриптовый", как это сейчас популярно на примере Ruby).
Языку, как набору синтаксических выражений, абсолютно пофигу - в какую семантическую модель он "складывается" внутри среды компиляции/исполнения: объектную, функциональную, транзакционную, параллельную или "адресно-стековую"... (но, об этом уже 100 раз "перетиралось").
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483808
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewтолько очень сильно подозреваю, что весь вышеперечисленный список (за исключением п.п. 1 и 4, да и то "с натяжкой") - суть характеристики среды компиляции/исполнения, а отнюдь не ЯВУ
Нет, это все д. б. поддержано на уровне конструкций самого языка. А то что допускает семантическую неоднозначность, д.б. зафиксировано. Компилятор здесь не причем - он не определяет семантику.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34483958
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мод dejavewтолько очень сильно подозреваю, что весь вышеперечисленный список (за исключением п.п. 1 и 4, да и то "с натяжкой") - суть характеристики среды компиляции/исполнения, а отнюдь не ЯВУ
Нет, это все д. б. поддержано на уровне конструкций самого языка...
Ну вот, не могу я понять - как "на уровне конструкций самого языка" поддержать "параллельность" и "транзакционность" задачи поиска человека по имени, фамилии и году рождения в огромном мегаполисе?
Код: plaintext
1.
2.
3.
var catch_me_if_you_can = NewYorkCity.Find(new Person("John", "Daw",  1940 )); 
// "это" вполне может быть реализовано и "параллельно" и "транзакционно"...
// но - каким-таким способом вся "подножная" "параллельность" и "транзакционность" должна быть отображена в синтаксисе вызова?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34484211
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод 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 параллельность

Это что за чудо?
Потенциальная возможность компилятором выполнять вычисления во многопоточном режиме, опираясь на отсутствие деструктивных присвоений?
Так об этом ограничении слова не было сказано... Или всё-таки было?
А как тогда это связано с языком?!

Требуются комментарии.

Что не строчка - то анекдот. Вот и приходится крышку стола всестронне изучать.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34484221
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewНу вот, не могу я понять - как "на уровне конструкций самого языка" поддержать "параллельность" и "транзакционность"
Ессно это надо не для всех задач, т.е. транзакции нужны только при параллельной работе.
Пример
Код: plaintext
1.
p1; p2; p3  -- последовательное выполнение - ничего не нужно
Код: plaintext
1.
p1, p2, p3  -- || выполнение
внутри p1, p2, p3 begin transaction - commit transaction иначе корректного выполнения || процессов не будет. Собственно ничего нового, все это давно есть в СУБД, а данные в ОП чем хуже.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34484493
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewКто ж спорит-то? Набор инструкций х86 еще не скоро будет отменен за ненадобностью... не, это я рассказал, как ил работает.

NotGonnaGetUsК чему такие мудрые высказывания?я просто перевёл на пафосный язык, а то слова неправильные были написаны.

dejavewто maXmo - ну вот, кода-то наворотили за 4 поста - 3 горы, а что толку?я хотел примера для встроенного скруля.

dejavewПо-моему как раз:
Код: plaintext
1.
Proc<string> function = Preved;
и "семантически", и "синтаксически" более адекватно выглядитмне почему-то кажется, что это калька с плюсов:
Код: plaintext
1.
CString str = "yo";

NotGonnaGetUs dejavew
Код: plaintext
1.
2.
Proc<string> function = new Proc<string>(Preved);
 // хотя, "концептуально" это - более "чистое" ООП-выражение...
А где чистота-то? Всё равно имя метода передаваемого в качестве параметра не является "ООП-выражением" :)а делегаты особенные, что инкапсулируют, тем и инициализируются, усё логично.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34484562
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo
NotGonnaGetUsК чему такие мудрые высказывания?я просто перевёл на пафосный язык, а то слова неправильные были написаны.

Нет.
Ты описал, что значат эти строчки для компилятора с#, разбирающиего эти строчки, а я написал, что эти строчки значат для читающего программу.

NotGonnaGetUsа делегаты особенные, что инкапсулируют, тем и инициализируются, усё логично.
Это не логично, т.к. никакой другой конструктор, кроме конструктора делегате не может принять Preved в качестве аргумента.
Логичной является мысль о том, что если в конструктор какого-то класса можно передать что-то, то ничто не должно ограничивать возможность передать это что-то в любой другой конструктор или метод, а значит это что-то может быть присвоено переменной.
В версии 2.0 так и поступили.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34484613
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmo... я хотел примера для встроенного скруля.
А вы еще до сих пор думаете, что LINQ - это "встроенный SQL"?
Не знаю уж, хорошо это или плохо, но это - не так...
LINQ - это более "обобщенное" понятие, оперирующее "данными" на уровне абстракций (списки, наборы записей, наборы узлов и т.д.), хотя, синтаксически на SQL он все-таки "похож" (в ссылке, которую вы, надеюсь, читали - все это есть):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
from * in
	from c in customers
	join o in orders on c.CustomerID equals o.CustomerID into co
	select new { c, co }
let n = co.Count()
where n >=  10  
select new { c.Name, OrderCount = n }
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34484962
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут вижу обсуждение на неопределённую тему.
Продолжу про конвергенцию. Практически она может состоять в добавлении элементов ф.п. к одному из обычных языков программирования, скорее в 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.
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34485545
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Модератор:
удалено

Partisan M... не говорить "хочется", а обосновывать, какая польза будет для Java.

Модератор:
удалено



я считаю (возвращаясь к теме), что "польза для Java" как раз и выражается в том, что сначала некоторым, потом многим другим, а потом уже и большинству остальных (именно людей, использующих Java) начинает "чего-то хотеться". И следствием этого "хочется" - появляются технологии и решения, которые двигают Java (и не только ее, заметьте) по "абстрактной" шкале развития.
Или, опять же, как "С-шник старой закалки", вы считаете - все, что не связано напрямую с записью в регистры процессора и манипулированием стеком/кучей/vtable - "пафосным бредом"?
Ну дык, вспомните, хотя бы, тот же приснопамятный SQL (в его "чисто концептуальном" виде), никто же не будет спорить о том, что его различные реализации (в виде различных серверов СУБД) написаны с помощью "манипулирования стеком/кучей/vtable", зато - где вы найдете в синтаксисе SQL хоть 1 намек на такие "низкоуровневые" подробности?
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34485595
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Partisan M... в добавлении элементов ф.п. к одному из обычных языков программирования, скорее в Java или C#. В последнем случае как бы не пришлось вводить их во всё NET (что кажется большой проблемой)...
...Один зарубежный чувак предолжил ввести в Java замыкания (closure). Спросили - зачем. Ничего конкретного - "хотелось бы" и всё....
...Вижу - любители замыканий не унимаются, и уже состряпали что-то вроде обоснований...
По-моему, вы невнимательно читаете обсуждение (или вообще не читаете приводимые ссылки).
Добавление "элементов ф.п. ... во всё NET" - давно уже не является ни проблемой ("большой" или "маленькой"), ни даже вопросом обсуждения - это уже делается полным ходом в полном соответствии со спецификацией C#3.0.
Равно как и реализация замыканий (closures) в Java 7...
...
Рейтинг: 0 / 0
ООЯ/ФЯ перспективы полной конвергенции?
    #34491272
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan M...

По сабжу я - за конвергенцию. Однако у меня возникают опасения за дальнейшую судьбу такого OOP/FL языка. Ведь язык должен иметь исчерпывающий набор грамматик и семантик, доступный для освоения хотя-бы в рамках "постановили-разработали-внедрили".

Не будет ли он недостижимой вехой в современных коллективных методологиях разработки?
...
Рейтинг: 0 / 0
57 сообщений из 57, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ООЯ/ФЯ перспективы полной конвергенции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]