В наши дни персональный компьютер становится привычным инструментом не только на работе, но и дома.
Круг его применений разнообразен, но из всех самых необычных вариантов наиболее полезным для большинства людей оказывается его использование в качестве пишущей машинки, ведь компьютер позволяет видеть на экране текст, который можно редактировать еще до того, как он зафиксируется на бумаге.
Программы, обеспечивающие такую возможность, называются программами текстообработки.
До последнего времени компьютеры применялись преимущественно для обработки текстов на английском языке. Это и понятно, ведь большинство вычислительных машин разрабатывается в англоязычных странах, да и сам английский язык стал основным языком международных деловых отношений.
Однако особых технических причин ограничивать возможности компьютеров обработкой только английских текстов нет: системы текстообработки можно создать для:
- французского;
- немецкого;
- итальянского;
- русского;
- испанского;
и других европейских языков и даже для таких языков с более сложной письменностью, как:
- арабский;
- китайский;
- иврит;
- японский;
- корейский.
Вместе с коллегами по фирме Xerox Corporation мы занимаемся разработкой программ многоязычной текстообоработки для автоматизированного рабочего места Star, выпускаемого нашей фирмой на базе профессионально-персонального компьютера.
В основу своей работы мы положили идею о необходимости создания таких технических возможностей, при которых понятие «текст для автоматизированной обработки» было бы настолько универсальным, что смогло бы вмещать в себя любые сочетания любых живых языков мира.
При подобном подходе необходимо добиться сосуществования в компьютере всего огромного разнообразия письменных символов, которыми пользуется человечество.
На первый взгляд может показаться, что эта задача почти неразрешима.
Скажем, в арабской письменности текст пишется справа налево особой вязью. В тайской и некоторых других письменностях, зародившихся в древней Индии, порядок записи букв не всегда совпадает с последовательностью их фонетического воспроизведения.
Встречаются даже такие случаи, когда одна буква как бы охватывает другую. В корейском языке буквы группируются в слоговые объединения. (Следует сказать, что корейский алфавит был создан группой средневековых ученых в 1443 г. , как говорится, на пустом месте. )
Китайская письменность — древнейшая из живых письменных систем — использует несколько десятков тысяч иероглифов, каждый из которых представляет собой миниатюрную каллиграфическую композицию, как бы помещенную в отдельную рамку.
Можно подумать, что создателей вычислительной машины и программ текстообработки английский язык «завлек» тем, что его письменность оказалась самой простой в мире: это лишь буквы алфавита без каких-либо дополнительных значков, выписываемые одна за другой.
Как же из программ, первоначально созданных в расчете на обработку текстов только на английском языке, сделать такие программы, которые могли бы работать со всеми разнообразными системами письменности, известными в настоящее время?
Проблемы, которые стоят на пути к этой цели, можно разбить на три крупные группы: надо найти способ представления текста в памяти машины, надо найти способ занесения текста с клавиатуры, которой снабжен компьютер, и надо найти способ предъявления набранного текста машинистке (или, в более широком смысле, оператору).
Перечисленные группы задач я назову соответственно проблемой кодирования, проблемой набора и проблемой вывода.
Под последним будет иметься в виду как вывод текста на экран дисплея, который подключен к компьютеру, так и печатание текста на бумаге. Процесс кодирования целиком определяется одной принципиальной особенностью компьютера: он может хранить в своей памяти только числа, и притом не любые, а лишь двоичные, т. е. такие, которые записываются в виде цепочки из нулей и единиц.
Поэтому текст отображается в компьютере путем представления каждой буквы двоичным кодовым числом. Так, применительно к английскому языку Американским стандартным кодом для обмена информацией (сокращенное название — ASCII) букве «А» присвоен двоичный код 01000001, букве «В» — код 01000010, букве «С» — 01000011 и т. д.
Таким образом, при нажатии на клавиатуре компьютера клавиши «А» ему на самом деле дается команда запомнить код 01000001.
Если теперь от компьютера потребуется, чтобы он вывел на экран или напечатал букву, закодированную числом 01000001, то соответствующие команды заставят его вычертить символ, который мы воспримем как букву «А».
И, если не допущено расхождений между входными и выходными командами, у нас возникнет впечатление, будто в памяти машины хранится не числовой код, а сама буква «А».