Учебное пособие по информатике 2014. Основы информатики
Скачать 4.61 Mb.
|
Языковые процессоры Языковые процессоры подразделяются на трансляторы и интерпретаторы. Транслятор - программа, которая конвертирует программу, написанную на одном языке, в программу на другом языке так, чтобы обе давали идентичные результаты вычислений. В этом случае первичная программа, ее код и язык называют исходной программой, исходным текстом и исходным языком, соответственно. Результаты транслированной версии называют программой-адресатом (объектом, целью), целевым (объектным) кодом и целевым (объектным) языком. Трансляторы далее классифицируются на ассемблеры, компиляторы и препроцессоры. Интерпретатор преобразовывает каждую инструкцию программы непосредственно в машинный код и немедленно выполняет ее перед переходом к следующей инструкции. Ассемблеры Ассемблер транслирует программу, написанную на компоновочном языке (язык ассемблера/assembly language), в машинный код. Каждая команда в программе, написанной на ассемблере, имеет почти взаимно однозначное соответствие командам в машинном коде. Другими словами, 47 код операции и операнд, из которых состоит каждая инструкция ассемблера, обозначаются читаемым именем (т. е. мнемоническим кодом операции) и десятичным числом, вместо двоичного представления соответствующей машинной команды. LOAD 8 - пример такой команды на ассемблере, соответствующий машинной команде 010100001000. Таким образом, по сравнению с другими языковыми процессорами, ассемблеры имеют относительно простые структуры. Каждая инструкция на языке высокого уровня имеет намного более сложную связь с машинным кодом, поэтому в ассемблере программы пишутся тогда, когда желательно использовать компьютерные аппаратные средства более эффективно. Ассемблеры, однако, не столь же читаемы, как языки высокого уровня, и, следовательно, сохраняется возможность создания ошибок при увеличении объема программирования. Компиляторы Компилятор - транслятор со сложной структурой, который преобразовывает программу, написанную на языке высокого уровня, в машинный код или, в некоторых случаях, в программу на ассемблере. Препроцессоры Препроцессор - языковый процессор, который выполняет предварительную трансляцию исходных кодов типа замены алфавитно- цифровых выражений двоичной формой и вставкой определенных файлов, создавая модификацию исходного текста, который должен быть далее обработан транслятором. Препроцессор также удобно использовать, когда новый язык высокого уровня создается путем добавления элементов к существующему языку высокого уровня. Например, программа на C++ может транслироваться в ее эквивалент на С препроцессором. Интерпретаторы Интерпретатор выполняет каждую инструкцию программы, поскольку она преобразована в машинный код без создания программы-цели, в то время как ассемблеры и компиляторы производят программы-цели без выполнения их. Интерпретаторы удобны для быстрого нахождения ошибок в программах, но не подходят для больших программ из-за низкого времени интерпретации. Существует много языков программирования для различных целей. Здесь рассмотрены некоторые из наиболее важных. Языки Assembler Хотя компьютеры от одного изготовителя имеют тенденцию использовать один и тот же машинный язык, для машин различных изготовителей это не так. Соответственно, различные компьютеры имеют различные компонующие программы и языки ассемблирования. В дополнение к преобразованию мнемонического операционного кода 48 и десятичного операнда каждой команды в машинный код, большинство языков ассемблирования имеют возможности для рационализации программирования, такие, как объединение последовательности отдельных команд в единую псевдокоманду. Из этой псевдокоманды затем генерируется инструмент в машинном коде. Программирование на ассемблерах требует твердого знания архитектуры вычислительной системы и более трудоемко, чем программирование на языках высокого уровня. Пример программного кода: .386 .model flat extrn ExitProcess:PROC extrn MessageBoxA:PROC .data Ttl db "First ASSEMBLER program",0h Msg db 'Hello, World!!!!',0h .code start: push 0h push offset Msg push offset Ttl push 0h call MessageBoxA push 0h call ExitProcess end start ФОРТРАН ФОРТРАН (ForTran, транслятор формул) был создан как язык для решения задач числового анализа Джоном В. Бекусом и рядом других специалистов из IBM и был анонсирован в 1957 г. С тех пор он был несколько раз модернизирован. Даже если другие языки, например С, становятся популярными для научных и технических вычислений, ФОРТРАН остается избранным языком для численного анализа. Чтобы расширить его применимость для научных вычислений вне сферы численного анализа, в версии, выпущенной в 1990 г., ФОРТРАН 90 были добавлены средства для обработки структурированных данных, динамическое распределение данных, рекурсивные расчеты и другие возможности. ФОРТРАН в новых диалектах иногда применяется в настоящее время. Пример программного кода: EXTERNAL ZN WRITE (*,'(A)') DATA A/2./, B/3./, C/6./, Xn/-5./, Xk/5./, H/0.5/ X=Xn 1 Y=ZN(A,B,C,X) WRITE(*,2) X,Y 2 FORMAT (1X,'X=',F5.1,2X,'Y=',F6.2) X=X+H 49 IF (X.LE.Xk) GOTO 1 STOP END FUNCTION ZN(A,B,C,X) IF (-A.LE.X.AND.X.LE.A) P=0 IF (X.GE.B) P=C IF (-B.GE.X) P=-C ZN=P RETURN END Кобол Кобол (COmmon Business-Oriented Language - ориентированный на бизнес язык широкого применения) - был наиболее популярным языком в мире бизнеса, включая банки и страховые компании. Пользователи компьютеров и их изготовители объединились с Министерством обороны США, чтобы установить единый язык программирования для деловых приложений и создали Конференцию по Языкам Систем Данных (CODASYL) в 1959 г. CODASYL создал КОБОЛ для достижения двух главных целей: портативность (способность программ к переносу при минимальных изменениях на компьютеры, произведенные различными компаниями) и удобочитаемость (легкость, с которой программы могут читаться, подобно обычным предложениям на английском). КОБОЛ был пересмотрен несколько раз с 1959 г. Он мог быть более легко понят деловыми людьми, чем, возможно, другие языки; и программы, написанные в КОБОЛЕ, весьма компактны. Пример программного кода: PROCEDURE DIVISION. move 16 to n move 0 to i move 1 to fact perform until i greater than n move i to ist move fact to factst display ist "! = " factst add 1 to i multiply i by fact on size error display "value too big" end-multiply end-perform. stop run. PL/1 PL/1 - комплексный язык, который был предложен SHARE (группа пользователей IBM компьютеров) и IBM в 1963 г. Он был первоначально назван NPL (новый язык программирования), но позже переименован в PL/1. IBM впервые анонсировал описание PL/1 в 1965 г. Американский Национальный Институт Стандартов (ANSI) и другие организации с тех пор исправляли его несколько раз. PL/1 был разработан для научных, проектных и деловых проблем, объединяя элементы ФОРТРАНа, КОБОЛа и АЛГОЛа, 50 которые в то время были весьма популярными. Пример программного кода: EXTSUB:PROC(NAM,AG) RETURNS(FIXED BIN(15,0)); DCL NAM CHAR(10); DCL AG FIXED BIN(15,0); PUT SKIP LIST('NAME:',NAM); PUT SKIP LIST('AGE:',AG); AG=25; RETURN (AG); END EXTSUB Бейсик Бейсик (BASIC - Beginner's All-purpose Symbolic Instruction Code, Универсальная Символическая Система команд для начинающих) - универсальный язык программирования, разработанный Джоном Дж. Кемени и Томасом Е. Куртцем в Дартмаус-колледже (Гановер, США) в середине 1960-х г. Это один из самых простых языков высокого уровня и он относительно легко изучается школьниками и начинающими программистами. Приблизительно с 1980 г. БЕЙСИК стал популярным для использования на персональных компьютерах. Отдельно развивается диалект VBA. VBA - Visual Basic for Applications — немного упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office (включая версии для Mac OS), а также во многие другие программные пакеты, такие как AutoCAD, SolidWorks, CorelDRAW, WordPerfect и ESRI ArcGIS. VBA покрывает и расширяет функциональность ранее использовавшихся специализированных макро-языков, таких как WordBasic. VBA является интерпретируемым языком. Как и следует из его названия, VBA близок к Visual Basic. VBA, будучи языком, построенным на COM (Component Object Model — объектная модель компонентов), позволяет использовать все доступные в операционной системе COM объекты и компоненты ActiveX. По сути, возможно создание приложения на основе Microsoft Word VBA, использующего только средства Corel Draw. Пример программного кода: RANDOMIZE (TIMER) LOCATE 10, 20: PRINT "УГАДАЙ ГДЕ ШАРИК?" A = 99 * RND(1) IF A <= 33 THEN B = 1 ELSE IF A > 66 THEN B = 3 ELSE B = 2 LOCATE 11, 20: PRINT " _ _ _ " LOCATE 12, 20: PRINT "/ \ / \ / \" LOCATE 13, 20: PRINT " 1 2 3" INPUT "ВВЕДИ НОМЕР СТАКАНА ", C IF C = B THEN PRINT "УГАДАЛ! МОЛОДЕЦ!" ELSE PRINT "НЕ УГАДАЛ!" LOCATE 11, 20: PRINT " " LOCATE 12, 20: PRINT "\_/ \_/ \_/ " LOCATE 12, 17 + 4 * B: PRINT "O" Паскаль Паскаль (Pascal) - язык, разработанный Н. Виртом из Федерального 51 Института Технологии (Цюрих, Швейцария) в конце 1960-х г.г. Он предназначался в качестве хорошего методического инструмента для систематического изучения программирования и имел быстрые, надежные компиляторы. Начиная с 1974 г. компилятор Паскаля, разработанный Виртом, стал доступен публике и использовался многими университетами. Паскаль сильно повлиял на многие языки, разработанные позже. Описание языка Паскаль лаконично, что делает его более простым для обучения, чем многие другие языки высокого уровня. Комплексные структуры данных и алгоритмы могут быть описаны кратко на Паскале, и его программы просты для чтения и отладки. Пример программного кода: write('Введите размерность 1 массива (от 2 до ',Size,'):'); read (n); until (n>1) and (n<=Size); Randomize; a[1]:=Random(Diap); write ('A= ',a[1],' '); for i:=2 to n do begin a[i]:=Random(Diap);{заполнение массива случайными числами} write (a[i],' '); {вывод элементов массива} end; С Хотя С (читается- «Си») рассматривается как язык высокого уровня, он имеет много элементов низкого уровня, типа способности непосредственно обращаться к адресам и битам. С, тем не менее, высоко портативен. Он был развит Деннисом М. Ритчи из лабораторий компании AT&T в 1972 г. Операционная система UNIX была написана почти исключительно на С; предшествующие операционные системы были почти полностью написаны на ассемблере или в машинных кодах. С широко использовался на персональных и больших компьютерах, переродившись со временем в другие свои диалекты. Пример программного кода: #include int main (void) { printf ("Hello, World!\n"); return 0; } Лисп Лисп (LISP – LISt Processor/списочный процессор) - язык, который является мощным средством скорее для управления списками данных или символов, чем для обработки числовых данных. В этом смысле Лисп уникален. Он требует памяти большой емкости и, так как он обычно обрабатывается интерпретатором, медленно выполняется в программах. Лисп был создан в конце 1950-х г.г. и в начале 1960-х г.г. группой, возглавляемой Джоном Маккарти, впоследствии профессором Института Технологии в Штате Массачусетс. В то время, Лисп радикально отличался от 52 других языков типа ФОРТРАНа и АЛГОЛа. Отдельные версии были развиты из Лисп 1.5, представленного Маккарти. Лисп, выпущенный в 1984 г., соответствует фактическому стандарту Лисп. Пример программного кода: (defun queue-empty-p (queue) "Return T if QUEUE is empty." (check-type queue queue) (= (queue-put-ptr queue) (queue-get-ptr queue))) (defun queue-full-p (queue) "Return T if QUEUE is full." (check-type queue queue) (= (queue-get-ptr queue) (queue-next queue (queue-put-ptr queue)))) Языки четвертого поколения Они ближе к человеческому языку, чем другие языки высокого уровня. Языки четвертого поколения предназначены, чтобы быть более простыми для пользователей, чем машинные языки (первое поколение), ассемблеры (второе поколение) и языки высокого уровня (третье поколение). Это проблемно-ориентированные языки, оперирующие конкретными понятиями узкой области, как правило, в такие языки встраивают мощные операторы, позволяющие одной строкой описывать функции, для описания которых языках младших поколений потребовалось бы сотни или даже тысячи строк исходного кода. К языкам четвертого поколения часто относят: SQL, SGML ( HTML, XML ), Prolog и многие другие узкоспециализированные декларативные языки. Следует отметить, что ряд языков, которые относят к четвертому поколению, не являются языками программирования как таковыми. Например SQL является языком запросов к базам данных, HTML является языком разметки гипертекста, а не полноценными языками программирования, скорее они выступают своеобразными специализированными дополнениями к языкам программирования. То же самое касается XML. Основная отличительная особенность языка четвертого поколения: приближение к человеческой речи (декларативные языки). Некоторые языки имеют черты одновременно и третьего и четвертого поколений. Объектно-ориентированные языки программирования Объектно-ориентированное программирование использует методику программирования, где программа написана с дискретными объектами, которые сами содержат собрание вычислительных процедур и структур данных. Новые программы могут быть написаны путем сборки группы этих заранее предопределенных, автономных объектов в более короткое время, чем написание полных программ с самого начала. Алгоритмический язык Симула и Smalltalk - примеры ранних объектно-ориентированных языков. С 1990ых годов объектно-ориентированное программирование стало чрезвычайно популярным из-за высокой производительности 53 программирования. Язык C++, который был создан Бьерном Страуструпом из AT&T в начале 1980-х г.г., и Object-C, который был разработан Брэдом Коксом в 1984 г., являются объектно-ориентированными версиями С, которые стали очень популярны. То же касается и языка Object Pascal. Delphi Delphi (Делфи) — это объектно-ориентированный язык программирования. Подразумевает комбинацию нескольких важнейших технологий: Высокопроизводительный компилятор в машинный код Объектно-ориентированная модель компонент Визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов Масштабируемые средства для построения баз данных Изначально язык был предназначен исключительно для разработки приложений Microsoft Windows, затем был реализован также для платформ GNU/Linux (как Kylix), однако после выпуска в 2002 году Kylix 3 его разработка была прекращена, и, вскоре после этого, было объявлено о поддержке Microsoft .NET. При этом высказывались предположения, что эти два факта взаимосвязаны. Реализация языка Delphi проектом Free Pascal позволяет использовать его для создания приложений для таких платформ, как Mac OS X, Windows CE и Linux. Пример программного кода: FileExt := AnsiUpperCase(ExtractFileExt(FileListBox1.Filename)); if (FileExt = '.BMP') or (FileExt = '.ICO') or (FileExt = '.WMF') or (FileExt = '.EMF') then begin Image1.Picture.LoadFromFile(FileListBox1.Filename); Caption := FormCaption + ExtractFilename(FileListBox1.Filename); if (FileExt = '.BMP') then begin Caption := Caption + Format(' (%d x %d)', [Image1.Picture.Width, Image1.Picture.Height]); ViewForm.Image1.Picture := Image1.Picture; ViewForm.Caption := Caption; if GlyphCheck.Checked then ViewAsGlyph(FileExt); end else GlyphCheck.Checked := False; end; С++ C++ - компилируемый статически типизированный язык программирования общего назначения. Поддерживает такие парадигмы программирования как процедурное программирование, модульность, раздельная компиляция, обработка исключений, абстракция данных, типы (объекты), виртуальные функции, 54 объектно-ориентированное программирование, обобщенное программирование, контейнеры и алгоритмы, сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. Являясь одним из самых популярных языков программирования, C++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (например, видеоигры). C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#. Пример программного кода: первый вариант синтаксиса #include int main() { int x, y; x = 5; y = 6; printf( "x: %d\ny: %d\n", x, y ); printf("1 + 2: %d\n", 1 + 2 ); x = 12 / 3; y = 2 * x; printf( "x: %d\ny: %d\n", x, y ); return 0; } второй вариант синтаксиса #include using namespace std; int x; int main() { std::cin >> x; std::cout << "Вы ввели число:" << x; cout << "Hello, world! /n"; return 0; } |