Re: Для чего нужно лямбда-исчисление?
От: cppguard  
Дата: 12.09.24 00:34
Оценка: +1
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Я считаю, что оно нужно только для того, чтобы понтоваться, растопыривая пальцы.


Мне кажется, что там более сложные переходы были. ФП придумали математики, которые любят создать какую-то аксиоматику, обмазаться теоремами на основе этих аксиом, а потом думать, куда приткнуть этот аппарат. Потом была эра стремительного роста вычислительной техники, где решающую роль сыграли технологии, а не теоремы. Другими словами — важнее было наращивать количество флопс чем работать над инструментами доказательства программ. В какой-то момент об ФП узнали программисты и сказали: "О! А давайте сделаем такой язык, где будут только функции, и эту функции будут без побочных эффектов. И мы будем говорить, как это круто, когда нет побочных эффектов". О том, что результат работы программы это всегда побочный эффект, они, конечно, умолчали (или не знали). Так появились языки, объединённые одной сутью: х..ёвый синтаксис, низкая производительность и слово "functional" в описании. Никаких преимуществ у функциональных ЯП перед императивными нет.

Но вот Если копнуть глубже, но начнут проявлятся такие артефакты как зависимые типы. Я пока недостаточно понимаю теорию, чтобы точно ответить, есть ли у завтипов одна база с ФП, но вот практическая польза точно есть. С завтипами мы не просто пинаем хер, доказывая теоремы про Y-комбинатор, но и можем написать программу, которая, например, на этапе компиляции проверяет, что динамичекая строка соответствует некоему шаблону. Например, что она всегда непустая, или является палиндромом. И делается это не при помощи пре- или пост-условий, модульных тестов или статического анализатора. Это именно математически выводимое доказательство корректности типа, а сами условия на данные содержатся в описании типа. Звучит поистине круто, если бы не одно НО — готового коробочного продукта production-grade пока нет и не предвидится.
Re[7]: Для чего нужно лямбда-исчисление?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.09.24 06:24
Оценка:
Здравствуйте, vdimas, Вы писали:

N>>Ну так мне и до сих пор непонятно, какой диверсант распространил раннюю кривую версию разработки (под именем "Pascal")


V>Вирт, вестимо.

V>Его язык "Паскаль" — это один в один Алгол, над которым он работал в кач-ве соавтора.

Нет, различий достаточно много. Начиная с синтаксиса. У Алгола он значительно кривее.

V>Вирт исключил оператор goto из Алгола и еще всякой специфики по мелочи, с целью создать более "чистый" язык для обучения программированию.

V>А так-то это один и тот же язык, считай.

N>>вместо более современных — хотя бы семейства Modula.


V>Дык, он же, Вирт, разработал Модулу-2 на ~20 лет позже.


Путаешь. Паскаль — 1970. Модула-1 — 1975. Модула-2 — 1978. 20 лет там нет.
Вполне можно было уже вместо трубопоскакаля в 80-х сделать что-то более полезное.
cvsup был написан на Модуле-3 и был на каждой BSD до примерно 2003.

V>Чуть более выразительный и чуть более строгий синтаксис.

V>В отличие от Паскаля, этот язык позиционировался для профессиональной разработки, а не обучения.

Но и для обучения он неплох.

Когда я был школоло, мне эта дисциплина их линии ой не нравилась.
Но постепенно начал понимать, чем она хороша.

Проблема в том, что до 20-25 мы почти все такие школоло. Сейчас для таких есть питон и прочая. Тогда — не было.

[skip воспоминания, тут почти полностью согласен]

V>Поэтому, проблема не в плюсах конечно, ругать плюсы за их недостатки более чем бесполезно.

V>Проблема обитает в альтернативах, которых приличных тупо нет.
V>Вон Rust пытается, но на сегодня даже еще не определились — так будет у них модель исключений или нет, ни за что и никогда? ))
V>Язык D был неплохой альтернативой, но они там налажали с миксинами и слишком убежали от совместимости в сниппетах с С++.
V>Всего-то требовалось слегка почистить С++, убрать опасные конструкции из "первой линии доступа", сразу же сделать подмножество SafeD.
V>Но ребята малость увлеклись и просрали полимеры, увы...

Всё равно они все отнимают ниши у C и C++. И это достаточно правильно.
Я писал недавно — в двух последних проектах, где активно был C++, он там был просто не нужен. Оптимумом был бы Go, и разработка шла бы в разы быстрее и проще.
Но кто-то наверху считал, что если это формально embedded (с ARM/64 и 4-8GB рамы, ага), то ничего кроме сей не катит.
И таких в индустрии вагоны с тележками.

V>В Фортране каждый аргумент подробно описывается.


Про Фортран пока пропущу (может, потом вернусь к).
The God is real, unless declared integer.
Re[2]: Для чего нужно лямбда-исчисление?
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 12.09.24 10:26
Оценка:
C> Я пока недостаточно понимаю теорию

Давайте же, давайте поговорим об этом. Мы же тут все мастера форумных сра современных телекоммуникационных технологий и дистанционной коллаборации!
Re[8]: Для чего нужно лямбда-исчисление?
От: vdimas Россия  
Дата: 12.09.24 21:37
Оценка:
Здравствуйте, netch80, Вы писали:

V>>Вирт, вестимо.

V>>Его язык "Паскаль" — это один в один Алгол, над которым он работал в кач-ве соавтора.
N>Нет, различий достаточно много. Начиная с синтаксиса. У Алгола он значительно кривее.

Сама суть языка, способ организации программы, способы объявления и реализации перечислимых множеств, составных типов, массивов, процедур и функций — всё идентично, считай.
Различия синтаксиса косметические, требуют от программиста максимум часа-другого привыкания и далее пошёл как по знакомому. ))


V>>Дык, он же, Вирт, разработал Модулу-2 на ~20 лет позже.

N>Путаешь. Паскаль — 1970.

Фактически он его разрабатывал с 68-го.


N>Модула-1 — 1975. Модула-2 — 1978. 20 лет там нет.


Да, десяток лет, конечно.


N>Вполне можно было уже вместо трубопоскакаля в 80-х сделать что-то более полезное.


Модулу-2, например.
Вполне возможно, что на момент начала разработки Турбо-Паскаля Модулы-2 еще не было.

И еще возможно, что Турбо-Паскаль не позиционировался изначально как "серьёзный" язык — не зря же взяли учебный Паскаль?

Выглядит так, что результат получился намного лучше, чем планировали изначально. ))
Реально крутую среду по тем временам сделали.

И Турбо-С затем — все сишники тех лет через него прошли.


N>cvsup был написан на Модуле-3 и был на каждой BSD до примерно 2003.


Ну...

Как появился Оберон, в курсе?
Вот так же и Модула-3.

Т.е., алголоподобные языки (Паскаль и Модулу-2) стали пытаться использовать для низкоуровневой и эффективной разработки.
И сразу всплыла необходимость доработки этих языков.

Вирт выкатил доработанный Паскаль/Модулу-2 — Оберон, с целью написания одноимённой операционной системы.
Ему пришлось сделать индексацию массивов только от 0-ля (убрав произвольную индексацию, в т.ч. индексацию перечислимыми типами), убрал тормознутые паскалевские множества и еще всякого почистил.

Ну и, ввел автоматическую сборку мусора у динамически-выделяемых объектов.

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

Причём, обеспечить совместимость можно было через механизм некоего obsolete, плюс ключи компиляции и прочее такое...

Но Вирт и Ко поставили во главу угла миниатюрность и эффективность компилятора, за что и поплатились "работой в стол".
И это самый важный урок из всей этой истории...

Реально, если бы приоритет совместимости был выше, если бы не вылизывали сам компилятор, а подержали им семейство диалектов, как это делают компиляторы С++ — история с этим семейством могла быть совсем иной.

Например, новые версии Фортрана, хотя резко почистили синтаксис (вернее, ввели более чистую альтернативу или сократили излишнюю многословность), запросто умеют компилять старый код.

Например, объявление переменной одновременно с её инициализацией значением — удобная фича, но старый вариант тоже прокатывает.


N>Проблема в том, что до 20-25 мы почти все такие школоло. Сейчас для таких есть питон и прочая. Тогда — не было.


ХЗ.
Нам, системщикам/железячникам, приходилось много упражняться на асме тогда, поэтому тонкости ЯВУ волновали не сильно.

У меня в обойме одновременно был Паскаль, Си, С++, Форт, VB/VBA, изредка Фортран (когда готовые расчёты уже есть, но надо чуть допилить), MatLab (это, в первую очередь, язык программирования, а не среда — бо писать расчётные утилиты на ём и консольные было удобно).

Не могу сказать, что были какие-то особые предпочтения в те года, бо плюсов и минусов везде хватало.
Банально брал, что удобнее.

Для парсинга и прочих DSL удобней был Форт (свой ASM-51 на нём как-то за рабочий день сделал, вместе с программой для закачки образа в эмулятор ПЗУ — ни на каком другом тогдашнем языке это принципиально было невозможно, да и сейчас тоже).

Для любых расчётных утилит ничего удобнее MatLaba (как языка) не существовало.

По-быстрому наваять формочки — да какой в опу Дельфи, на VB это было быстрее раз эдак в несколько, плюс проще интероп с плюсами, из-за скриптовой натуры языка в отладочном режиме, при том что скомпилированный код был неплохо оптимизирован, особенно в деле работы с COM-объектами, что это даже заметно эффективнее было, чем пользоваться в плюсах смарт-поинтерами для них же. А если не пользоваться — то ресурсы могут утечь, либо код превращается в бесконечную лапшу проверок. VB в этом смысле был идеален. Следующий раз такое же удобство показал уже njkmrj C#. ))

С++ стал относительно неплох лишь к концу 90-х, и совсем неплох в нулевые, когда куча компиляторов стали утрясаться в совместимости вокруг C++03.

Поэтому, мне и были несколько странны обнаруженные здесь споры о языках в первой половине нулевых, да еще нападки представителей одних лагерей на другие.
Барство всё это. Позволять себе перебирать — это уже роскошь. ))
Всегда надо брать наиболее удобный инструмент.


V>>Всего-то требовалось слегка почистить С++, убрать опасные конструкции из "первой линии доступа", сразу же сделать подмножество SafeD.

V>>Но ребята малость увлеклись и просрали полимеры, увы...
N>Всё равно они все отнимают ниши у C и C++. И это достаточно правильно.

D мог отобрать достаточно много и да, сишники-плюсовики были отнюдь не против.
Многие рассматривали этот язык достаточно серьёзно (я тоже тратил своё время).

Какие проблемы часть кода в сишно-плюсовых проектах писать на D, если всё прекрасно линкуется-стыкуется?
Но они реально переборщили, далеко отошли от первоначальной неплохой задумки.
Искренне жаль.

Там Герб Саттер (один из главных в комитете по плюсам) пытается переосмыслить проблематику СИ-подобных языков и выкатить более выразительную и безопасную версию С++.
Пока что у него получается интересней, чем D, хотя тоже отошёл достаточно далеко от плюсов.

Но! В отличие от D, отход происходит лишь в тех местах, где нельзя не уйти для достижения тех или иных кач-в (т.е., можно принять за эдакий синтаксический сахарок), в отличие от D, где местами откровенная вкусовщина авторов.

https://github.com/hsutter/cppfront
https://hsutter.github.io/cppfront/welcome/hello-world/


N>Я писал недавно — в двух последних проектах, где активно был C++, он там был просто не нужен. Оптимумом был бы Go, и разработка шла бы в разы быстрее и проще.


У Go свои бока, увы. ))
Но тоже неплохой нишевый язык для несложных сервисов, которые можно вложить в механику языка.

Это более грамотный взгляд на проблематику Erlang, который в своём дизайне перебрал малость наивности-академичности. ))
(Выпороть бы авторов Erlang за загубленную неплохую идею... детсадище, блин...)


N>Но кто-то наверху считал, что если это формально embedded (с ARM/64 и 4-8GB рамы, ага), то ничего кроме сей не катит.

N>И таких в индустрии вагоны с тележками.

ХЗ.
Если механика Go реально нужна, т.е. если на С++ в любом случае придётся аналогичную механику описывать, то согласен.
А если не нужна, то нафига тащить лишний рантайм?
Если требуется писать более "традиционный" код, то на плюсах можно накидать его быстрее, бо быстрее найдёшь всё готовое сегодня.
Ну и, плюсовые сборки со статическими либами (стандартными и третьесторонними) берут в образ лишь то, что реально используется.

Глядишь, и вместо 4 гиг рамы хватит 256 метров. ))
В крупных партиях это даёт ощутимый профит, ес-но.
Отредактировано 12.09.2024 21:39 vdimas . Предыдущая версия . Еще …
Отредактировано 12.09.2024 21:38 vdimas . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.