Изучение теории («матчасть»)

Разработка ОС и компилятора.

Съездил на Озон за книгой Вирта. Интересно, что я сейчас ровно тем и занимаюсь — разрабатываю ОС и компилятор. Литература в тему. Слева — старое издание, которую я купил в 2010 году (обновлённое издание 2013 года доступно в онлайн, англ.). Справа — вышедший в 2015 году русский перевод. Разумеется, на родном языке изучать «матчасть» (как выражаются «погоны») удобней.

Конечно же, сразу залез в главу про сборку мусора. Она подтвердила (стр. 253) тот очевидный факт, что счётчик ссылок на объекты это просто одна из реализаций сборки мусора. По Вирту есть всего два способа реализовать сборку мусора:

  1. Подсчёт ссылок (the reference counting).
  2. Просмотр пометок (the mark-scan schemes).

Когда здесь пытались противопоставить подсчёт ссылок сборке мусора — просто сознательно сбивали с толку (много выскажем в своё время профессиональным обманщикам «с гибкой психикой», и не только я). К науке такое противопоставление отношения не имеет. Проверил по новейшему изданию 2013 года, в этой основе основ изменений нет.

Соглашусь, что Оберон использует второй подход. Можете заглянуть в TFM и прочитать, почему. Всё объяснено. Также приводятся два научных аргумента в пользу сборки мусора:

  1. Программист обычно не знает, когда запросить освобождение.
  2. «Подсказка» программиста может не заслуживать доверия. Ошибочное освобождение, случившееся, когда ещё существуют ссылки на рассматриваемый объект, может привести к повторному выделению одного и того же пространства с пагубными последствиями.

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

Эти аргументы убедили профессора Вирта отказаться в Обероне от паскалевского Dispose() и оставить только New() — сократив синтаксис языка и увеличив его выразительную мощь. Это и есть научный подход, за который агитирует Вирт. Язык должен становиться проще, не давая программисту совершать уже изученные ошибки и позволяя решать более сложные задачи.

Отсутствие Dispose(), повторюсь, удовлетворяет требованию компактности входного языка ПМК, которое выдвинул ещё товарищ Трохименко.

Предвижу возражения «настоящих программистов», кто не доверит рантайму взять Dispose() на себя, считая собственный код безошибочным. У науки нет способов заставить людей её использовать. Хотите использовать вместо структурных операторов GOTO с метками или вообще хранить в уме адреса для безусловных переходов — вперёд, остановить вас на пути деградации некому. Чтобы внедрять научные знания, часто требуется смена поколений с естественным вымиранием тех, кто до последнего вздоха отстаивает устаревшие представления, как религиозные догмы.

Есть много интересных концепций, которые хотелось бы видеть в компактном Обероне. Не все получится реализовать, но вариант со сборкой мусора будем рассматривать.

Метки публикаций: