(строки, числа, true и false, …). Работа программы — посылка сообщений. Любое сообщение может быть послано любому объекту. • Всё доступно для изменения (без остановки, компиляции и перезапуска). • Динамическая типизация. • Сборка мусора. Байт-код.
значение, но и класс объекта! • Объект «класс» (синглтон) принадлежит классу «метакласс». В этом объекте хранятся все свойства класса (имена переменных, методы, ссылка на родительский класс…)
объявлен ли метод в классе (Obj class). Если нет, ищем объект в родительском (суперклассе) и т.д. по всей иерархии до самого Object. • Если ничего не найдено, посылаем специальное сообщение MessageNotUnderstood. • Вся система полностью динамическая. В любой момент можно изменить или добавить метод у любого класса!
• Вызов GC часто происходит в непредсказуемый момент и длится непредсказуемое время. • По оценке, требуется в 5 раз больше памяти, чтобы программа работала примерно с той же скоростью, что и при ручном управлении памятью.
• Шаг 1 (Mark). Отталкиваясь от «корней» (переменные в стеке, глобальные объекты), идём по ссылкам и помечаем объекты как используемые (true). • Шаг 2 (Sweep). Сканируем всю память, ищем непомеченные объекты и освобождаем их, а у помеченных сбрасываем флаг в false. • Недостатки: • На время исполнения вся система должна замереть. • Нужно прочесать всю память, что создаёт нагрузку на подсистему виртуальной памяти в ОС.
Чёрный список. Объекты, до которых можно добраться от «корней» и у которых нет ссылок на объекты из белого списка. • Серый список. Объекты, достижимые от «корней», но про которые неизвестно, содержат ли они ссылки на объекты из белого списка. • Алгоритм: • Выбрать объект из серого списка и переместить его в чёрный, пометив все белые объекты, на которые он ссылается, серым. Повторять, пока серый список не опустеет. • Удалить все объекты из белого списка.
сразу. • Легко реализуется. • Производительность системы слабо зависит от количества свободной памяти. • Недостатки: • Слишком частые обновления. • Проблема циклических ссылок. • Нельзя перемещать объекты.
• Более 90 % освобождаемых объектов возникает со времени прошлого цикла GC. • Если объект пережил GC, скорее всего, он вряд ли будет освобожден. • Разделяем объекты по поколениям.
том, что они тащат с собой весь этот невидимый багаж. Вам нужен банан, а вам дают обезьяну, держащую банан, и в довесок к ней джунгли целиком». Модульность, повторное использование кода?
Оно пытается осуществить декомпозицию мира на интерфейсы, которые варьируются по одному типу. Чтобы иметь дело с реальными задачами, нужны множественные алгебры — семейства интерфейсов, захватывающих несколько типов. Я нахожу ООП и философски необоснованным. Оно утверждает, что всё есть объект. Даже если это так, это не очень интересно: сказать, что всё есть объект — значит не сказать ничего». Всё есть объект? Полиморфизм по одному типу?
больших компаниях связана с тем, что оно соответствует их стилю разработки ПО. В них работают большие (и часто меняющиеся) группы программистов- посредственностей. ООП создаёт дисциплину, чтобы никто не мог наломать слишком много дров. Цена такова, что в программах слишком много протоколов (базовых классов) и дублирования. Но это не очень высокая цена для крупных компаний, поскольку их ПО и так перегружено, да и дублирования в нём всё равно предостаточно». Модульность, говорите?
угла Существительные. Зачем из кожи вон лезть, чтобы поставить одну из частей речи на пьедестал? Почему одна концепция должна превалировать над другой? ООП отнюдь не уменьшает важность глаголов в том способе, котором мы думаем. Оно даёт странный, ассиметричный взгляд на вещи». Всё есть объект?
упрощённые модели реального мира. ООП неспособно правильно моделировать время, что становится проблемой, поскольку программные системы приобретают всё больший параллелизм». Всё есть объект?
ценной в разработке графических систем, GUI и в моделировании. Но … значительные преимущества в других областях не проявились. Полезно понять почему. … ООП слишком часто называлось Единственно Верным Решением для управления сложностью. … ОО-языки делают абстракцию лёгкой, даже слишком. Они приветствуют архитектуры с толстым слоем «клея» и тщательно созданными слоями. Это хорошо, когда задача сложна… но даёт неприятный эффект, если разработчики делают простые вещи сложным способом, просто потому что могут. … Правила простоты, ясности и прозрачности нарушаются повсеместно… … Одна из главных сложностей в дизайне в стиле Unix — как соединить вместе преимущества отделённости (упрощение и обобщение задач…) с преимуществом тонкого уровня «клея» и неглубоких, плоских, прозрачных иерархий кода и дизайна».