Написание один раз, компиляция везде: Философия кроссплатменной разработки.
Write once, compile anywhere
Напиши один раз, скомпилируй везде (WOCA): философия разработки кроссплатформенного ПО. C++, Pascal, Go и другие языки – портативность кода без изменений!
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Write once, compile anywhere (WOCA) — это философия, используемая компилятором и сопутствующими библиотеками программного обеспечения, или программной библиотекой/фреймворком, обозначающая возможность написания компьютерной программы, которую можно скомпилировать на всех платформах без необходимости изменять её исходный код. В отличие от слогана Sun «Write once, run anywhere», кроссплатформенная совместимость реализуется только на уровне исходного кода, а не на уровне скомпилированного двоичного кода.
Write once, compile anywhere (WOCA) is a philosophy taken by a compiler and its associated software libraries or by a software library/software framework which refers to a capability of writing a computer program that can be compiled on all platforms without the need to modify its source code. As opposed to Sun's write once, run anywhere slogan, cross platform compatibility is implemented only at the source code level, rather than also at the compiled binary code level.
Введение
Существует множество языков, которые следуют философии WOCA, таких как C++, Pascal (см. Free Pascal), Ada, Cobol или C, при условии, что они не используют функции, выходящие за пределы стандартной библиотеки. Языки вроде Go идут еще дальше, избегая любых системно-зависимых элементов – они должны просто работать, а для системно-специфичных задач используется система платформенно-зависимых файлов. Компьютерная программа также может использовать кроссплатформенные библиотеки, предоставляющие слой абстракции, скрывающий различия между платформами для таких задач, как работа с сокетами и графическим интерфейсом, обеспечивая переносимость исходного кода. Это поддерживается, например, Qt (C++) или Lazarus (Pascal) IDE через его LCL и соответствующие наборы виджетов. Сегодня у нас есть мощные настольные компьютеры и компьютеры в телефонах, которые часто оснащены сложными приложениями, такими как текстовые редакторы, системы управления базами данных и электронные таблицы, позволяющие людям без опыта программирования сортировать, извлекать и обрабатывать свои данные, создавать документы (например, PDF-файлы) с организованной информацией или распечатывать их. До 2000 года некоторые из этих возможностей были недоступны, а до 1980 года – почти все. С начала компьютерной автоматизации в начале 1960-х, если требовался отчет по имеющимся данным или необходимо было распечатать счета, платежные ведомости, заказы на покупку и другие документы, генерируемые предприятиями, школами и государственными учреждениями, их набирали на физической пишущей машинке, возможно, с использованием предварительно напечатанных форм. В противном случае, если информация хранилась в компьютере и требовалось ее отсортировать, обработать или распечатать, необходимо было написать программу. Иногда пользователю требовалась информация, которую профессиональные программисты не могли понять, как реализовать в программе; доступные программисты не могли выполнить задачу за разумное время; или просто не было доступных программистов. Это заставляло непрофессионалов изучать основы программирования, хотя бы для того, чтобы уметь манипулировать данными и печатать необходимую информацию. Независимо от того, выполнял ли работу профессиональный программист или конечный пользователь, создающий программу для собственных нужд, способ достижения цели был одинаковым: написать программу, передать ее компилятору (программе, преобразующей написанный код в инструкции, понятные компьютеру), исправить ошибки и повторять процесс, пока программа не заработает. Это частично решало проблему, но создавало новую. Люди, писавшие программы или заказывавшие их написание (покупка программного обеспечения стала распространенной практикой только в 1970-х или 1980-х годах), обнаруживали, что при покупке нового компьютера их программы перестают работать.
There are many languages that follow the WOCA philosophy, such as C++, Pascal (see Free Pascal), Ada, Cobol, or C, on condition that they don't use functions beyond those provided by the standard library. Languages like Go go even further in as far that no system specific things are used, it should just work, and for system specific elements a system of platform specific files is used. A computer program may also use cross platform libraries, which provide an abstraction layer hiding the differences between various platforms, for things like sockets and GUI, ensuring the portability of the written source code. This is, for example, supported by Qt (C++) or the Lazarus (Pascal) IDE via its LCL and corresponding widgetsets. Today, we have very powerful desktop computers as well as computers in our phones, which often have sophisticated applications such as word processing, Database management, and spreadsheets, that can allow people with no programming experience to, sort, extract, and manipulate their data. and create documents (such as PDF files) showing their now organized information, or printing it out. Before 2000, some of these were not available, and prior to 1980, almost none of them were. From the start of computer automation in the early 1960s, if you wanted a report from data you had, or needed to print up invoices, payroll checks, purchase orders, and other paperwork businesses, schools and governments generated, you typed them up on a physical typewriter, possibly using pre printed forms. Otherwise, if you did have information stored in a computer, and wanted it sorted, manipulated, or printed, it required someone to write a program to do so. In some cases, the person needed information that professional programmers either could not understand how to provide a program to do what they wanted; the available programmers could not produce something in a reasonable amount of time; or there weren't any programmers they could use, caused some non programming professionals to learn some programming skills, at least to know how to manipulate and print out information they needed from their data. Whether the work was done by a professional programmer, or an end user writing a program to provide them information for their own use, the means to do this in either case is the same. Write a program, submit it to a compiler (another program that converts written programs into instructions the computer can understand), fix any errors, then repeat until the program worked. While this helped fix part of the problem, it created a new one. People who wrote programs, or hired someone to write them (purchasing software was not a thing until the 1970s or 1980s), discovered when their employer or school bought a new computer, their programs no longer worked.
Стандартизация
Начиная с конца 1960-х и начала 1970-х годов, предпринимались попытки разработать стандарты и спецификации, определяющие, как создавать машинонезависимые программы, используя компиляторы от различных поставщиков. Организации по стандартизации, такие как Международная организация по стандартизации (ISO) и ANSI, совместно с крупными потребителями компьютеров и программного обеспечения (например, государственными учреждениями, финансовыми организациями и производителями), а также производителями компьютеров, создавали стандартизированные спецификации, описывающие требования к реализации каждого конкретного языка программирования. Производители компьютеров могли добавлять собственные расширения к языку, но для подтверждения соответствия стандарту они должны были указывать все отличия в справочном руководстве. Это гарантировало, что программа, написанная в соответствии со стандартом и успешно компилируемая и выполняемая на их машине, будет работать без изменений и на компьютере другого производителя, использующего компилятор, соответствующий тому же стандарту. Крупные покупатели программного обеспечения, такие как военные, государственные и производственные компании, обеспечивали соблюдение этих стандартов, отказываясь приобретать вычислительное оборудование, если поставщик предлагал только компиляторы для используемых языков программирования, не соответствующие установленным требованиям.
Starting in the late 1960s and early 1970s, efforts came into play to create standards and specifications of how machine independent programs could be written using compilers from any vendor. Standards making organizations, like the International Standards Organization (ISO), and ANSI, among others, in cooperation with large users of computers and software (like governments, financial institutions and manufacturers), and computer manufacturers, to create standardized specifications to provide a description of how each specific language should be implemented. Computer manufacturers could still have their own proprietary extensions to a programming language, but if they wanted to be able to claim compliance with the standard, they had to specify the differences in the reference manual, so that a program written according to the standard able to compile and operate on their machine would also operate, without further change, on a different manufacturer's computer whose compiler also followed the standard. The requirements of the standard were enforced by large software buyers, such as military, government, and manufacturing companies, by refusing to buy such computing equipment if the vendor only offered a compiler for the programming languages they used which wasn't compliant with the standard,
Результаты
В настоящее время существует более десятка языков программирования, для которых разработаны стандарты, определяющие правила написания программ на этих языках, включая Ada, APL, BASIC, C++, COBOL, ECMAScript (общее название для JavaScript), Forth, FORTRAN, Pascal, PL/I, Ruby и SQL. Многие из них до сих пор используются, в том числе и потому, что заказчики могли переносить исходный код на компьютеры других производителей, где он перекомпилировался, зачастую без изменений, благодаря стандартизации языков программирования. Несмотря на то, что стандарты сыграли свою роль, принцип WOCA работает только в том случае, если разработчики компиляторов обеспечивают соответствие своим продуктам этим стандартам.
Currently, there are more than a dozen programming languages that have standards describing how programs in the language are supposed to be written, including Ada, APL, BASIC, C++, COBOL, ECMAScript (the generic name for JavaScript), Forth, FORTRAN, Pascal, PL/I, Ruby and SQL. Many of these are still in use, in some cases, because customers were able to take their source code to a different manufacturer's computer, where it was recompiled, often without change, because of the standardization of programming languages. While the standards helped, the WOCA philosophy works only when the makers of compilers ensure that they follow the standard.