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

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">Иркутский ГосударственныйТехнический

<span Times New Roman",«serif»">Университет

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">

<span Times New Roman",«serif»;letter-spacing:6.0pt">Реферат

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">Натему:

 языки программирования<span Times New Roman",«serif»">

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»">Выполнил:

<span Times New Roman",«serif»; mso-ansi-language:EN-US">                                                                                         <span Times New Roman",«serif»">студент группыРДТв-9<span Times New Roman",«serif»;mso-ansi-language:EN-US">4<span Times New Roman",«serif»">-1                                                     Осипов И.Ф.

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">

<span Times New Roman",«serif»">Руководитель:

<span Times New Roman",«serif»">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

<span Times New Roman",«serif»; mso-ansi-language:EN-US">

Иркутск — 1998г.

ВведениеПовышение производительностикомпьютеров и перемены в составе используемого ПО делают роль языков описаниясценариев в создании приложении будущего все более и более важной. Эти языкиотличаются от языков программирования системного уровня тем, что их основноеназначение – связывать различные компоненты и приложения друг с другом,выполняя роль своего рода клея. В них находят применение бестиповые подходы кописанию данных, что позволяет вывести программирование на более высокииуровень и ускорить процесс разработки по сравнению с языками системного уровня.Запрошедшие 15 лет в методологии написания программ для компьютеров произошларадикальная перемена. Она состоит в том, что разработчики перешли от языковпрограммирования системного уровня, таких как С и С++,к языкам описания сценариев,примерами которых могут служить Perl Tcl. Хотя в эту переменуоказалось вовлечено огромное количество людей, лишь немногие из них осознают,что в действительности происходит, и еще меньше найдется таких, кто бы смогобъяснить причины.  Эти языкисоздавались для различных целей, что обусловило ряд фундаментальных различиимежду ним. Системные разрабатывались для построения структур данных иалгоритмов “с нуля”, начиная от таких примитивных элементов, как словопамяти компьютера. В отличие от этого, языки описания сценариев создавалисьдля связывания готовых программ. Их применение подразумевает наличиедостаточного ассортимента мощных компонентов, которые требуется толькообъединить друг с другом. Языки системного уровня используют строгий контрольтипов, что помогает разработчикам приложении справляться со сложными задачами;языки же описания сценариев не используют понятиетипа, что упрощает установление связей между компонентами и ускоряетразработку прикладных систем. Языки этих двух типов является взаимодополняющими, ибольшинство компьютерных платформ еще с середины 60-х годов оснащаются как теми, так и другими. В компонентных инфраструктурах они применяются, как правило, совместно   компоненты создаются наязыках программирования системного уровня, а для их связи между собойиспользуются языки описания сценариев. Однако ряд современных тенденции,включая появление более быстрых машин и более совершенных языков описаниясценариев, повышение значимости графического интерфейса пользователя икомпонентных архитектур, а также рост популярности Internet,чрезвычайно расширили сферу применимости языков описания сценариев.Развитиеэтих тенденции продолжиться и в следующем десятилетии, вследствие чего всебольше приложении будет создаваться целиком и полностью на языках описаниясценариев, а роль языков программирования системного уровня сведется почтиисключительно к созданию компонентов.Языки программирования системного уровня   Чтобыосознать различие между языками описания сценариев и системными, полезновспомнить историю развития последних. Впервые они появились в качествеальтернативы языкам ассемблера, позволяющим использовать в программепрактически все особенности конкретной аппаратной подсистемы. Каждому утверждениютакого языка соответствует ровно одна машинная команда, и программиступриходиться иметь дело с такими низко уровневыми деталями, как распределениерегистров и последовательности вызова процедур. В результате написание исопровождение крупных программ на языке ассемблера оказывается чрезвычайносложным делом.Кконцу 50-х годов начали появляться языки программирования более высокогоуровня, такие как Lisp,Fortran, ALGOL. В них уже не былоточного соответствия между языковыми конструкциями и машинными командами.Преобразование строк исходного кода в последовательности двоичных командосуществлялось компилятором. Со временем их число пополнилось языками  PL /1, Pascal, C, C++, Java. Всеони менее эффективно используют аппаратуру по сравнению с языками ассемблера,но позволяет быстрее создавать приложения. В результате им удалось практическиполностью вытеснить языки ассемблера при создании крупных приложении.                 Языки программированияболее высокого уровняЯзыкипрограммирования системного уровня отличаются от ассемблеров, во-первых, тем,что они являются более высокоуровневыми, и, во-вторых, используют более строгийконтроль типов. Термин “высокоуровневый” означает следующее: многие детали обрабатываются автоматически, апрограммисту для создания своего приложения приходится писать меньшееколичество строк. В частности:<span Times New Roman",«serif»; font-weight:normal;font-style:normal">-<span Times New Roman"">        Распределениемрегистров занимается компилятор, так что программисту не надо писать код,обеспечивающий перемещение данных между регистрами и памятью;<span Times New Roman",«serif»; font-weight:normal;font-style:normal">-<span Times New Roman"">        Последовательностивызова процедур генерируются автоматически;программисту нет необходимости описывать помещениеаргументов функции в стек и их извлечение оттуда;<span Times New Roman",«serif»; font-weight:normal;font-style:normal">-<span Times New Roman"">        Для описанияструктур управления программист может использовать также ключевые слова, как if, while; последовательности машинных команд, соответствующие этим описаниямкомпилятор генерирует динамически.Типизация   Второеразличие между языками ассемблера и языками программирования системного уровнясостоит в типизации. Я использую этот термин для обозначения того, до какойстепени значение информации бывает определено еще прежде, чем приходит время ееиспользования в программе. В сильно типизированных языках требуется, чтобыпрограммист заранее декларировал способ использования каждого фрагментаинформации, и затем уже языковые средства препятствуют применению ее каким-либоиным способом. В слабо же типизированных языках на способ обработки информациине налагается предварительных ограничении;интерпретация каждого элемента данных определяетсятолько тем, как он фактически используется, без учета каких-либопредварительных объявлении.Современныекомпьютеры устроены таким образом, что им не известно понятие типа. Каждоеслово памяти может содержать значение любого типа;целое число, число с плавающей запятой, указательили машинную команду. Интерпретация значения определяется способом егоиспользования. Если указатель следующей машинной команды указывает в процессеисполнения машиннои команды на некоторое слово в памяти, то оно ирассматривается как команда;если адресслова задан в параметрах команды целочисленного сложения, то его значение иобрабатывается как целое число;и т. д. Однои то же слово памяти может использоваться в различных случаях разнымиспособами.Впротивоположность этому для современных языков программирования характернастрогая типизация. Каждая переменная в языке программирования системного уровнядолжна быть объявлена с указанием конкретного типа, такого как целое число илиуказатель на строку символов, и затем использоваться только соответствующимиэтому типу способами.Данныеи программный код разделены;созданиенового кода по ходу исполнения программы затруднено, если вообще возможно.Переменные могут объединяться в структуры или объекты с четко определеннойсубструктурои и методами манипулирования своими компонентами. Объект одноготипа не может быть использован в ситуации, где предписано применение объектдругого типа. Языки описания сценариевсоздавались для связывания готовых программ. Их применение подразумеваетналичие достаточного ассортимента мощных компонентов, которые требуется толькообъединить друг с другом. Типизация дает ряд преимуществ. Во-первых,крупные программы становятся благодаря ей более управляемыми. Четкость системытипов делает для программиста ясным, для чего предназначены те или иные данные;он легко может различать их между собой исоответственно использовать. Во-вторых, компиляторы используют информацию отипах для обнаружения некоторых видов ошибок, таких как попытка, использоватьчисло с плавающей запятой в качестве указателя. В-третьих, типизация повышаетпроизводительность приложении, позволяя компиляторам генерировать болееспециализированный код. Например, если компилятору известно, что некотораяпеременная всегда содержит целочисленные значения, он может генерировать дляманипулирования ею целочисленные инструкции;если же тип переменой компилятору неизвестен, топриходиться вставлять дополнительные инструкции для проверки типа во времяисполнения.Нарисунке 1 представлено распределение ряда языков программирования по мощности истепени строгости типизации.Языки описания сценариевЯзыкиописания сценариев, такие как Perl, Python, Rexx, Tcl, Visual Basicи языки оболочек UNIX,предпологают стиль программирования, весьма отличныиот характерного для языков системного уровня. Они предназначаются не длянаписания приложении с “нуля”, а длякомбинирования компонентов, набор которых создается заранее при помощи другихязыков. Например, Tcl,Visual Basicмогутиспользоваться для построения пользовательских интерфеисов из имеющихсяэлементов управления, а языки описания сценариев для оболочек UNIXприменяются для формирования “конвейеров”обработки потоков данных из набора стандартныхфильтров. Языки описания сценариев часто применяются и для дополнения готовыхкомпонентов новыми возможностями;однако этадеятельность редко охватывает создание сложных алгоритмов или структур данных,которые уже обычно бывают уже заложены в компоненты. Иногда языки описаниясценариев даже называют связующими или языками системной интеграции.Как правило, языки описания сценариев нетипизированыДля языков описания сценариевхарактерно отсутствие типизации, которая только усложнила бы задачу соединениякомпонентов. Все элементы в них выглядят и функционируют одинаково и являютсяполностью взаимозаменяемыми. Например, в Tcl или Visual Basic переменнаяможет содержать в однои точке программы строку, а в другой – целое число. Код иданные также часто бывают взаимозаменяемы. Например, Tcl, Visual Basicпеременная может содержать в одной точке программыстроку, а в другой — целое число. Код и данные также часто бываютвзаимозаменяемы, так что программа может генерировать другую программу -– исразу же запускать ее исполнение. Обычно языки описания сценариев используютпеременные строковых типов, которые обеспечивают единообразный механизмпредставления для различных сущностей.Отсутствиев языке деления переменных на типы упрощает соединение компонентов между собой.Нет априорных ограничении на то, каким образом может использоваться тот илииной элемент, а все компоненты значения представляются в едином формате. Такимобразом, компонент или значение могут быть использованы в любой ситуации;будучи спроектированы для одних способов применения,они могут оказаться задействованы совершенно иными, о которых их создательникогда не помышлял. Например, в UNIX – оболочках работа любойпрограммы – фильтра включает чтение данных из входного потока и запись их ввыходной поток. Любые две такие программы могут быть связаны путем назначениявыходного потока одной в качестве входного потока другой. Следующая команда оболочки представляет систему из трехфильтров, подсчитывающую в выделенном фрагменте текста строки, содержащие слово“scipting”:

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Select | grepscripting | wc

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">Программа

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">select<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> <span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">считывает текст,выделенный в данный момент на экране, и выводит его свои выходной поток<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">;<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»"> фильтр <span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">grep<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> <span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">считывает входнойпоток и пропускает на выход строки, содержащие слово <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">“scripting”;<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> <span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">а программа <span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">wc<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> <span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">подсчитывает числострок в своем потоке. Любой из подобных компонентов может найти применение вомножестве различных ситуации, решая каждый раз иную общую задачу. Сильнаятипизация языков программирования системного уровня затрудняет повторноеиспользование кода. Она поощряет программистов к созданию большого количестванесовместимых друг с другом интерфейсов, каждый из которых требует применениеобъектов своего типа. Компилятор не позволяет объектам других типоввзаимодействовать с этим интерфейсом, не смотря на то, что результат, мог быоказаться и весьма полезным. Таким образом, чтобы использовать новый объект ссуществующем интерфейсом, программисту приходится писать <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">“<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">переходник<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">”<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">, преобразующийобъект к типу, на который рассчитан интерфейс. А применение <span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">“<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">переходника<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">”<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»"> требует, в своюочередь, перекомпиляции части или даже всего приложения целиком. Доминирующий внастоящее время способ распространения ПО в виде двоичных файлов делает этотподход невозможным.

<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">Чтобыоценить преимущества бес типового языка программирования, рассмотрим следующийпример на языке

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">Tcl:

<span Arial",«sans-serif»;mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">Button  .b –text Hello!  -font {Times 16} – comand {puts hello}

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»"> .

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">

Эта команда создает на экране новую кнопку с надписью на ней Hello!шрифтом Times 16пунктов, при нажатии, на которую выводится короткоесообщение hello. Водной строке здесь уместилось шесть элементов различных типов: название команды (button),название кнопки (. b), идентификаторы атрибутов (-text, -font, -command),простые строки (Hello! hello), спецификация шрифта (Times 16), состоящая из названия начертания (Times)и размера в пунктах (16), а также целый Tcl-сценарии (putshello). Все элементыпредставляются единообразно – в виде строк. В данном примере атрибуты моглибыть перечислены в произвольном порядке, а неупомянутым атрибутам (ихнасчитывается более 20) будут присвоены значения по умолчанию.В случае реализации на Java  тот же самый пример потребовал бы семи строккода, составляющих два метода. Для С++с использованием библиотеки Microsoft Foundation Classes (MFC)масштабы увеличились примерно до 25 строк кода,образующих три процедуры. Один только выбор шрифта требует нескольких обращениик функциямMFCCfont *fontPtr=new Cront ();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 New Roman”);buttonPtr->SetFont(fontPtr);Можно было бы обоитись беззначительнои части этого кода, если бы не строгая типизация. Чтобы задать шрифтдля кнопки, необходимо обратиться к методу SetFont;однако он требует передачи в качестве аргументауказателя на объектCFont. Приходиться объявлять и инициализировать новыйобъект. Инициализацию объекта CFontвыполняетего метод CreateFont, которыи имеетжесткии интерфеис, требующии задания 14 различных аргументов. В TCLсущественные характеристики шрифта (начертание Timesи кегль 16 пунктов) могут быть указанынепосредственно без каких-либо объявлении или преобразовании. Более того, TCLпозволяет описать и поведение кнопки непосредственно в теле создающейее команды, тогда как в С++или Javaдля этого необходим отдельный метод.Языки описания сценариев на подъемеЯзыкиописания сценариев существуют уже длительное время, однако, в последние годы врезультате сочетания ряда факторов существенно повысилась их актуальность.Наиболее важный из этих факторов – направленность в сторону приложении,собираемых из готовых компонентов, В качестве трех иллюстрации его проявленияможно назвать графические интерфейсы пользователя, Internetи компонентные инфраструктуры разработки.Графические интерфейсы пользователяПервыеграфические интерфейсы пользователя появились в начале 1980 г. и приобрелиширокое распространение к концу десятилетия. Сегодня на описание этой частипрограммы во многих проектах уходит более половины всех усилии разработчиков. GUIпо своей природе является составной компонентнойсистемой. Цель его создания состоит не в реализации новых функциональныхвозможностей, а в том, чтобы наладить связи между графическими элементамиуправления и функциями внутренних частей приложения.Некоторыеиз систем снабжены очень удобными графическими средствами для построенияэкранов, которые скрывают сложности лежащего в основе языка, однако, как тольковозникает необходимость в написании дополнительного кода, например, чтобырасширить спектр вариантов поведения элементов интерфейса, у разработчика сразувозникают трудности. Все лучшие среды ускоренной разработки основаны на языкахописания сценариев: VisualBasic, HyperCard, TCL/TK.Internet  Развитие и рост популярности Internetтакже способствовалираспространению языков описания сценариев. Сама сеть является не чем иным, каксредством связи систем. Она не создает никаких новых данных и не занимается ихобработкой;все, что она делает-обеспечивает легкий доступ к огромному множеству существующих объектов.Идеальным языком программирования для решения большинства связанных с сетьюзадач мог бы стать тот, который лучше организует совместную работу всехсвязанных компонентов, т. е. язык описания сценария. Так, для написаниясеть-сценариев широко употребляется язык Perl, асреди разработчиков WEB-страниц популярен JavaScrint.

<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">

Компонентные инфраструктурыТретийпример применения языков описания сценариев — компонентные инфраструктуры,такие как ActiveX,JavaBeans. Хотя языки программированиясистемного уровня с успехом используются для создания компонентов, задачисборки из них приложении удобнее решаются при помощи сценариев. Без хорошегоязыка описания сценариев, предназначенного для манипулирования компонентамиинфраструктуры, теряется значительная часть ее достоинств. Этим можно объяснитьотчасти, почему компонентные инфраструктуры добились большей популярности вмире ПК, где существует такое удобное связующее средство, как Visual Basic, нежели на других платформах,таких как Unix/Cobra, компонентные инфраструктуры, для которых лишеныязыков описания сценариев.Технология сценариевЕщеодна причина роста популярности языков описания сценариев – развитие ихтехнологии. Такие современные представители этой категории, как TCL, Perlмало, чем напоминают своих далеких предшественниковвроде JCL. Так, JCLне предусматривал дажепростейших форм интерактивного взаимодействия, а ранние UNIX– оболочки не поддерживали процедур. Данная технология еще и сегодняостается относительно незрелой. Например, Visual Basicне является в полном смысле языком описаниясценариев. Первоначально он был разработан в качестве упрощенного языкасистемного уровня, а затем – модифицирован так, чтобы его было удобнееприменять к описанию сценариев. Таким образом, у будущих языков подобного родаесть большой простор для совершенствования.Крометого, технология сценариев много выиграла от повышения производительностикомпьютерного оборудования. Еще не так давно, чтобы добиться приемлемойскорости работы приложения любого уровня сложности, необходимо было обращатьсяк языкам системного уровня. В некоторых случаях даже их эффективностьоказывалась недостаточной и программу приходилось писать на ассемблере.Современные машины работают в 100 – 500 раз быстрее компьютеров 80 – х годов, иих производительность продолжает удваиваться примерно каждые 18 месяцев.Сегодня целый ряд приложении может быть реализован на языках описания сценариевпри тем не менее великолепной производительности. Например, TCL– сценарии позволяет манипулировать тысячами объектов при сохранениихорошего уровня интерактивности. По мере того как компьютеры будут становитьсябыстрее и быстрее, применение языков описания сценариев будет становитьсяпривлекательным для реализации все более и более масштабных приложении.

Другие языки<span Times New Roman",«serif»;mso-ansi-language:EN-US">

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