Введение

Write once, compile anywhere (WOCA) — это философия, используемая компилятором и сопутствующими библиотеками программного обеспечения, или программной библиотекой/фреймворком, обозначающая возможность написания компьютерной программы, которую можно скомпилировать на всех платформах без необходимости изменять её исходный код. В отличие от слогана Sun «Write once, run anywhere», кроссплатформенная совместимость реализуется только на уровне исходного кода, а не на уровне скомпилированного двоичного кода.

Введение

Существует множество языков, которые следуют философии WOCA, таких как C++, Pascal (см. Free Pascal), Ada, Cobol или C, при условии, что они не используют функции, выходящие за пределы стандартной библиотеки. Языки вроде Go идут еще дальше, избегая любых системно-зависимых элементов – они должны просто работать, а для системно-специфичных задач используется система платформенно-зависимых файлов. Компьютерная программа также может использовать кроссплатформенные библиотеки, предоставляющие слой абстракции, скрывающий различия между платформами для таких задач, как работа с сокетами и графическим интерфейсом, обеспечивая переносимость исходного кода. Это поддерживается, например, Qt (C++) или Lazarus (Pascal) IDE через его LCL и соответствующие наборы виджетов. Сегодня у нас есть мощные настольные компьютеры и компьютеры в телефонах, которые часто оснащены сложными приложениями, такими как текстовые редакторы, системы управления базами данных и электронные таблицы, позволяющие людям без опыта программирования сортировать, извлекать и обрабатывать свои данные, создавать документы (например, PDF-файлы) с организованной информацией или распечатывать их. До 2000 года некоторые из этих возможностей были недоступны, а до 1980 года – почти все. С начала компьютерной автоматизации в начале 1960-х, если требовался отчет по имеющимся данным или необходимо было распечатать счета, платежные ведомости, заказы на покупку и другие документы, генерируемые предприятиями, школами и государственными учреждениями, их набирали на физической пишущей машинке, возможно, с использованием предварительно напечатанных форм. В противном случае, если информация хранилась в компьютере и требовалось ее отсортировать, обработать или распечатать, необходимо было написать программу. Иногда пользователю требовалась информация, которую профессиональные программисты не могли понять, как реализовать в программе; доступные программисты не могли выполнить задачу за разумное время; или просто не было доступных программистов. Это заставляло непрофессионалов изучать основы программирования, хотя бы для того, чтобы уметь манипулировать данными и печатать необходимую информацию. Независимо от того, выполнял ли работу профессиональный программист или конечный пользователь, создающий программу для собственных нужд, способ достижения цели был одинаковым: написать программу, передать ее компилятору (программе, преобразующей написанный код в инструкции, понятные компьютеру), исправить ошибки и повторять процесс, пока программа не заработает. Это частично решало проблему, но создавало новую. Люди, писавшие программы или заказывавшие их написание (покупка программного обеспечения стала распространенной практикой только в 1970-х или 1980-х годах), обнаруживали, что при покупке нового компьютера их программы перестают работать.

Стандартизация

Начиная с конца 1960-х и начала 1970-х годов, предпринимались попытки разработать стандарты и спецификации, определяющие, как создавать машинонезависимые программы, используя компиляторы от различных поставщиков. Организации по стандартизации, такие как Международная организация по стандартизации (ISO) и ANSI, совместно с крупными потребителями компьютеров и программного обеспечения (например, государственными учреждениями, финансовыми организациями и производителями), а также производителями компьютеров, создавали стандартизированные спецификации, описывающие требования к реализации каждого конкретного языка программирования. Производители компьютеров могли добавлять собственные расширения к языку, но для подтверждения соответствия стандарту они должны были указывать все отличия в справочном руководстве. Это гарантировало, что программа, написанная в соответствии со стандартом и успешно компилируемая и выполняемая на их машине, будет работать без изменений и на компьютере другого производителя, использующего компилятор, соответствующий тому же стандарту. Крупные покупатели программного обеспечения, такие как военные, государственные и производственные компании, обеспечивали соблюдение этих стандартов, отказываясь приобретать вычислительное оборудование, если поставщик предлагал только компиляторы для используемых языков программирования, не соответствующие установленным требованиям.

Результаты

В настоящее время существует более десятка языков программирования, для которых разработаны стандарты, определяющие правила написания программ на этих языках, включая Ada, APL, BASIC, C++, COBOL, ECMAScript (общее название для JavaScript), Forth, FORTRAN, Pascal, PL/I, Ruby и SQL. Многие из них до сих пор используются, в том числе и потому, что заказчики могли переносить исходный код на компьютеры других производителей, где он перекомпилировался, зачастую без изменений, благодаря стандартизации языков программирования. Несмотря на то, что стандарты сыграли свою роль, принцип WOCA работает только в том случае, если разработчики компиляторов обеспечивают соответствие своим продуктам этим стандартам.