Главная страница проекта ИНФОРМАТИКА-21

Наука Школе

Вопросы и ответы

См. также форум проекта.

Вопрос. В Оксфорде первым языком программирования берут функциональный язык Haskell, а Оберон ставят лишь вторым. Почему?  

Ответ. На "почему?" ответить трудно, т.к. здесь велики субъективные факторы: вспомним о "религиозных войнах" в отношении языков программирования; приверженцы ФЯ там "бойцы" не из последних, а университет вроде Оксфорда не может позволить себе быть как все :)) Но во всяком случае можно выяснить, в каком отношении стоят Оберон/Компонентный Паскаль к ФЯ. Вот суть:  
Когда мы пишем a := b + c*d, то не озабачиваемся тем, где будет храниться промежуточный результат умножения c*d. Чистые ФЯ распространяют этот принцип на всю программу, т.е. оставляют (скрытое) присваивание лишь в одном месте — при назначении фактических параметров. Все остальные прелести ФЯ — либо вторичны к этому (например, возможность параллельного вычисления разных фактических аргументов, гарантированно "развязанных" по памяти), либо, строго говоря, не специфичны для ФЯ (как автоматическое распознавание типов, которое, кстати говоря, иногда приводит к тяжелейшим ошибкам; здесь как раз полезна избыточность, вводимая явным описанием типов переменных, — не говоря про большое упрощение компилятора со всеми вытекающими долгосрочными последствиями).
Можно пояснить и так. Строгая статическая типизация Оберонов — это запрет программисту решать, какие данные можно записать в ячейку памяти по такому-то адресу. Запрет следующего уровня, вводимый чистыми ФЯ, — это запрет программисту вообще выбирать ячейку, в которую будет записан результат. (Впрочем, некорректные присваивания в императивных языках имеют аналог и в ФЯ: если у функции, например, два целых параметра, то программист запросто может их перепутать.) Запрет "ручного" управления динамической памятью в Обероне, например, есть запрет ровно той же категории. В эту же сторону работают и настоящая модульность с упрятыванием глобальных переменных. Поэтому можно говорить о синтетической, императивно-функциональной природе Оберона, хотя и с подчеркиванием императивного аспекта (что согласуется с реальными механизмами работы реального "железа").
Но и практически применяемые ФЯ — вынуждены быть синтетическими, с переменными и присваиваниями: состояние окошка на экране, в котором меняется текст при нажатии клавиш — это не что иное как переменная, в которой меняется хранимое значение после каждого нажатия, и избежать этого понятия в такой ситуации невозможно. А введение переменных тянет за собой весь хвост соответствующих проблем. За что же боролись?
Локализуйте присваивания в фабричных функциях в Обероне, собранных в отдельные модули, запретите их во всех других местах, и вот вам ФЯ с полностью динамическими списками без принципиальных изъятий. Контролировать наличие в тексте модуля комбинации литер := не труднее, чем контролировать наличие комбинации литер SYSTEM в списке импорта.
Что касается автоматического распараллеливания, то это такого же уровня проблема, как автоматический синтез или верификация программ: обсуждать автоматическое распараллеливание умножений в a*b+c*d — неинтересно, а в реальных случаях все равно нужно сначала хорошо распараллелить алгоритм головой. Но тогда вся остальная организация распараллеливания в том же Обероне — отнюдь не квантовая гравитация.
Остаются, конечно, различия в "духе синтаксиса" между паскалеобразными языками и ФЯ. Но такие вещи вряд ли возможно оценивать объективно.
Вывод такой, что при обучении профессиональных программистов, несомненно, полезно в качестве обязательного второго взять какой-нибудь ФЯ (тот же Haskell; и еще марковский язык в качестве третьего — заметим попутно, что подавлюящее большинство профессиональных программистов затруднятся ответить, что такое "марковские языки").
Но первое место однозначно должен занять Оберон/Компонентный Паскаль, особенно если мы хотим сохранить связь и единое образовательное пространство как со средней школой, так и с обучением программистов-"непрофессионалов".

Вопрос. Можно ли из Блэкбокса обращаться к средствам операционной системы?

Ответ. Разумеется. Блэкбокс изначально задумывался как полноценное средство профессиональной работы. Система содержит как полный набор интерфейсных модулей для WinApi, так и для MS Office Automation (из Блэкбокса открыть файлы Win/Docu/Sys-Map.odc и Ctl/Docu/Sys-Map.odc).

Вопрос. Можно ли считать Оберон лучшим и единственным преемником Pascal в сфере образования?

Ответ. Лучше говорить про Компонентный Паскаль. Это по сути тот же Паскаль, только не устаревший на 30 лет, а безупречно современный. От того же автора, который свой родной Паскаль знает от и до, все минусы и плюсы; минусы почистил, плюсов добавил. Учтем, что К.Паскаль спрямляет дорожку к Java и C#. Перейти с ТурбоПаскаля на К.Паскаль — элементарно. Есть и модуль с ТурбоПаскале-образной графикой, и средства для использования на олимпиадах. С учетом всего этого и наших реалий (популярность старого Паскаля) — как еще можно считать?

Вопрос. Кто использует Обероны в преподавании?

Ответ. См. (неполный) список на вологодском сайте. Добавьте сюда участников данного проекта. Предлагаемые пакеты русификации были сгружены с нашего сайта в сотнях копий — и еще сотни были розданы учителям во время поездки Н.Вирта по России осенью 2005 г. Плюс нужно учесть, что журнал МирПК, имеющий тираж в несколько десятков тысяч экземпляров, ставил этот комплект в свое CD-приложение в течение нескольких месяцев того же 2005 года.

Вопрос. Какие проекты сделаны на Компонентном Паскале?

Ответ. См. список О компании Oberon microsystems. Если уж Борланд (а много ли специалистов по компиляторам более высокого класса) отдал заказ на JIT-compiler для своей Java VM авторам Компонентного Паскаля, на коем заказ и был выполнен, то какие могут быть еще вопросы :-)
Более свежую информацию можно найти на сайте совещания Oberon Day @ CERN (10 марта 2004 г.), приуроченного к 70-летию Н.Вирта и 20-летию присуждения ему премии им. Тьюринга за разработку Паскаля. Сайт совещания.

Вопрос. Можно ли генерировать exe-файлы из Блэкбокса?

Ответ. Да, можно — как EXE, так и DLL-файлы. См. модуль DevLinker и документацию к нему. При этом можно по желанию включать модуль Kernel, отвечающий за автоматическое управление памятью (сбор мусора).
Обратите внимание: иконки, которые фигурируют в примерах в документации к
DevLinker, соответствуют иконкам, например, в левом верхнем углу открытого документа. Если все иконки при создании EXE-шника заменить на свои, то можно получить программу, в которой нигде не будет видно ее происхождение (если не лезть в коды). Разумеется, нужно соответствующим образом поменять меню и т.д. См. пример.
Но чаще всего вопрос о генерации
EXE — не более чем инерция мышления: для общих курсов программирования это совершенно не нужно, да и для коммерческих целей в подавляющем большинстве случаев достаточно подготовить и распространять специально настроенный комплект Блэкбокса (например, с переименованным BlackBox.exe).

Вопрос. Можно ли вызывать из Блэкбокса программы из других языков?

Ответ. Да, можно — достаточно скомпилировать, например, программы на фортране или C++ в DLL. Как подключать внешние DLL в Блэкбоксе описано в разделе Using DLLs in BlackBox modules в документе Platform-Specific Issues (см. Справку/Help Блэкбокса).
Комплект документации на этот счет подготовлен с участием С.Чумакова (физфак, МГУ) и доступен в "университетском" пакете,
см. файл Epse21/Docu/DLL.odc.

Главная страница проекта ИНФОРМАТИКА-21

Наука Школе