Обсуждение

В архиве: 8 комментариев.

Читать и комментировать в ЖЖ ↗

Имя не сохранено · 20 июля 2010

Комментарий

Programming-in-the-large и истинная предмет-ориентированность тут достигается тем, что все системы поддержки master data обмениваются сообщениями. Почитайте свежее интервью Alan Kay http://www.computerworld.com.au/article/352182/z_programming_languages_smalltalk-80/ -- там он как раз говорит, что ООП он дал название крайне неудачно, потому как идея "объектов" была менее важной, чем идея масштабирования через обеспечение обмена сообщениями. Объекты были нужны только как активные, т.е. умеющие обмениваться сообщениями, ибо "просто данные" не могут обмениваться сообщениями. Один из разработчиков Erlang тоже высказал мысль, что единственный способ создания масштабируемых систем - это передача сообщений. Я тоже всегда так думал, года по крайней мере с 2002 :). Причем странно, что часто прогарммеры зачем-то пытаются юзать и приделывать везде RPC (Remote Procedure Call), хотя RPC очевидным образом распадается на пару сообщений. Т.е. сообщения более гибкая и мощная конструкция, что для многопоточных и распределенных приложений критично. Насчет programming-in-large меня посетила мысль, что тут требуется интенсивная трансформация кода, т.е. metaprogramming. Ибо есть куча всякого кода, с разными интерфейсами и протоколами, и нужно их заставить работать совместно. И тут без интенсивных кодо-трансформаций тяжело, ибо всякие брокеры/миддлваре тормозное и тупое.

Имя не сохранено · 20 июля 2010

Комментарий

>> единственный способ создания масштабируемых систем - это передача сообщений. Я не сильно ошибусь если вспомню что у некоторых авторов передача сообщения - это есть вызов процедуры (или функции)? Может проблема только в реализации. Или в понимании что такое сообщение у разных разработчиков :-).

Ответ на комментарий

Имя не сохранено · 20 июля 2010

Комментарий

Вообще говоря, передача сообщения и вызов функции/процедуры - разные вещи. Т.е. тот же Алан Кей типа и говорил что объекты общаются путем передачи сообщения. Но Алан Кей-то имел в виду активные объекты! Т.е. у которых свой поток управления. А на практике, в типичных реализациях, объекты пассивные, т.е. в контексте какого-то потока управления, передача сообщения подменяется вызовом функции/процедуры. Т.е. в типичной реализации вообще говоря, одно понятие подменили другим. Особенно, это заметно в многопоточных и распределенных приложениях, где вызов функциии/процедуры и передача сообщения идут между разными процессами. Вот тут разница становится весьма существенна. Фактически, вызов функции заменяется, по крайней мере, двумя передачами сообщения (собственно вызов и возврат результата(ов)). Но для масштабируемых систем, т.е. как раз распределенных/многопоточных, как раз критична передача сообщений. Ибо remote procedure call - это лишь попытка жить в другом мире (многопоточном, распределенном), с помощью привычных для однопоточного мира понятий, типа вызова функции. А при реализации этот вызов становится двумя передачами сообщений, плюс блокировкой до того момента, как будет получен результат. Это очень плохо сказывается на масштабируемости.

Ответ на комментарий

Имя не сохранено · 20 июля 2010

Комментарий

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

Ответ на комментарий

Имя не сохранено · 20 июля 2010

Комментарий

Как то я все запутал. В общем под сообщением как мне кажется это передача любого рода информации. Например - работай. или: меня интересует такие то данные - как посчитаешь - вот тебе код месаджа - буду ждать. А не конкретная форма взаимодействия между объектами.

Ответ на комментарий

Имя не сохранено · 20 июля 2010

Комментарий

Дык и вообще передача сообщения - это одно, а вызов процедуры - это другое. В каких-то случаях это может быть одно и то же, но вообще - разные вещи.

Ответ на комментарий

Имя не сохранено · 20 июля 2010

Комментарий

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

Ответ на комментарий

Анатолий Левенчук · 20 июля 2010

Комментарий

Так meta как раз и есть вторая главная мысль нового интервью Alan Kay :) Именно так: масштабируемость достигается обменом сообщениями, а гибкость в изменениях кода -- метой.

Ответ на комментарий