powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ООЯ/ФЯ перспективы полной конвергенции?
25 сообщений из 57, страница 2 из 3
ООЯ/ФЯ перспективы полной конвергенции?
    #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
25 сообщений из 57, страница 2 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ООЯ/ФЯ перспективы полной конвергенции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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