Реферат: Языки программирования

1.Введение

 

Повышение производительностикомпьютеров и перемены в составе используемого ПО делают роль языков описаниясценариев в создании приложении будущего все более и более важной. Эти языкиотличаются от языков программирования системного уровня тем, что их основноеназначение – связывать различные компоненты и приложения друг с другом,выполняя роль своего рода клея. В них находят применение бестиповые подходы кописанию данных, что позволяет вывести программирование на более высокийуровень и ускорить процесс разработки по сравнению с языками системного уровня.

За прошедшие 15 лет вметодологии написания программ для компьютеров произошла радикальная перемена.Она состоит в том, что разработчики перешли от языков программированиясистемного уровня, таких как. С и. С++, к языкам описания сценариев, примерамикоторых могут служить Purl Tell. Хотя в эту переменуоказалось вовлечено огромное количество людей, лишь немногие из них осознают,что в действительности происходит, и еще меньше найдется таких, кто бы смогобъяснить причины.

 Эти языки создавались дляразличных целей, что обусловило ряд фундаментальных различий между ним.Системные разрабатывались для построения структур данных и алгоритмов “ снуля”, начиная от таких примитивных элементов, как слово памяти компьютера. Вотличие от этого, языки описания сценариев создавались для связывания готовыхпрограмм. Их применение подразумевает наличие достаточного ассортимента мощныхкомпонентов, которые требуется только объединить друг с другом. Языкисистемного уровня используют строгий контроль типов, что помогает разработчикамприложении справляться со сложными задачами; языки же описания сценариев неиспользуют понятие типа, что упрощает установление связей между компонентами иускоряет разработку прикладных систем.

Языки этих двух типовявляется взаимодополняющими, и большинство компьютерных платформ еще ссередины 60-х годов оснащаются как теми, так и другими. В компонентныхинфраструктурах они применяются, как правило, совместно   компонентысоздаются на языках программирования системного уровня, а для их связи междусобой используются языки описания сценариев. Однако ряд современных тенденции, включая появление более быстрых машин и более совершенных языков описаниясценариев, повышение значимости графического интерфейса пользователя икомпонентных архитектур, а также рост популярности Internet,чрезвычайно расширили сферу применимости языков описания сценариев.Развитиеэтих тенденции продолжиться и в следующем десятилетии, вследствие чего всебольше приложении будет создаваться целиком и полностью на языках описаниясценариев, а роль языков программирования системного уровня сведется почтиисключительно к созданию компонентов.

2. Языки программированиясистемного уровня.

  Чтобы осознать различиемежду языками описания сценариев и системными, полезно вспомнить историюразвития последних. Впервые они появились в качестве альтернативы языкамассемблера, позволяющим использовать в программе практически все особенностиконкретной аппаратной подсистемы. Каждому утверждению такого языкасоответствует ровно одна машинная команда, и программисту приходиться иметьдело с такими низко уровневыми деталями, как распределение регистров ипоследовательности вызова процедур. В результате написание и сопровождениекрупных программ на языке ассемблера оказывается чрезвычайно сложным делом.

К концу 50-х годов началипоявляться языки программирования более высокого уровня, такие как Lisp,Fortran, ALGOL. В них уже не было точного соответствия междуязыковыми конструкциями и машинными командами. Преобразование строк исходногокода в последовательности двоичных команд осуществлялось компилятором. Современем их число пополнилось языками  PL /1, Pascal,C, C++, Java. Все они менее эффективно используют аппаратуру посравнению с языками ассемблера, но позволяет быстрее создавать приложения. Врезультате им удалось практически полностью вытеснить языки ассемблера присоздании крупных приложений. 

Языки программированиявысокого уровня.

 

Языки программированиясистемного уровня отличаются от ассемблеров, во-первых, тем, что они являютсяболее высокоуровневыми, и, во-вторых, используют более строгий контроль типов.Термин “высокоуровневый” означает следующее: многие детали обрабатываютсяавтоматически, а программисту для создания своего приложения приходится писатьменьшее количество строк. В частности:

Распределением регистровзанимается компилятор, так что программисту не надо писать код, обеспечивающийперемещение данных между регистрами и памятью;

Последовательности вызовапроцедур генерируются автоматически; программисту нет необходимости описыватьпомещение аргументов функции в стек и их извлечение оттуда;

Для описания структуруправления программист может использовать также ключевые слова, как if, while;последовательности машинных команд, соответствующие этим описаниям компиляторгенерирует динамически.

4. Типизация.

Второе различие между языкамиассемблера и языками программирования системного уровня состоит в типизации. Яиспользую этот термин для обозначения того, до какой степени значениеинформации бывает определено еще прежде, чем приходит время ее использования впрограмме. В сильно типизированных языках требуется, чтобы программист заранеедекларировал способ использования каждого фрагмента информации, и затем ужеязыковые средства препятствуют применению ее каким-либо иным способом. В слабоже типизированных языках на способ обработки информации не налагаетсяпредварительных ограничении; интерпретация каждого элемента данных определяетсятолько тем, как он фактически используется, без учета каких-либопредварительных объявлении.

Современные компьютерыустроены таким образом, что им не известно понятие типа. Каждое слово памятиможет содержать значение любого типа; целое число, число с плавающей запятой,указатель или машинную команду. Интерпретация значения определяется способомего использования. Если указатель следующей машинной команды указывает впроцессе исполнения машинной команды на некоторое слово в памяти, то оно ирассматривается как команда; если адрес слова задан в параметрах командыцелочисленного сложения, то его значение и обрабатывается как целое число; и т.д. Одно и то же слово памяти может использоваться в различных случаях разнымиспособами.

В противоположность этому длясовременных языков программирования характерна строгая типизация. Каждаяпеременная в языке программирования системного уровня должна быть объявлена суказанием конкретного типа, такого как целое число или указатель на строкусимволов, и затем использоваться только соответствующими этому типу способами.

Данные и программный кодразделены; создание нового кода по ходу исполнения программы затруднено, есливообще возможно. Переменные могут объединяться в структуры или объекты с четкоопределенной субструктурой и методами манипулирования своими компонентами.Объект одного типа не может быть использован в ситуации, где предписаноприменение объект другого типа.

Языки описания сценариевсоздавались для связывания готовых программ. Их применение подразумеваетналичие достаточного ассортимента мощных компонентов, которые требуется толькообъединить друг с другом.

 Типизация дает рядпреимуществ. Во-первых, крупные программы становятся благодаря ей болееуправляемыми. Четкость системы типов делает для программиста ясным, для чегопредназначены те или иные данные; он легко может различать их между собой исоответственно использовать. Во-вторых, компиляторы используют информацию отипах для обнаружения некоторых видов ошибок, таких как попытка, использоватьчисло с плавающей запятой в качестве указателя. В-третьих, типизация повышаетпроизводительность приложения, позволяя компиляторам генерировать болееспециализированный код. Например, если компилятору известно, что некотораяпеременная всегда содержит целочисленные значения, он может генерировать дляманипулирования ею целочисленные инструкции; если же тип переменой компиляторунеизвестен, то приходиться вставлять дополнительные инструкции для проверкитипа во время исполнения.

На рисунке 1 представленораспределение ряда языков программирования по мощности и степени строгоститипизации.

5. Языки описаниясценариев.

Языки описания сценариев,такие как Perl, Python, Rexx, Tcl, Visual Basic и языки оболочек UNIX,предполагают стиль программирования, весьма отличный от характерного для языковсистемного уровня. Они предназначаются не для написания приложения с “нуля”, адля комбинирования компонентов, набор которых создается заранее при помощидругих языков. Например, Tcl, Visual Basic могут использоваться дляпостроения пользовательских интерфейсов из имеющихся элементов управления, аязыки описания сценариев для оболочек UNIX применяются для формирования“конвейеров” обработки потоков данных из набора стандартных фильтров. Языкиописания сценариев часто применяются и для дополнения готовых компонентовновыми возможностями; однако эта деятельность редко охватывает создание сложныхалгоритмов или структур данных, которые уже обычно бывают уже заложены вкомпоненты. Иногда языки описания сценариев даже называют связующими илиязыками системной интеграции.

Для языков описания сценариевхарактерно отсутствие типизации, которая только усложнила бы задачу соединениякомпонентов. Все элементы в них выглядят и функционируют одинаково и являютсяполностью взаимозаменяемыми. Например, в Tcl или Visual Basic  переменная может содержать в одной точке программыстроку, а в другой – целое число. Код и данные также часто бываютвзаимозаменяемы. Например, Tcl, Visual Basic переменная может содержатьв одной точке программы строку, а в другой — целое число. Код и данные такжечасто бывают взаимозаменяемы, так что программа может генерировать другуюпрограмму -– и сразу же запускать ее исполнение. Обычно языки описаниясценариев используют переменные строковых типов, которые обеспечиваютединообразный механизм представления для различных сущностей.

Отсутствие в языке деленияпеременных на типы упрощает соединение компонентов между собой. Нет априорныхограничений на то, каким образом может использоваться тот или иной элемент, авсе компоненты значения представляются в едином формате. Таким образом,компонент или значение могут быть использованы в любой ситуации; будучиспроектированы для одних способов применения, они могут оказаться задействованысовершенно иными, о которых их создатель никогда не помышлял. Например, в UNIX– оболочках работа любой программы – фильтра включает чтение данных из входногопотока и запись их в выходной поток. Любые две такие программы могут бытьсвязаны путем назначения выходного потока одной в качестве входного  потокадругой. Следующая команда оболочки представляет систему из трех фильтров,подсчитывающую в выделенном фрагменте текста строки, содержащие слово “scipting”:

Select | grepscripting | WC

Программа selectсчитывает текст, выделенный в данный момент на экране, и выводит его своивыходной поток; фильтр grep считывает входной поток и пропускает на выход строки,содержащие слово “scripting”; а программа wc подсчитываетчисло строк в своем потоке. Любой из подобных компонентов может найтиприменение во множестве различных ситуации, решая каждый раз иную общую задачу.Сильная типизация языков программирования системного уровня затрудняетповторное использование кода. Она поощряет программистов к созданию большогоколичества несовместимых друг с другом интерфейсов, каждый из которых требуетприменение объектов своего типа. Компилятор не позволяет объектам других типоввзаимодействовать с этим интерфейсом, не смотря на то, что результат, мог быоказаться и весьма полезным. Таким образом, чтобы использовать новый объект ссуществующем интерфейсом, программисту приходится писать “переходник”,преобразующий объект к типу, на который рассчитан интерфейс. А применение“переходника” требует, в свою очередь, перекомпиляции части или даже всегоприложения целиком. Доминирующий в настоящее время способ распространения ПО ввиде двоичных файлов делает этот подход невозможным.

Чтобы оценить преимуществабес типового языка программирования, рассмотрим следующий пример на языке Tcl:

Button  .b –textHello!  -font {Times 16} – command {puts hello} .

Эта команда создает на экраненовую кнопку с надписью на ней Hello! шрифтом Times 16 пунктов, при нажатии, накоторую выводится короткое сообщение hello. В одной строке здесьуместилось шесть элементов различных типов: название команды (button),название кнопки (. b), идентификаторы атрибутов (-text, -font,-command), простые строки (Hello! hello),спецификация шрифта (Times 16), состоящая из названия начертания (Times)и размера в пунктах (16), а также целый Tcl-сценарий (puts hello). Все элементы представляются единообразно – в видестрок. В данном примере атрибуты могли быть перечислены в произвольном порядке,а неупомянутым атрибутам (их насчитывается более 20) будут присвоены значенияпо умолчанию.

В случае реализации на Java тот же самый пример потребовал бы семи строк кода, составляющих два метода. ДляС++ с использованием библиотеки Microsoft Foundation Classes(MFC) масштабы увеличились примерно до 25 строк кода,образующих три процедуры. Один только выбор шрифта требует нескольких обращениик функциямMFC

Cfont *fontPtr=newCront ();

fontPtr->CreteFont (16, 0, 0, 0, 700,

0, 0, 0, ANSI_CHARSET,

OUT_DEFAULT_PRECIS,

CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY,

DEFAULT_PITCH|

FF_DONTCARE,

“Times NewRoman”);

buttonPtr->SetFont(fontPtr);

Можно было бы обойтись беззначительной части этого кода, если бы не строгая типизация. Чтобы задать шрифтдля кнопки, необходимо обратиться к методу Set Font;однако он требует передачи в качестве аргумента указателя на объект Cfont.Приходиться объявлять и инициализировать новый объект. Инициализацию объекта Cfontвыполняет его метод Create Font, который имеет жесткийинтерфейс, требующий задания 14 различных аргументов. В TCLсущественные характеристики шрифта (начертание Times и кегль 16пунктов) могут быть указаны непосредственно без каких-либо объявлений илипреобразовании. Более того, TCL позволяет описать и поведение кнопки непосредственнов теле создающей ее команды, тогда как в С++ или Java для этогонеобходим отдельный метод.

Языки описания сценариевна подъеме

 

Языки описания сценариевсуществуют уже длительное время, однако, в последние годы в результатесочетания ряда факторов существенно повысилась их актуальность. Наиболее важныйиз этих факторов – направленность в сторону приложении, собираемых из готовыхкомпонентов, В качестве трех иллюстрации его проявления можно назватьграфические интерфейсы пользователя, Internet и компонентныеинфраструктуры разработки.

7. Графические интерфейсыпользователя

 

Первые графические интерфейсыпользователя появились в начале 1980 г. и приобрели широкое распространение кконцу десятилетия. Сегодня на описание этой части программы во многих проектахуходит более половины всех усилии разработчиков. GUI по своейприроде является составной компонентной системой. Цель его создания состоит нев реализации новых функциональных возможностей, а в том, чтобы наладить связимежду графическими элементами управления и функциями внутренних частейприложения.

Некоторые из систем снабженыочень удобными графическими средствами для построения экранов, которые скрываютсложности лежащего в основе языка, однако, как только возникает необходимость внаписании дополнительного кода, например, чтобы расширить спектр вариантовповедения элементов интерфейса, у разработчика сразу возникают трудности. Вселучшие среды ускоренной разработки основаны на языках описания сценариев: Visual Basic, HyperCard, TCL/TK.

  Развитие и ростпопулярности Internet также способствовали распространению языков описаниясценариев. Сама сеть является не чем иным, как средством связи систем. Она несоздает никаких новых данных и не занимается их обработкой; все, что онаделает- обеспечивает легкий доступ к огромному множеству существующих объектов.Идеальным языком программирования для решения большинства связанных с сетьюзадач мог бы стать тот, который лучше организует совместную работу всехсвязанных компонентов, т. е. язык описания сценария. Так, для написания сетьсценариев широко употребляется язык Perl, а среди разработчиков WEB-страницпопулярен JavaScript.

8. Компонентныеинфраструктуры

 

Третий пример примененияязыков описания сценариев — компонентные инфраструктуры, такие как ActiveX,Java Beans. Хотя языки программирования системного уровня суспехом используются для создания компонентов, задачи сборки из них приложенийудобнее решаются при помощи сценариев. Без хорошего языка описания сценариев, предназначенногодля манипулирования компонентами инфраструктуры, теряется значительная часть еедостоинств. Этим можно объяснить отчасти, почему компонентные инфраструктурыдобились большей популярности в мире ПК, где существует такое удобное связующеесредство, как Visual Basic, нежели на другихплатформах, таких как Unix/Cobra, компонентные инфраструктуры, для которых лишеныязыков описания сценариев.

9. Технология сценариев

 

Еще одна причина ростапопулярности языков описания сценариев – развитие их технологии. Такиесовременные представители этой категории, как TCL, Perlмало, чем напоминают своих далеких предшественников вроде JCL.Так, JCL не предусматривал даже простейших форм интерактивноговзаимодействия, а ранние UNIX – оболочки не поддерживали процедур. Даннаятехнология еще и сегодня остается относительно незрелой. Например, Visual Basic не является в полном смысле языком описаниясценариев. Первоначально он был разработан в качестве упрощенного языкасистемного уровня, а затем – модифицирован так, чтобы его было удобнееприменять к описанию сценариев. Таким образом, у будущих языков подобного родаесть большой простор для совершенствования.

Кроме того, технологиясценариев много выиграла от повышения производительности компьютерногооборудования. Еще не так давно, чтобы добиться приемлемой скорости работыприложения любого уровня сложности, необходимо было обращаться к языкамсистемного уровня. В некоторых случаях даже их эффективность оказываласьнедостаточной и программу приходилось писать на ассемблере. Современные машиныработают в 100 – 500 раз быстрее компьютеров 80 – х годов, и ихпроизводительность продолжает удваиваться примерно каждые 18 месяцев. Сегодняцелый ряд приложений может быть реализован на языках описания сценариев при темне менее великолепной производительности. Например, TCL – сценариипозволяет манипулировать тысячами объектов при сохранении хорошего уровняинтерактивности. По мере того как компьютеры будут становиться быстрее ибыстрее, применение языков описания сценариев будет становиться привлекательнымдля реализации все более и более масштабных приложений.

10. Другие языки

 

Существует огромноеколичество атрибутов, помимо степени строгости контроля типов или уровня языка,и есть очень много интересных примеров, которые не могут быть однозначноотнесены к одной из двух рассмотренных нами категории. Например, семейство Lispзанимает некоторое промежуточное положение, обладая атрибутами языков описаниясценариев и языков программирования системного уровня. В Lispвпервые были реализованы такие концепции, как интерпретация и динамическийконтроль типов, которые широко используются  в современных языках описаниясценариев, А также автоматическое управление хранением и интегрированные средыразработки, применяемые в языках обеих категории.

11. Заключение

 

Языки описания сценариев основаны на несколькодругом наборе компромиссов, чем языки системного уровня. В них скоростьисполнения и строгость контроля типов ставятся в шкале приоритетов на болеенизкое место, но зато выше цениться производительность труда программиста иповторное использование. Это соотношение ценностей оказывается все болееоправданным по мере того, как компьютеры становятся быстродействующими и менеедорогими, чего нельзя сказать о программистах. Языки системного программирования хорошо подходят для создания компонентов, где основнаясложность заключена в реализации алгоритмов и структур данных, тогда как языкиописания сценариев лучше приспособлены  для построения приложении из готовыхкомпонентов, где сложность состоит в налаживании межкомпонентных связей. Задачипоследнего рода получают все большее распространение, так что роль парадигмысценариев будет возрастать и в будущем веке.

еще рефераты
Еще работы по информатике, программированию