ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Рефал » Лямбды против всех


Лямбды против всех

Сообщений 1 страница 14 из 14

1

Уткин говорит, что лямбды это сахар, МихалНик говорит, что лямбды ненужные. Всё было не так!

AveNat написал(а):

Алонзо Чёрч - изобрёл λ-исчисление

AveNat написал(а):

в середине 60-х Питер Ландин не отметил, что сложный язык программирования проще изучать, сформулировав его ядро в виде небольшого базового исчисления, выражающего самые существенные механизмы языка и дополненного набором удобных производных форм, поведение которых можно выразить путем перевода на язык базового исчисления. В качестве такой основы Ландин использовал лямбда-исчисление Чёрча. (https://habrahabr.ru/post/215807/)

AveNat написал(а):

лямбда-исчисление — это не язык программирования, а формальный аппарат, способный определить в своих терминах любую языковую конструкцию или алгоритм. В этом смысле оно созвучно машине Тьюринга

AveNat написал(а):

Булевы константы, оператор If (https://habrahabr.ru/post/215991/), числа Чёрча, сложение, умножение

в википедии ещё есть вычитание ("Вычитание придумал Клини, когда ему вырывали зуб мудрости").

Отредактировано Лис (2018-01-30 00:00:58)

0

2

Всё было не так!

Не важно как оно было. Важно как есть сейчас.

что сложный язык программирования проще изучать,

В результате народ отказался от сложных языков (не считая гиков типа хаскеловцев) и использует легкие. Поэтому такое усложнение не оправдано. Мало того что нужно знать программирование, всякие семантики, грамматики, так теперь еще и лямбда-исчисление. А для чего? Как всегда у Лиса конечная цель не ясна.

в википедии ещё есть вычитание

А синус? Хочу синус! А операцию определения числа символов в строке? А операцию остатка от деления нацело? Понимаете, в мое время недостижимыми мечтами были космос и компьютеры. Сейчас так устроено (блин ну как тут без политики?) в нашей стране, что у людей потеряны ориентиры. Вот Вы нашли свою романтику, а я хочу практической значимости инструмента. Не мечтать - ах, как элегантна запись в лямбдах! А практический результат от их применения. В практическом результате я жду упрощения написания языков программирования. Чтобы вот не парясь оперировать такими категориями, которые позволяли писать даже не программы, а информационные системы. То что Вы предлагаете это получить кандидатскую по вычислительной математике причем всем языкописателям. При этом я не вижу главной цели. Выработать аппарат - для чего? Для того чтобы было еще сложней? М-мм, в то время как у нас нет вообще в принципе своего языка, давайте как усложним процесс еще больше, ага. Очень удачное предложение практического характера.

Отредактировано utkin (2018-01-30 08:27:22)

0

3

За последние полгода обнаружено минимум три транспилятора из русскоязычного синтаксиса куда-нибудь (1Скрипт, Яр и ещё какой-то там с синтаксисом 1С, не вспомню с хода, но на этом форуме он упоминался).

Значит в целом русскоязычные программисты метод рекурсивного спуска освоили.
Теперь имеет смысл договариваться об общем промежуточном представлении
и делать один общий бэкэнд (по аналогии с llvm).

Отредактировано Лис (2018-01-30 09:18:42)

0

4

Зачем? Рекурсивный спуск это процесс построения и обхода дерева :). Зачем к нему нужны лямбды? Опять какой-то бесконечный процесс ради процесса. Где свет в конце тоннеля, где пустые обещания улучшения труда программистов? А давайте слону вместо хобота хвост от страуса пришьем! Ну круто же! А зачем? Да, погоди ты, вон какая красота!
Да и ответа по-прежнему нет, а дьявол кроется в деталях - хочу лямбда-синус! Вы говорите, что это перспективно (модное слово, означающее возможность, но не гарантирующее реальность проекта), хорошо, давайте аппарат целиком так сказать. Сгенерируйте синус в лямбда исчислении. А потом напишите инструкцию, которая позволяла бы не искать операции в инете, а самостоятельно из лямбд выводить описание этих всех кошерных вещей типа тригонометрии, строковых операций и вообще всего, что отличается от х + у. И чтобы эта инструкция была понятна хотя бы Уткину (как критерий порога вхождения - уже если я пойму, то другие точно поймут :) ), а не только профессору математических наук, практикующем где-нибудь в Оксофорде.

Отредактировано utkin (2018-01-30 09:31:51)

0

5

Лис написал(а):

МихалНик говорит, что лямбды ненужные. Всё было не так!

Именно. МихалНик говорил, что обозначения непригодные. Потому что сперва надо описывать структуру данных, а не терминологию, натянутую на несколько рандомно выбранных значков.
Ещё может добавить, что и неэффективные.
Возможно, Лис там же по ссылке не дочитал:

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

Т.е. вместо какого-нибудь Бякуса. Не для написания программ.

0

6

Булевы константы, оператор If (https://habrahabr.ru/post/215991/), числа Чёрча, сложение, умножение

Вот читаю я это и что же там вижу?

tru = λt.λf.t

Мы лямбде присваиваем имя. Ну и все - последнее для чего это было нужно (безымянность функции) убито напрочь.
Итого из минусов:
1) Невыражаемый синтаксис. Имеется ввиду на электронных устройствах, потому что для этого нужно нестандартные средства (вроде как клавиатуры для языка APL) как минимум ввода. Писать lambda (x, y) {x + y} вообще ничем не отличается от add (x, y) {x + y}
2) Матан требующий отдельного курса. Причем явно не школьного. При этом тот же критикуемый БНФ воспринимается лучше, чем лямбды.
3) Отсутствие простых и четких инструментов (кроме неокрепшего мозга испытуемого), позволяющих проводить работы с лямбдами.
4) Нестандартный синтаксис, неочевидный для большинства человекоподобных:

f = λx.λy.t

Это объявление функции. Если это лучше, чем стандартное f(x, y){t - тело цикла}, ну не знаю. Зачем вводить новые определения, когда успешно работают старые?

0

7

Алонзо Чёрч - изобрёл λ-исчисление

А его ровесник - Андрей Андреевич Марков:

И есть соответствующий ему Рефал, разработанный Турчиновым:

РЕФАЛ (РЕкурсивных Функций АЛгоритмический) — один из старейших функциональных языков программирования, ориентированный на символьные вычисления: обработку символьных строк (например, алгебраические выкладки); перевод с одного языка (искусственного или естественного) на другой;

Документация по-русски явно имеется и, скорее всего, даже описание качественнее.
Тогда почему мы должны ковыряться в блямбдах? Чем они лучше? Ну если формально разницы нет - то от Рефала, наверное, хотя бы можно добиться релевантных сслылок, академические связи, научные статьи, даже стипендии и награды не выходя из русскоязычной среды.

Отредактировано MihalNik (2018-01-30 21:30:52)

0

8

MihalNik написал(а):

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

Как идут дела? Чего удалось добиться?

0

9

Лямбды победили. Все современные программисты их поняли, приняли и используют. Обсуждать их ненужность не имеет смысла. Если кто-то их не понял - значит, отстал от поезда и надо подучить. Иначе неконкурентоспособность. Ну или можно намеренно от них отказаться, увеличивая пропасть между собой и "мейнстримом". Проблема лямбд - та же, что и у функций обратного вызова - они сметают границы между модулями. Причём лямбды делают это более агрессивно. Зато в них гораздо меньше букв и они очень удобны, например, для случая, когда нужно провести поиск в массиве по условию. Оформил условие лямбдой - и всё. Буквально меньше строчки кода. С другой стороны, когда в отладчике полный стек из анонимных лямбд, то смотреть на это не особо-то приятно. Но здесь ключевое слово - это "анонимных". В принципе ничто не мешает придавать имя любой лямбде в исходнике, ну, если язык это допускает. Лисп допускает. Конечно, порождение лямбд, передача их и дальнейшее использование позволяют сделать код весьма запутанным, но это как любой мощный инструмент.

P.S. и понятие лямбд, и их промышленное применение стары, как лисп. Т.е. думаю, где-то в 70-х они уже массово применялись в промышленности. Т.е. их нельзя назвать какой-то новомодной фишкой, придуманной кем-то, только, чтобы занять население. Они достаточно органичны. Просто до некоторых языков они дошли гораздо позже. Ввиду общего культурного отставания России в плане компьютерной культуры этот момент для многих стал сюрпризом, возможно, неприятным.

Отредактировано БудДен (2021-01-17 15:15:41)

0

10

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

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

Все современные программисты их поняли, приняли и используют.

SQL-запросы давно поняли, приняли и используют.

они очень удобны, например, для случая, когда нужно провести поиск в массиве по условию. Оформил условие лямбдой - и всё. Буквально меньше строчки кода.

Вас ждут регулярные выражения!

Если кто-то их не понял - значит, отстал от поезда и надо подучить

Подучитесь называть и другие понятия греческими буквами :rofl:

Отредактировано MihalNik (2021-01-17 16:08:26)

0

11

Я спорить, убеждать и устраивать срачи не собираюсь, а просто говорю о том, что сложилось в культуре. Не понимая лямбд, а точнее, концепцию замыкания, не получится прочитать код на множестве ныне популярных языков, уж хотя бы на JavaScript. Если кого-то это задевает и хочется высказать возражения, то считайте, что это моё личное (пусть даже ошибочное) мнение. На возражения отвечать не буду.

Думаю, вот здесь должно быть неплохо описано, плюс ещё комментарии на этом сайте иногда были полезными. Я замыкания знал из лиспа, а не из JS, поэтому оценить не могу.

https://learn.javascript.ru/closure

Отредактировано БудДен (2021-01-17 16:58:47)

0

12

MihalNik написал(а):

Подучитесь называть и другие понятия греческими буквами

Забавная идея. Написать текст про "замыкания" используя вместо греческой лямбды кириллическую А. Будет "программирование с азов".

Сравните две записи одного выражения:

f = λx.λy.t
---
запрос = А это, А то, всё.

Отредактировано Лис (2021-01-17 20:41:47)

0

13

Забавная идея

Забавно, но печально, что люди даже не пытаются выразить русским языком (в данном случае и английским) то, о чем говорят.
Т.е. составить несколько предложений со словами вроде "приставка/предлог", "подстановка" и т.п.
Но при этом изо всех сил твердят как оно всем надо.
Ну засунили библиотеки с регулярками куда только можно. А теперь и определения функций в параметры. Пользоваться-то ими не умеют.
Потому что вместо втирания концепций нужно показывать цену и выгоду.

Отредактировано MihalNik (2021-01-17 21:32:33)

0

14

Вот, вспомнил проект с сокращением ключевых слов до одной буквы:
http://11l-lang.org/ru/

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Рефал » Лямбды против всех