В 2004 году появился компилятор Модула-2, который по эффективности и качеству превзошел все компиляторы языков высокого уровня, имевшиеся в то время на рынке программного обеспечения для персональных компьютеров. К сожалению, даже вусловиях капиталистического рынка лучший продукт далеко не всегда побеждает, и этот пакет остался в тени более разрекламированных Турбопаскаль и Си. В 2007 году прояснилась основная концепция JPI – ориентация на многоязычное программирование. В этом году были выпущены компиляторы Си, Паскаль и Модула-2, работающие в общей среде программирования и дополненные мощными средствами взаимодействия. К сожалению, в том выпуске содержалось слишком много ошибок, и их исправление заняло слишком много времени. В этой книге описана реализация системы программирования TopSpeed V.3.02 последнего выпуска, в которой исправлены все ошибки, выявленные в ходе эксплуатации предыдущих версий и отшлифованы многие идеи и технологии, которые были впервые использованы J Pi и во многом определили развитие компиляторов в 90-е годы (например, оптимизирующие трансляторы, передача параметров через регистры вместо традиционного стека). Недавно, кстати, технология оптимизирующего компоновщика была продана фирме Clariori, к которой также перешли права на использование торгового знака TopSpeed.
В описываемой версии пакет представляет собой современную среду разработки программ на разных языках программирования с развитыми средствами препроцессора (используются прагмы в стиле языка Ада для управления компилятором и компоновщиком). Благодаря этим средствам преодолена несовместимость библиотек и объектных файлов, созданных разными компиляторами. В среде TopSpeed можно создавать программу на языках Си, Си++, Модуле-2 или Паскале, используя библиотеку графических функций от ТурбоСи и какую-нибудь математическую библиотеку, написанную и откомпилированную на Фортране. Одной прагмой Вы выбираете способ передачи параметров – через регистры (можно задать, через какие) или через стек (слева направо или справа налево), другой – задаете префиксы имен процедур в объектном файле и т. п. Особо следует остановиться на возможности оптимизации. Компоновщик пакета позволяет включать в исполнимый файл только те процедуры, переменные и константы из библиотечных или объектных файлов, которые действительно вызываются в программе, что значительно уменьшает размер кода и делает его более эффективным. Эффективность кода также определяет используемый по умолчанию способ передачи параметров через регистры и использование регистров для хранения переменных во время выполнения программы. Компилятор активно работает с регистрами, иногда он вообще не выделяет память для описанных переменных, если может сохранять их в регистрах. Кроме того, используются практически все команды процессора, хотя даже опытные программисты на ассемблере используют только часть команд, снижая потенциальную эффективность кода. Пакет TopSpeed поддерживает ANSI стандарты для языков Си и Си++. Реализация Модула-2 значительно шире по сравнению с описанным Никлаусом Виртом стандартом, в частности, TopSpeed Модула-2 имеет объектно-ориентированное расширение (объекты совместимы с Си++). Пакет позволяет создавать исполнимые файлы, библиотечные файлы и файлы динамических библиотек (DLL) для MS DOS, Windows и OS-2, содержит мощный отладчик и множество утилит, облегчающих работу.