Наука — Школе |
См. также форум проекта.
Вопрос. В Оксфорде первым языком программирования берут функциональный язык 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.
Наука — Школе |