]]

////Машинные коды////

Поколения языков программирования Чтобы работать с компьютерами первого поколения, программисты писали свои программы в машинных кодах (machine language) – то есть с помощью одних только нулей и единиц. Конечным пользователям приходилось тесно взаимодействовать с программистами, которым, в свою очередь, чтобы разрабатывать приложения в машинных кодах, приходилось даже думать в той манере, как работают компьютеры. Программирование с помощью двоичного кода (все операции, такие как сложение, вычитание и прочие, а также сами данные, переводились в последовательность 0 и 1) было очень медленным и трудоемким процессом. С развитием аппаратного обеспечения компьютеров, увеличивалась скорость обработки и емкость памяти. Это привело к изменениям в языках программирования – они стали проще и понятнее для людей. Языки программирования в своем развитии прошли практически те же стадии, что и сами компьютеры (см. Поколения компьютеров в Гл. 1). Диаграмма на Рис. 2.6 показывает, как происходило развитие языков программирования вместе с поколениями компьютеров за последние 50 лет. Основная тенденция – увеличение простоты взаимодействия пользователя с аппаратным и программным обеспечением компьютеров.

Машинные коды были языком программирования первого поколения. Второе поколение ознаменовалось появлением в начале 50х годов языка программирования Ассемблера (assembly language). Вместо одних только нулей и единиц, программисты теперь могли пользоваться операторами, которые были похожи на слова английского языка. Компилятор преобразовывал эти выражения в машинные коды. Вместе с появлением компьютеров третьего поколения, развитие языков программирования также вступило в новую фазу. Период с середины 50-х до 70-х годов отмечен появлением первых языков программирования высокого уровня (high-level languages). Эти языки впервые позволили ученым (прежде всего, математикам) работать с компьютерами. Язык программирования FORTRAN позволял довольно легко определять переменные и использовать для вычислений математические выражения. Для языков высокого уровня, таких как FORTRAN и COBOL, понадобились более быстрые, высокоэффективные компиляторы, поскольку при преобразовании исходного кода, выходные программы получались большими. Четвертое поколение языков программирования зародилось в конце 70-х, а развитие их продолжается по сей день. Эти языки существенно уменьшили время разработки ПО и позволили выполнять эту работу даже людям без технического образования, и не прибегая к помощи профессиональных программистов. Сегодня для выполнения многих задач программирование как таковое вообще не требуется. Например, появление приложений электронных таблиц (spreadsheets), таких как Microsoft Excel, позволяет обычным пользователям обрабатывать финансовую информацию и управлять большими массивами данных. В 60-х и 70-х годах так просто, без применения языков программирования, использовать возможности компьютеров было невозможно.

Большинству менеджеров не нужно быть профессиональными программистами, но они должны понимать, как происходила эволюция программного обеспечения, чтобы выбрать верную платформу для создания информационной системы организации. Здесь мы коротко опишем наиболее популярные языки программирования высокого уровня. Рис. 2.7 Пример кода на языке Ассемблер. Рис. 2.8 Пример кода на языке FORTRAN. Рис. 2.9 Пример кода на языке COBOL.

Ассемблер Многие программисты продолжают использовать Ассемблер, так как этот язык программирования дает им полный контроль над аппаратным обеспечением компьютера и генерирует очень эффективный исполняемый код. Как и машинные коды, Ассемблер (см. Рис. 2.7) разрабатывается под определенные типы компьютеров и микропроцессоров. Несмотря на описанные преимущества, программирование на этом языке требует больших затрат времени, он труден для изучения и понимания; программы, написанные на Ассемблере трудно отлаживать. Ассемблер сегодня используется в основном для написания системного ПО.

FORTRAN– FORmula TRANslator (Рис. 2.8) был спроектирован в 1956 году в основном для инженеров, математиков и ученых, которые имеют в основном дело с формулами и проблемами, ориентированными на вычисления. На FORTRANе можно довольно просто описывать сложные вычисления, манипулировать массивами и распечатывать выходные множества чисел. Хотя на этом языке было написано немало бизнес-приложений, он не очень подходит для частых операций ввода-вывода и работы со списками. FORTRAN сравнительно легко осваивается, но его синтаксис очень требователен к точности ввода операторов, что вызывает частые ошибки и делает сложной отладку программ.

COBOL – Common Business-Oriented Language (Рис 2.9) – общий язык для приложений, ориентированных на бизнес и коммерцию. COBOL был разработан в начале 60-х годов, для того чтобы было легче писать программы для бизнеса, которые могли использоваться в таких видах деятельности как обработка заказов, ведение бухгалтерии, планирование производства и т.д. Данные, которыми оперирует COBOL – это, прежде всего, записи, файлы, таблицы и списки. Программы, написанные на языке COBOL, относительно понятны даже неспециалистам.

COBOL и FORTRAN были первыми языками, которые действительно сделали программирование доступным для обычных людей. Машинные коды и ассемблер были слишком тяжелыми для изучения и трудными в использовании для любой степени применения. Десятки тысяч студентов университетов в 60-х и начале 70-х годов впервые получили FORTRAN для обучения разработке простых программ. Пришло это через вводный курс по информатике либо как часть инженерного или математического учебного плана, но, обучившись языку FORTRAN, они познакомились с истинным значением слова компьютер. Позже большинство из них поняли, что огромный компьютерный мир постоянно меняется, но FORTRAN все еще нужен им для написания программ, которые решают их производственные проблемы. Даже сегодня в научном и инженерном сообществе язык FORTRAN еще достаточно распространен и превалирует над многими языками.

BASIC BASIC (Beginners All-purpose Symbolic Instruction Code) был создан в 1964 году для обучения студентов колледжей использованию компьютеров. Вероятно, сегодня BASIC – один из самых используемых языков программирования. Это простой язык, который недавно подошел к такому уровню развития, при котором его можно использовать даже для построения больших систем высокой производительности. Слабая сторона BASICа – то что он выполняет все задачи одинаково, без оптимизации кода. Хотя BASIC прост и привлекателен, ему очень не хватает формальной структуры, которая делает язык, подобный C и C++, более подходящим для больших проектов.

Pascal Названный в честь Блеза Паскаля, французского математика и философа, язык программирования Pascal был разработан швейцарским профессором компьютерных наук Никлаусом Виртом в конце 60-х. Программирование на Pascal стало весьма популярным на платформе микрокомпьютеров, в основном благодаря тому, что в сочетании с высокоэффективным выходным кодом, генерируемым компилятором этого языка, программы, написанные на нем занимают немного места в памяти. Благодаря наличию возможностей обработки сложных массивов данных и набору простых, но мощных команд, Pascal применяют в основном для обучения будущих профессионалов навыкам программирования. Для начинающих Pascal слишком сложен, а профессионалы для разработки сложных приложений предпочитают C.

C и C++ Язык С (читается «си») был разработан в начале 70-х в AT&T Bell Labs. На сегодня эти языки являются фактически единственным выбором для построения операционных систем и сложных приложений, таких как электронные таблицы, компиляторы, сетевые утилиты, коммерческие приложения и проч. Операционные системы UNIX, Linux и Windows большей частью написаны на C, даже компилятор C написан на C. Эти мощные и сложные языки генерируют быстрый и эффективный код. Работать на C можно на любых компьютерах – от микроЭВМ до мэйнфреймов. Программист, владеющий С, имеет полный контроль над средой разработки и может заставить компьютер делать практически все, что ему нужно. С сильно потеснил COBOL в приложениях для бизнеса, но основная область его применения – коммерческие пакеты прикладных программ для микрокомпьютеров – серверов, рабочих станций и ПК. Как и ожидалось, эти языки очень сложны, и для того, чтобы овладеть навыками программирования на С, одного желания мало – нужен талант, как и в случае работы с Ассемблером и машинными кодами.

В компьютерном мире было, по крайней мере, две неудавшиеся попытки разработать и внедрить некий универсальный язык. Первая, в середине 60-х, ознаменовалась изобретением IBM языка, названного PL/1. Не так давно Министерство обороны США постановило разработать язык, который должен был затем получить статус стандарта. Это усилие было не более успешным, чем попытка IBM продвинуть PL/1, заменяющий сотни языков программирования, широко используемых во всём мире.

PL/1 PL/1 (Programming Language 1) был разработан компанией IBM в 1964 году. Это очень мощный, но и очень сложный многоцелевой язык программирования. Он пригоден для проектирования как научных, так и бизнес-приложений и даже операционных систем (огромная операционная система MULTICS была написана на PL/1). IBM, бывшая в то время безоговорочным лидером в мире компьютеров, провозгласила, что PL/1 стратегически необходим всем компаниям. Однако, попытка создать универсальный язык провалилась – программисты не желали переучиваться с COBOLа и FORTRANа на абсолютно новый язык, а коммерческие компании не хотели тратить миллионы долларов на перепроектирование своих приложений, написанных на COBOLе и FORTRANе.

Ada Другую попытку создать компьютерный эсперанто предприняло в 1980 году Министерство обороны США. Отдав привилегию разрабатывать язык, названный ADA, международному сообществу, правительство начало обсуждать заключение контрактов на его использование. Язык предполагалось использовать прежде всего для разработки программного обеспечения систем вооружений. Предполагалось, что он будет одинаково эффективен для различных аппаратных платформ. Специалисты, работавшие в правительстве США, надеялись, что именно ADA станет удачной заменой языкам программирования, применявшихся в бизнесе. Но этого не случилось по тем же причинам, что и с PL/1 – природа языка ADA весьма сложная. Несмотря на привлекательность в некоторых нюансах, в решении других проблем ADA сильно ограничен.

В 1984 г. началось повальное увлечение системами искусственного интеллекта (ИИ). Считалось, что спустя несколько лет, специалисты компьютерной сферы наконец-то научат компьютеры обучаться самостоятельно. Встраивая ИИ в приложения, можно будет в конце концов избавиться от программирования как такового. Программные средства будут самостоятельно адаптироваться к потребностям пользователей, а фирмы работать с системами, создавшими сами себя. Сегодня в это верится с трудом. В течение последующих пяти лет интерес к ИИ начал постепенно угасать. Тем не менее, именно в этой сфере нашли применение языки Prolog и LISP.

LISP и Prolog LISP был создан в конце 50-х годов математиком Джон Маккартни который ориентировал этот язык на формирование из вводимых символов, которые в свою очередь являлись операторами, переменными и значениями данных, значащих списков. LISP больше подходит для манипулирования такими списками, чем для решения громоздких числовых задач. Prolog, разработанный в 1970 году, также подходил для этих целей. Отличается же Prolog от LISP в основном тем, что с первым можно работать на обычных компьютерах, а второй работает лучше на машинах, специально созданных для работы с LISP.

СРЕДСТВА РАЗРАБОТКИ четвертого поколения К языкам четвертого поколения относятся программные инструменты, которые позволяют пользователям разрабатывать программы, обладая минимальными техническими навыками, а также новые средства разработки, которые повышают производительность труда программистов. Языки четвертого поколения постепенно становятся менее процедурными или даже непроцедурными в сравнении с обычными языками программирования. Процедурный язык требует описания последовательных шагов, или процедур, которые «говорят» компьютеру, что нужно сделать и каким образом это должно быть сделано. Непроцедурные языки требуют от пользователя только указания, что надо сделать, без подробного описания, как это должно быть выполнено. Таким образом, с помощью непроцедурного языка можно выполнить некоторую задачу, описав меньшее число шагов, чем при решении той же задачи, пользуясь процедурным языком. Существует семь категорий языков четвертого поколения: языки запросов, генераторы отчетов, графические языки, языки программирования очень высокого уровня, пакеты прикладных программ, а также некоторые виды программ для персональных компьютеров. На Рис. 2.10 показана схема этих приложений и даны примеры некоторых известных программ каждой из категорий.

П.1.1. Машинные коды команд базового процессора i8086 В табл. П.1.1_1 использованы следующие обозначения: r – общий регистр; sr – сегментный регистр; m – адрес ячейки памяти, который указывается в мнемокоде в соответствии с используемым способом адресации; Acc – аккумулятор AH или AL; port – адрес 8-pазpядного порта ввода-вывода; type – тип (вектор) прерывания; disp 8/16 – смещение в формате команды (один или два байта); D8/16 – одно или двухбайтная константа; sbr – имя подпрограммы; diff – разница между адресом перехода и содержимым указателя команд IP; label – метка, к которой осуществляется переход; opcode – команда для сопроцессора. Постбайт (второй байт B2 в табл. П.1.1_1.) состоит из трех полей: md – режим, reg – регистр, r/m – регистр/память.