Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 32
Текст из файла (страница 32)
Следовательно. надежность является важной характеристикой при разработке программного обеспечения для бытовых электронных приборов. В 1990 году компания Бцп Мгсгозумевз пришла к выводу, что ни один из двух рассмотренных языков программирования (С и С+я) не подходит для разработки программного обеспечения бытовых электронных приборов. Несмотря на то что язык С был относительно небольшим, он не обеспечивал поддержки объектно-ориентированного программирования, которая тогда считалась необходимой.
Язык С~.+ поддерживал объектно-ориентированное программирование, но его размер и сложность были восприняты как слишком большое препятствие. Кроме того, тогда полагали, что ни язык С. ни язык С++ не обеспечивают требуемый уровень надежности. Язык >ата должен был обеспечить большую простоту и надежность, чем язык С++.
Несмотря на то что изначальным стремлением разработчиков языка >ака было создание языка для бытовой электроники, ни одни из товаров, вместе с которыми он использовался в начальные годы своею развития. не появился на рынке. Когда после 1993 года широкое распространение получила %ог1б Ф!бе %еЬ, чему в значительной степени способствовали графические броузеры, язык 3ача оказался полезным инструментом для программирования в ФеЬ. За первые несколько лет открытого использования основным применением языка 3ача стало именно программирование в ФеЬ.
Команду разработчиков языка Зача возглавил Джеймс Гослииг (1атез Ооз!!пя>. который ранее создал редактор ешасз лля операционной системы 13п!х, а также систему управления окнами >чеФБ. 2.1 7. Программирование в >й!ог!д >гт!г!е ЧЧеЬ: язык 3ача 2.17.2. Обзор языка Как мы упоминали ранее, язык Зата был основан на базе языка С++, но создавался, в частности, как язык, меньший по размерам, более простой и надежный. В языке абака имеются и классы, и типы. Элементарные типы — это не объекты, основанные на классах.
В их число входят все скалярные типы, в том числе типы лля целых чисел, чисел с плаваюшей точкой, булевских и символьных данных. Доступ к объектам обеспечивается с помощью ссылок, а доступ к величинам элементарных типов — как к скалярным величинам таких императивных языков„как языки С и Ада. Массивы в языке Ада являются экземплярами встроенного класса, а в языке С++ — нет, хотя многие пользователи языка С+а создают лля массивов интерфейсные классы, чтобы ввести такие свойства, как проверка диапазона изменения индексов массивов, которое задано в языке Зата неявно.
В языке Затя отсутствуют указатели, но ссылочные типы предоставляют некоторые их возможности. Эти ссылки используются для указания на экземпляры классов — фактически это единственный способ сделать ссылку на экземпляр класса. Хотя, на первый взгляд. указатели и ссылки очень похожи, сушествует важное семантическое различие. Указатели указывают на ячейку памяти, а ссылки — на объект. Это делает бессмысленной любую арифметику ссылок, отменяя эту подверженную ошибкам привычку.
На программисте часто лежит ответственность за разграничение значений указателя и величины, на которую он указывает, особенно это справедливо для языков, в которых указатели иногда приходится явно разыменовывать. Ссылки же всегда разыменовывают по мере необходимости. Таким образом, они ведут себя аналогично скалярным переменным. В языке 5ата имеется встроенный булевский тип, используемый преимушественно лля условных выражений в его управляюших операторах (например, дк и иззд1в). В отличие от языков С и С++ в условных выражениях не могут использоваться арифметические выражения. В языке 5ата отсутствуют записи, объединения и перечислимые типы. Олним из сушественных различий между языком Затя и большинством современных языков, полдерживаюших объектно-ориентированное программирование, в том числе языками Ада и С++, является невозможность написания на языке Зата независимых подпрограмм.
Все подпрограммы языка Затя являются метолами и определяются в классах. В языке Зата не сушествует конструкции, которая вызывала бы функцию или подпрограмму. Более того, методы могут вызываться только через классы или объекты. Другим важным различием между языками С++ и 3ата является поддержка языком С++ множественного наследования непосредственно в описании класса.
Некоторые считают, что множественное наследование слишком все усложняет и запутывает. Язык 3ача поддерживает только единичное наследование, хотя некоторые выгоды использования множественного наследования могут быть получены благодаря конструкции его интерфейса. Язык эата имеет относительно простую форму параллельности, управляемую с помовзью модификатора вупапкопдке, который может появляться в методах и блоках.
В любом случае это вызывает присоединение блокировки. Блокировка страхует от взаимонсключаюшего доступа или выполнения. В языке Зача относительно просто создавать параллельные процессы, которые в этом языке называются потоками. Эти потоки могут запускаться, приостанавливаться, возобновляться и останавливаться, причем все эти методы наследуются от родительского класса для всех потоков — класса ТЬкаай. В языке 5ата используется неявное удаление объектов из динамической памяти (все экземпляры классов языка 3ата, или объекты, размешаются в динамической памяти), 116 Глава 2. Обзор основных языков программирования часто называемое "сборкой мусора". Это освобожлает программиста от необходимосзи самому заботиться об освобождении памяти.
когда в ней отпадает необходимосзь. Программы, написанные на языках, требующих явного освобождения памяти. часто страдают от того, что некоторые называют 'утечкой памяти". означающей выделение памяти без послелуюшего ее освобождения. Это может привести к исчерпанию всей доступной памяти. В отличие от языков С и С++ в языке Зача имеется приведение типов (неявное преобразование типов) только в сторону расширения типа (от "меньшего" типа к "большему").
Таким образом, приведение типа зпк в тип Г1оак будет выполнено. а типа хзоак в тип дик — нет. 2.17.3. Оцвнка Разработчики языка Зача удачно удалили чрезмерные и1или ненадежные свойства языка С++. Например. удаление половины приведений типов. имевшихся в языке С-+. несомненно повысило его надежность. Проверка лиапазона изменения индексов при доступе к массивам также сделала язык надежнее. Введение параллельности. а также библиотек классов для создания аплетов. графических интерфейсов пользователя и работы в сети компьютеров расширило область приложений.
которые могли быть написаны на данном языке. С другой стороны, язык Зача все еше остается слишком сложным. Отсутствие в нем множественного наследования привело к возникновению несколько необычной структуры. Например, лля запуска аллета как задания. которое может выполняться параллельно с лругими, требуется собрать вместе атрибуты аплетов и потоков. а этот союз не обязательно окажется приятным.
Мобильность языка Зача, по крайней мере в его промежуточной форме. часто приписывается структуре языка. но это неверно. Любой язык может быть переведен в промежуточную форму и "запуститься" на платформе, иыеющей виртуальную машин) дзя этой промежуточной формы. Цена такого типа мобильности — стоимость интерпретации. которая, обычно, на порядок выше. чем стоимость выполнения в машинных кодах. Разумеется, многие приложения могут выполняться быстрее и, следовательно. требовать наличия компиляторов, которые бы транслировали исходную программу в машинные колы. Однако такие компиляторы лля языка Зака появляются медленно.
Поэтом). по крайней мере сейчас, более объемные приложения все еще пишутся на таких языках. как С++, Ос!рЬ! и Аба. Сейчас язык Зака широко используется для программирования ФеЬ-страниц. До его появления любое значительное вычисление, требуемое лля созлания ФеЬ-страниц. выполнялось с помощью интерфейса СО! и некоторых приложений, запушенных на ФеЬ-сервере. Аплеты языка Зача представляют собой небольшие программы, запускаемые на ФеЬ- клиенте при обнаружении послелним вызова аллета в НТМ) -проПэамме отображаемой страницы. При вызове аллета его промежуточная форма загружается клиентом с сервера и интерпретируется. Результат работы аллета отображается в виде ФеЬ-страницы.
Рост использования языка Зака происходит значительно быстрее. чем любого другого языка программирования. Одной из причин этого является его вклал в программирование тщательно разработанных ФеЬ-странищ Другой причиной является бесплатность и легкость получения через %еЬ-системы компилятора~интерпретатора для языка Зава.