1. Введение
1.1. Глоссарий
Обобщённое программирование (ОП) — это парадигма программирования, заклю-чающаяся в написании алгоритмов, которые можно применять к различным типам данных. В том или ином виде поддерживается разными языками программирования. Возможности обобщённого программирования впервые появились в 70-х годах в языках CLU и Ada, а затем во многих объектно-ориентированных языках, таких как C++, Java, D и языках для платформы .NET.[7]
Компилятор — транслятор, который осуществляет перевод всей исходной програм-мы в эквивалентную ей результирующую программу на языке машинных команд или на языке ассемблера. Другой разновидностью трансляторов являются интерпретаторы, осу-ществляющие анализ и перевод текста программы в машинный код пошагово, непосредст-венно перед выполнением, и сразу же исполняющие получившийся машинный код.[1]
Шаблон (параметризованный тип) – тип данных, имеющий в качестве параметров другие типы данных.[1]
Специализация шаблона – тип данных, полученный из шаблона путём подстановки в качестве параметров конкретных типов[1].
Токен – терминальный символ грамматики исходного языка[1].
1.2. Описание предметной области
Обобщённое программирование
С развитием программирования стало появляться много типонезависимых алгорит-мов, начиная с различных способов хранения, сортировки и поиска, доступа к данным, до таких сложных, как различные рефакторинги. Вследствие этого появилась парадигма про-граммирования под названием «обобщённое программирование». В общих словах его суть такова, что можно определить отдельные типы данных, инкапсулирующие в себе опера-ции, затем создавать экземпляры типов для проведения операций с конкретными типами данных. Такие типы называют шаблонами(templates, generics), или параметризованными типами. Для соответствия тенденциям развития программирования современные ЯП и их компиляторы должны в той или иной мере содержать аппараты ОП. Сейчас это делается через механизм шаблонов или слабую типизацию. Слабая типизация в данной работе рас-сматриваться не будет , так как ЯП Паскаль не является слабо типизированным языком.
Поддержка ОП современными языками
Из рассматриваемых языков поддержку механизма шаблонов обеспечивают C++, Java, C# 2.0 (и др. .NET 2.0 совместимые языки). Их трансляторы представляют пример трёх радикально различающихся моделей реализации ОП. Модель, реализованная в C++, фактически представляет собой макрос глобального уровня(см. [6]). На шаблоны наклады-ваются наименьшие ограничения из всех рассматриваемых языков. Их специализации имеют наибольшую производительность. Транслятором Java реализована модель обёртки над типом- параметром. Это было сделано, чтобы не изменять код JVM. Ограничения здесь больше, но производительность значительно меньше из-за операций упаковки-распаковки(boxing) В .NET 2.0 языках код шаблона компилируется в IL как код любого другого типа, а механизмы создания специализаций поддерживаются самой платфор-мой(см. [3,4]). Трансляторы ЯП Паскаль не поддерживают механизма шаблонов. В новой версии Borland Delphi .NET будет поддержка .NET generics.
Компилятор FreePascal
Данный компилятор является свободно распространяемым компилятором ЯП Пас-каль с открытым исходным кодом. Он разрабатывается на Open Source началах. На данном этапе развития поддерживает несколько операционных систем и архитектур процессоров и совместим с Delphi. Инструмент шаблонов станет отличным дополнением, необходимым как для развития языка, так и для развития компилятора.
1.3. Неформальная постановка задачи
Таким образом, необходимо на основе существующих решений разработать и реали-зовать модель поддержки ОП, обеспечивающую производительность компилируемых язы-ков, и соответствующую стилю ЯП Паскаль
1.4 Обзор существующих методов решения
На момент написания работы не существует компиляторов ЯП Паскаль, реализую-щих поддержку ОП. Поэтому можно привести более подробное сравнение
|