Введение
Язык программирования
Prograph — это визуальный, объектно-ориентированный, язык программирования с потоковой обработкой данных и поддержкой нескольких парадигм, использующий пиктографические символы для представления операций над данными. Коммерческие среды разработки программного обеспечения Prograph, такие как Prograph Classic и Prograph CPX, в течение многих лет были доступны для платформ Apple Macintosh и Windows, но в конце 1990-х годов были сняты с продажи. Поддержка языка Prograph для macOS недавно возобновилась с выпуском среды разработки программного обеспечения Marten.
История
Исследования Prograph начались в Университете Акадии в 1982 году как общее исследование языков потока данных, стимулированное семинаром по функциональным языкам, проведенным Майклом Левином. Для прояснения обсуждения использовались диаграммы, что привело к пониманию: "поскольку диаграммы нагляднее кода, почему бы не сделать сами диаграммы исполняемыми!" Так Prograph – Программирование в Графике – родился как язык визуального потока данных. Эту работу возглавлял доктор Томаш Пьетшиковский, а Стен Матвин и Томас Мулднер были соавторами ранних статей. С 1983 по 1985 год были созданы исследовательские прототипы на графической рабочей станции Three Rivers PERQ (на языке Pascal, с данными, визуализированными в виде огненных шаров, движущихся по каналам данных), и на VAX с терминалом Tektronix, а экспериментальный компилятор был разработан на IBM PC. Эта работа была продолжена в Техническом университете Новой Шотландии Пьетшиковским и доктором Филипом Коксом, включая версию, реализованную на языке Prolog. В 1985 году началась работа над коммерчески реализуемым прототипом для Macintosh – единственного широко доступного и недорогого компьютера с поддержкой высокоуровневой графики на тот момент. В начале 1986 года этот прототип был передан компании The Gunakara Sun Systems (позже переименованной в TGS Systems) для коммерциализации; ранее TGS была консалтинговой фирмой, основанной Пьетшиковским в Университете Акадии. Работая с Пьетшиковским и Коксом, Терри Килшоу нанял и руководил оригинальной командой разработчиков, а Джим Ласки был ведущим разработчиком. В 1987 году Марк Шпаковски предложил объединить объектно-ориентированный подход с визуальным потоком данных, создав систему "потока объектов". После почти четырех лет разработки первый коммерческий релиз, v1.2, был представлен на конференции OOPSLA в Новом Орлеане в октябре 1989 года. Этот продукт получил награду MacUser Editor's Choice Award как лучший инструмент разработки в 1989 году. Версия 2.0, выпущенная в июле 1990 года, добавила в систему компилятор. В 1990 году TGS сменила название на Prograph International (PI). Несмотря на медленные продажи, в 1992 году началась разработка новой версии Prograph CPX (Cross Platform eXtensions), предназначенной для создания полностью кроссплатформенных приложений. Эта версия была выпущена в 1993 году, и сразу же после этого началась разработка клиент-серверной прикладной платформы. Несмотря на растущие продажи, компания не смогла покрыть операционные расходы и, после неудачной попытки привлечения финансирования в конце 1994 года, в начале 1995 года была объявлена банкротом. В ходе процедуры банкротства руководство и сотрудники PI создали новую компанию Pictorius, которая приобрела активы PI. Вскоре после этого началась разработка версии Prograph CPX для Windows. Хотя она так и не была официально выпущена, версии Windows Prograph регулярно предоставлялись клиентам Prograph CPX, некоторые из которых портировали существующие приложения, написанные на Macintosh Prograph, с разной степенью успеха. После смены руководства в новой компании акцент сместился с разработки инструментов на заказное программирование и разработку веб-приложений. В апреле 2002 года веб-разработка компании была приобретена компанией Paragon Technology Group с Бермудских островов и переименована в Paragon Canada. Имя Pictorius и права на исходный код Prograph остались за McLean Watson Capital, инвестиционной фирмой из Торонто, которая значительно финансировала Pictorius. Ссылка на Pictorius некоторое время отображалась на странице портфолио компании, но впоследствии исчезла. Версия CPX для Windows позже была выпущена для бесплатного использования и некоторое время была доступна для загрузки с остатков веб-сайта Pictorius (ссылка ниже). Группа пользователей Prograph ("Prographers"), называющая себя "Инициативой Open Prograph" (OPI), сформировалась в конце 1990-х годов с целью сохранения актуальности Prograph в условиях развития операционных систем Apple и Microsoft. В течение некоторого времени группа также стремилась создать новый визуальный язык программирования с открытым исходным кодом, который мог бы стать преемником Prograph, но с появлением визуальной среды программирования Marten от Andescotia участие в группе практически прекратилось. Язык Prograph поддерживается IDE Marten от Andescotia Software.
Описание
В 1970-х годах сложность программ значительно возросла, но инструменты, используемые для написания программ, в основном оставались такими же, как и в 1960-х годах. Это приводило к проблемам при работе над крупными проектами, которые становились настолько сложными, что даже незначительные изменения могли вызывать труднопредсказуемые побочные эффекты. Обширные исследования этой проблемы привели многих к выводу, что существующие системы программирования слишком сосредоточены на логике программы, в то время как основная цель программы – манипулирование данными. Если данные, с которыми работает программа, являются ключевым аспектом, почему данные не рассматриваются как "граждане первого класса" в языке программирования? Исходя из этого, появилось несколько новых систем программирования, включая объектно-ориентированное программирование и программирование потоками данных. Prograph развил эти концепции дальше, предложив комбинацию объектно-ориентированных методологий и полностью визуальную среду программирования. Объекты представляются шестиугольниками с двумя сторонами: одна содержит поля данных, а другая – методы, которые над ними оперируют. Двойной щелчок по любой стороне открывает окно с детальной информацией об объекте; например, при открытии стороны с переменными вверху отображаются переменные класса, а внизу – переменные экземпляра. Двойной щелчок по стороне с методами показывает методы, реализованные в данном классе, а также унаследованные от суперкласса. При двойном щелчке по самому методу открывается другое окно, отображающее его логику. В Prograph метод представлен серией иконок, каждая из которых содержит одну или несколько инструкций. Внутри каждого метода поток данных отображается линиями в виде ориентированного графа. Данные поступают в верхнюю часть схемы, проходят через различные инструкции и, при наличии выходных данных, возвращаются в нижнюю часть. Несколько особенностей системы Prograph наглядно демонстрирует пример операции сортировки базы данных. Верхняя панель показывает, что в этот метод, "конкурентная сортировка", передается один параметр – "объект базы данных". Затем этот объект через линии поступает на несколько операций. Три из них извлекают именованный индекс (indexA и т. д.) из объекта с помощью операции getter (неподключенный выход getter передает "целый" объект), а затем передают извлеченный индекс в операцию сортировки. Результаты этих операций сортировки вместе со ссылкой на исходную базу данных передаются в финальную операцию – "обновить базу данных". Нижняя панель изображения представляет выходы этого метода, и в данном случае к ним нет подключений, следовательно, метод не возвращает значение. Также стоит отметить, что, хотя это метод какого-то класса, здесь отсутствует ссылка на "self"; если она необходима, её можно передать в качестве входного параметра или найти. В языке потока данных операции могут выполняться, как только у них появятся все необходимые входные данные. Это означает, что в традиционном понимании каждая операция в этом методе может быть выполнена одновременно. В примере с базой данных все операции сортировки могут выполняться параллельно, если компьютер способен обеспечить необходимую скорость передачи данных. Языки потока данных по своей природе поддерживают параллельное выполнение, что позволяет им эффективно работать на многопроцессорных системах – одна из причин, вызвавших большой интерес к ним в 1980-х годах. Циклы и ветвления создаются путем модификации операций с помощью аннотаций. Например, цикл, вызывающий метод doit для списка входных данных, создается путем перетаскивания оператора doit, присоединения модификатора цикла и предоставления списка в качестве входных данных для цикла. Другая аннотация, "инъекция", позволяет передавать сам метод в качестве входных данных, что делает Prograph в определенной степени динамическим языком.
Исполнение
Интегрированная среда разработки и исполнения Prograph также поддерживала визуальную отладку. Поддерживались стандартные механизмы точек останова и пошагового выполнения. Каждая операция в диаграмме потока данных визуально выделялась по мере выполнения. При остановке в режиме отладки, при наведении курсора мыши на связь данных отображалась всплывающая подсказка со значениями данных. Визуальное отображение стека выполнения позволяло осуществлять как откат, так и перемотку выполнения. Для многих пользователей визуальные аспекты исполнения языка были столь же важны, как и графические возможности при редактировании. Наиболее важной функцией отладки во время выполнения была возможность изменять код "на лету" в процессе отладки. Это позволяло исправлять ошибки непосредственно во время отладки без необходимости перекомпиляции.