λf·(λx·f (x x)) (λx·f (x x)) ([info]sdfgh153) wrote,
@ 2008-07-01 12:14:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Current music:Korpiklaani - Before The Morning Sun "Spirit Of The Forest"

Ехаем дальше
Объектная система io (На хабре)




(Post a new comment)


[info]faceted_jacinth
2008-07-01 07:47 am UTC (link)
объекты общались друг с другом не посредством вызова методов, а посредством передачи друг другу сообщений, мне до сих пор странно, почему же от это модели ушли
---

Посмотри ещё на Win32Api, это вполне каноническое воплощение оригинальных идей ООП. Совершенно каноническое! Но почему-то вызывает дрожь конечностей и судороги лицевых мышц у знакомых с ним, видимо потому, что им приходилось писать поверх него реальные программы, а не университетские пруф-оф-концепты.

Я думаю, фишка в том, что в Реальной Жизни™ 99% обмена мессагами используется для симуляции прямого вызова функции. Ну, потому что в реальной жизни обычно нужно вызывать функции! Понятно, что наивная реализация выглядит как-то так:

1) послать мессагу и сделать нечто, фактически являющееся выставлением в обработчик ответной мессаги continuation текущего метода.
2) Уйти в мессадж-луп.
3) принять ответ, если всё хорошо, вызывать continuation, если же случился NotSupported, кинуть эксепшен или, о ужас, запусить _другой_ континуейшен.

С опциональным
-1) Послать мессагу "HasMethod" и засунуть пункты с 0 по 3 в континуейшен.
0) принять ответ, если метод есть, вызвать континуейшен уже не отвлекаясь на обработку NotSupported, иначе обработать ошибку прямо здесь.
...
4) сойти с ума от осознания того, что вообще-то метод могли уже и убрать пока мы тут ждали ответа.
5) дополнительно сойти с ума в попытках добиться того, чтобы нужные ответы ставились в соответствие нужным запросам, причём желательно в нужном порядке, или чтобы это было неважно. Ну, если мы захотели вызвать функцию два раза параллельно, в самом деле.
6) сойти с ума окончательно в процессе переписывания программы под Continuation Passing Style.



Я на третьем курсе переизобрёл ООП в таком вот оригинальном виде, будучи совершенно не знакомым ни с ним, ни с функциональным программированием. С ума вроде не сошёл, но понял, что бесплатных ланчей не бывает. То есть и современная реализация, с прямыми вызовами, тоже нифига не панацея, и метод можно убрать, и после возвращения из любого вызова можно обнаружить, что вызываемый метод случайно изменил состояние нашего, вызывающего класса. Я, собственно, ту фигню именно из этих соображений делал, ну, чтобы в явном виде эти возможности показать и заставить себя о них думать. Ну, вот получается прям по Лавкрафту, относительно некоторых вещей действительно лучше пребывать в неведении. По крайней мере, если сейчас такая фигня случается, когда между вызовом функции и возвращением результата что-то непредсказуемо меняется в состоянии вызывающего объекта или мира, сразу понятно, что это баг, а не фича. Раз язык не заточен специально под разруливание такой фигни.


Конечно, некоторые люди утверждают, что смысл не в том, чтобы переписывать уже существующие программы/алгоритмы под новую концепцию сходя с ума в процессе от всех этих ужасов, а в том, чтобы писать сразу в новой концепции такие алгоритмы, которые в ней оказываются естественными. Звучит очень мило, но совершенно нет уверенности, что существуют такие алгоритмы, решающие наши скромные задачи. Потому что наши скромные задачи вертятся вокруг человеков, которые сами по себе имеют фон-неймановскую архитектуру. По крайней мере та часть, которая развилась за время существования письменной и устной цивилизации, с последовательной передачей и обработкой информации, _разумная_ часть человека определённо фон-неймановская.

(Reply to this) (Thread)


[info]sdfgh153
2008-07-01 08:01 am UTC (link)
Ну вообще ты прав, конечно, there is no silver bullet. Сойти с ума от программирования вообще очень просто. Я оцениваю io не с точки зрения задач исходящих от человеков, а исходя из задач исходящих от гребаных робатов. Пока не изобрели ни одной приличной технологии распараллеливать процесс кроме нод обменивающихся сообщениями (По-моему очень по-человечески). Любая ныне существующая технология программирования — хтонический пиздец по Лавкрафту и все, что ты описал присуще и языкам с вызовом методов.
Ну вот как-то так.

(Reply to this) (Parent)


[info]mr_aleph
2008-07-01 08:14 am UTC (link)
юпик поджигает =)

(Reply to this) (Parent)


[info]brainslugs.blogspot.com
2008-07-01 08:32 am UTC (link)
Win32Api вызывает дрожь неудобной реализацией и хреновой документацией. Ведь что в Qt, что в wxWindows, что в GTK используется очень похожая концепция, ключевая фишка это late binding, как его ни называй -- евентами, сигналами или сообщениями.

(Reply to this) (Parent)


[info]lebenliebhaber
2008-07-01 11:54 am UTC (link)
Посмотри ещё на Win32Api, это вполне каноническое воплощение оригинальных идей ООП. Совершенно каноническое! Но почему-то вызывает дрожь конечностей и судороги лицевых мышц у знакомых с ним, видимо потому, что им приходилось писать поверх него реальные программы, а не университетские пруф-оф-концепты.

Имхо, любая монолитная куча plain C кода такого размера - это пиздец.

(Reply to this) (Parent)(Thread)


[info]elder_george
2008-07-01 03:11 pm UTC (link)
Особенно если эта куча plain-C кода эмулирует смоллтолк %)

(Reply to this) (Parent)(Thread)


[info]lebenliebhaber
2008-07-01 03:46 pm UTC (link)
Особенно если эта куча кода эмулирует смоллтолк не по человечески, как в Objective C, а кишечнополостными путями :-)

(Reply to this) (Parent)(Thread)


[info]elder_george
2008-07-02 05:41 am UTC (link)
Ну, строго говоря, WinAPI - это именно API, следовательно language agnostic (есть острое подозрение, что эппловский Core Foundation по "дружественности" не сильно отличается, не говоря уже про Macintosh Toolbox).
ХЗ, насколько лучше было бы для МС, если бы они разрешили писать приложения на одном каком-то языке.
А так - и борланды всякие подкормиться смогли, и еще кое-кто.
В МС, ИМХО, сделали одну главную ошибку - предложили основной высокоуровневый фреймворк (MFC) на базе плюсов, которые ну очень слабо ложатся на оконную парадигму (отсюда аццкий abuse сишного препроцессора). Половина девелоперов испужалась и по сию пору пишет на C, а потом ругается на страшный WinAPI (использовать что-то более подходящее мешает культура копипаста самплов, ес-сно).

(Reply to this) (Parent)


[info]mr_aleph
2008-07-01 08:12 am UTC (link)
всё равно Lua не брошу, потому что он хороший =)

(Reply to this) (Thread)


[info]sdfgh153
2008-07-01 08:13 am UTC (link)
Хехе. «io inspired by lua» тоже (;

(Reply to this) (Parent)(Thread)


[info]mr_aleph
2008-07-01 08:14 am UTC (link)
я знаю =)

(Reply to this) (Parent)


[info]mr_aleph
2008-07-01 08:14 am UTC (link)
спасибо за статьи.

(Reply to this) (Parent)(Thread)

btw, при разборе фразы
[info]mr_aleph
2008-07-01 08:19 am UTC (link)
C++ нельзя назвать объектно-ориентированным языком, потому что он язык поддерживающий парадигму ООП, не это не его основная парадигма.


у меня случился access violation

(Reply to this) (Parent)(Thread)

Re: btw, при разборе фразы
[info]sdfgh153
2008-07-01 08:24 am UTC (link)
Да ладно? Где я прокосячил? (:

(Reply to this) (Parent)(Thread)

Re: btw, при разборе фразы
[info]mr_aleph
2008-07-01 08:41 am UTC (link)
ну хотя бы "не это не его основная парадигма"

до меня только сейчас дошло, что там но.

Я сначала читал как Йоду "не это его основная парадигма"

(Reply to this) (Parent)(Thread)

Re: btw, при разборе фразы
[info]sdfgh153
2008-07-01 08:45 am UTC (link)
Хехе, внатуре косяк.

(Reply to this) (Parent)(Thread)

Re: btw, при разборе фразы
[info]elder_george
2008-07-01 03:13 pm UTC (link)
Вот что бывает, когда на свободу рвутся маты, а политкорректность заставляет придумывать приличные формулировки %)

(Reply to this) (Parent)(Thread)

Re: btw, при разборе фразы
[info]lebenliebhaber
2008-07-01 03:57 pm UTC (link)
Хы, счас понял, в чем ключевой недостаток плюсов: заложенный в идеологическую основу принцип "на этом языке можно написать все, что угодно"

(Reply to this) (Parent)(Thread)

Re: btw, при разборе фразы
[info]elder_george
2008-07-02 05:45 am UTC (link)
кстати, да.
типа, Stroustrup tarpit =)

(Reply to this) (Parent)(Thread)

во избежание разночтений
[info]lebenliebhaber
2008-07-02 05:52 am UTC (link)
смысл вкладывался такой: правильное совмещение ООП и высокой производительности - это, например, основная часть кода на питоне + боттлонеки на сях

к сожалению, WinAPI разработан в те стародавние времена, когда вышеописанное было непозволительной роскошью...

(Reply to this) (Parent)(Thread)

Re: во избежание разночтений
[info]sdfgh153
2008-07-02 05:56 am UTC (link)
Я внезапно проперся от Objective-C, кстати.
Реквестирую макинтош, бля.

(Reply to this) (Parent)


[info]brainslugs.blogspot.com
2008-07-01 08:37 am UTC (link)
Кстати, насколько я понял, Стив хочет io перевести на luajit.

(Reply to this) (Parent)(Thread)


[info]mr_aleph
2008-07-01 08:53 am UTC (link)
мама... переносимость ведь потеряется (хотя я незнаю как там сейчас с переносимостью), только x86

с другой стороны не вижу особых бенефитов. интерпретатор постоянно скачет как блоха по switch'у (ну косвенным переходам по таблице, коли он провязан), так что трассирующий jit тут наверное performance только ухудшит. неоптимизирующий вазелин же (коим во многом является Lua JIT 1.x), ни когда не даст хорошей производительности по сравнению с C.

хотя если он будет делать RTS на Lua и код компилировать тоже в lbc, а Mike в свою очередь выкатит наконец LuaJIT 2.0, то возможно случится некоторое счастье...

(Reply to this) (Parent)


[info]beshenov
2008-07-01 08:13 am UTC (link)
"Ненормальное программирование" --- странное название блога, конечно.

(Reply to this) (Thread)


[info]sdfgh153
2008-07-01 08:24 am UTC (link)
Хабра вообще очень стрёмное странное место.

(Reply to this) (Parent)


[info]elder_george
2008-07-01 03:15 pm UTC (link)
Кстати, я правильно угадал, что сампл по метапрограммированию будет содержать добавление "Ленину" помимо свойств гриба еще и свойств волны?

(Reply to this) (Thread)


[info]sdfgh153
2008-07-01 05:14 pm UTC (link)
А это мысль!

(Reply to this) (Parent)


Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…