Size: a a a

Software Design/Architecture/Zen

2020 October 19

SP

Sergey Protko in Software Design/Architecture/Zen
то есть ооооочень упрощенно - то самое ООП которое у Кея больше походило на ФП нежели на процедурщину на классах
источник

SP

Sergey Protko in Software Design/Architecture/Zen
а процедурщина на классах - это идеи симулы
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
Dmitriy Tkachenko
Зирэкс же
ну пиши так, и пусть люди думают. все верно.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
дальше два лагеря - те кто верят что смолтак был первым, и те кто считают симулу первым. Я долгое время топил что смолтак* был первым ООП языком но потом понял что в целом все эти "ооп vs фп" и прочее это пустая трата времени. Сама аббривиатура сбивает с главной мысли - сообщения. Потому не важно на чем ты пишешь и какая у тебя там "парадигма" - идея Алана выше уровнем. Важны объекты и как они общаются а внутри объекта может быть как ФП так и процедурщина. Причем даже в рамках одной системы
источник

Egor Гуща in Software Design/Architecture/Zen
Sergey Protko
Вот цепочка:

- были челы которые хотели "удобно" моделирова процессы (например ядерный взрыв просчитывать). Для этого им показалось удобно запихнуть каждый отдельный процесс (субрутину) в отдельную сущность языковую. Так появился язык Симула (от слова симуляции). Объекты были и до этого, как и классы (классы Хоар ввел). Это больше походило не на инстансы классов как в плюсах или джаве а на замыкания в js.
- другие челы курили травку в кампусе с челами которые пилили ArpaNet и в целом распределенными вычислениями занимались. Один из этих челов так сложилось что был микробиолог и ему понравилась идея масштабирования систем как биологических клеток. Когда его в 68-ом спросили че он такое мутит он на тот момент не оч понимал и сам потому сказал "это ООП, отъебись".
- потом Джобс и Гейц повзаимоствовали наработки Ксерокс (которая платила за банкет Алана Кея). Все кроме смолтака им отдали (потому что даже ксерокс понимал коммерческий профит от смолтака). Джобсу это все так понравилось что он спиздил это и сделал objective-c. А другой перец фапал на симулу и сделал C with classes что бы хоть чуть чуть модули нормально в си делать. Потом это переименовали в плюсы.
- где-то между всем этим появился такой чел как Карл Хьюит который помог Алану разобраться что самое крутое в его языке это сообщения - мол до этого тоже были схожие идеи но Карл это дело сформулировал как модель вычислений (actor model).
- Потом была коммерческая версия smaltalk которая была популярна но которой преподавали как фортрану
- потом Sun поняли что продавать железо удобнее и выгоднее когда ты продаешь еще и платформу. Они попытались с ксероксом смолтак продвинуть но ксерокс настаивала на платной лицензии на компилятор. Это шло в разрез с планами и быстро накидали джаву на базе другого языка. Так джава начала доминировать на рынке.

В итоге имеем - бесполезную аббривиатуру ООП (потому что можно показать пальцем на Си и объекты компиляции и в целом с натяжкой сказать что там ООП). И появились более интересные идеи Алана на тему "большие объект как независимые процессы и обмен сообщениями". Тут ценность была именно в рантайме а не в самом языке (синтаксис языка был вдохновлен лиспом изначально, что бы быть максимально простым и проповедовал emergence. Условия там тоже были отправкой сообщений)). Есть еще истории о том что некоторые компании решили внедрять ООП под соусом "сначала процедурно попишите а потом научитесь" а когда научились то уже было столько всего написано что в целом бесполезно было что-то с этим делать. Ну и дальше количество программистов увеличивается в двое раз в 5 лет потому каждый момент времени у половины разработчиков не хватает опыта понять развитие идей. Обезьянка видит обезьянка повторяет. Потому и принципы и подходы переизобретаются раз в 10-15 лет.
Ну то есть это о чем говорит, а именно последняя мысль, что все стоит на месте?
Или же все такси зависит от конкретных кейсов, ведь все эти подходы принципы вырабатываются от практической задачи
То есть они как бы и одинаковые, но с этакими дополнениями
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Egor Гуща
Ну то есть это о чем говорит, а именно последняя мысль, что все стоит на месте?
Или же все такси зависит от конкретных кейсов, ведь все эти подходы принципы вырабатываются от практической задачи
То есть они как бы и одинаковые, но с этакими дополнениями
не, не стоит, переизобретается.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
"чуть-чуть по другому чем было в прошлый раз"
источник

Egor Гуща in Software Design/Architecture/Zen
Sergey Protko
"чуть-чуть по другому чем было в прошлый раз"
Это же так и работает сейчас
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
передача сообщения как вызов метода. имхо норм.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
например - когда придумали Erlang задача была развернуть среду которая крутится на 10-ти железках и может тебе миллионы процессов дать. Потому что добавить железку дорого было. Сегодня "контейнера" и прочие лямбды это что-то что можно задеплоить и за секунды скейлить как тебе хочется. Это значит что уже не столь важно что бы тебе прям рантайм языка предоставлял механихм общения - ты можешь то же самое реализовать на какой-то вообще другой технологии. Можешь сделать так что у тебя есть "платформа" в которой ранаются экторы на хаскеле и джаве и прекрасно друг с дружкой живут. Нет проблемы "подмены" эктора в рантайме (задеплоил контейнер).

То есть идеи которые активно юзаются - они да родом из конца 60-х начала 70-х и "принципиально" не изменились. Изменился контекст и нюансы.

Единственная "новая" идея (относительно) на фоне всего этого это следствие развития компиляторов и рантаймов (на фоне повышения вычислительных мощностей. Синтаксис многих языков был продиктован ограничениями железа и компиляторов). Развитие виртуальных машин (тоже заслуга Смолтока к слову), развитие алгоритмов вывода типов (Хаскели в целом оттуда родом насколько мне известно). Просто автоматизация того что раньше приходилось руками отслеживать.
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
Egor Гуща
Ну то есть это о чем говорит, а именно последняя мысль, что все стоит на месте?
Или же все такси зависит от конкретных кейсов, ведь все эти подходы принципы вырабатываются от практической задачи
То есть они как бы и одинаковые, но с этакими дополнениями
все изобрели еще лет 70 назад. то, что пытаются сейчас преподнести под видом нового - хорошо забытое старое.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Алексей Гевондян
передача сообщения как вызов метода. имхо норм.
любой вызов метода это передача сообщения + ожидание ответа. Вот только концепция сообщений куда шире. Можно отправить сообщение и не ждать ответа. Можно отправить сообщение и получать больше одного ответа. Можно отправить сообщение нескольким получателям... словом оч много вариантов. А так ты себя "ограничиваешь" вызовом процедуры)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Алексей Гевондян
все изобрели еще лет 70 назад. то, что пытаются сейчас преподнести под видом нового - хорошо забытое старое.
не, вот все эти хаскели и изыскания на тему систем типов это относительно новые идеи.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
относительно (80-ые а не 60-ые)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
а то что ФП и имутабельность - это то что позволяет многие алгоритмы вывода типов реализовать. Есть языки которые могут уже эффекты описывать. но я не шарю в этой всей теме
источник

Egor Гуща in Software Design/Architecture/Zen
Sergey Protko
например - когда придумали Erlang задача была развернуть среду которая крутится на 10-ти железках и может тебе миллионы процессов дать. Потому что добавить железку дорого было. Сегодня "контейнера" и прочие лямбды это что-то что можно задеплоить и за секунды скейлить как тебе хочется. Это значит что уже не столь важно что бы тебе прям рантайм языка предоставлял механихм общения - ты можешь то же самое реализовать на какой-то вообще другой технологии. Можешь сделать так что у тебя есть "платформа" в которой ранаются экторы на хаскеле и джаве и прекрасно друг с дружкой живут. Нет проблемы "подмены" эктора в рантайме (задеплоил контейнер).

То есть идеи которые активно юзаются - они да родом из конца 60-х начала 70-х и "принципиально" не изменились. Изменился контекст и нюансы.

Единственная "новая" идея (относительно) на фоне всего этого это следствие развития компиляторов и рантаймов (на фоне повышения вычислительных мощностей. Синтаксис многих языков был продиктован ограничениями железа и компиляторов). Развитие виртуальных машин (тоже заслуга Смолтока к слову), развитие алгоритмов вывода типов (Хаскели в целом оттуда родом насколько мне известно). Просто автоматизация того что раньше приходилось руками отслеживать.
А что хаскель тогда привносит, какая от него практическая польза, мб тут тему уже 100500 раз поднимали?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Egor Гуща
А что хаскель тогда привносит, какая от него практическая польза, мб тут тему уже 100500 раз поднимали?
я чуть выше написал - вывод типов
источник

JS

Jerzy Syrowiecki in Software Design/Architecture/Zen
Sergey Protko
любой вызов метода это передача сообщения + ожидание ответа. Вот только концепция сообщений куда шире. Можно отправить сообщение и не ждать ответа. Можно отправить сообщение и получать больше одного ответа. Можно отправить сообщение нескольким получателям... словом оч много вариантов. А так ты себя "ограничиваешь" вызовом процедуры)
звучит как "правильное ООП — Эрланг"
источник

Egor Гуща in Software Design/Architecture/Zen
Sergey Protko
я чуть выше написал - вывод типов
Но это же только для хаскеля
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Jerzy Syrowiecki
звучит как "правильное ООП — Эрланг"
ну... в целом так и есть)
источник