Контакты

Язык программирования. Языки программирования Виды программирования и их характеристика

Практически каждый день мы используем компьютерные технологии в нашей повседневной жизни. Даже если вы не пользуетесь Интернетом или мобильными гаджетами, различные компьютерные программы окружают вас повсюду — на кассе в магазине, на перекрестке со светофором, в банкоматах и во многих других ежедневных делах, когда мы даже не задумываемся об этом. Вот так вот совершенно незаметно современные технологии стали частью нашей жизни. А уж если вы часто пользуетесь компьютером или же являетесь обладателем смартфона, то тем более прекрасно знаете, что везде и всюду используются различные программы или приложения для совершенно разных нужд современного человека.

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

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

Один из самых базовых языков называется С++, свою историю он ведет еще с 80-х годов. На заре создания компьютеров каждый разработчик создавал свою собственную операционную систему и язык программирования под нее. С ростом различных компаний и их разработок стало ясно, что пора ввести какие-то единые стандарты, т.к. все больше стало возникать проблем совместимости оборудования и программного обеспечения. Так первой общей операционной системой стала Unix, и к ней первый язык программирования C++.

С тех пор прошло много времени, новые языки появлялись и исчезали (совсем не все широко использовались), и другим популярным языком стал Java, имеющий некие общие черты с C++, но по сути являющийся совершенно иным. Язык Ява (или Джава) сегодня особенно используется в разработке самых различных веб-приложений, начиная от простых функций сайтов, заканчивая сложными веб-интерфейсами. Несмотря на то, что в последние годы появилось огромное количество пособий о том, как научиться программировать, все-таки специалисты рекомендуют заканчивать профильные ВУЗы. Или хотя бы посетить специализированные курсы.

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

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

После проверки можно смело размещать свои программы в сети Интернет. Причем как для бесплатного скачивания, так и для получения дохода. Хотя на начальном этапе, конечно, не стоит грезить о большой прибыли, а вот со временем накопленный опыт позволит создавать действительно крупные уникальные программные продукты, которые будут пользоваться спросом и покупаться заинтересованными людьми. Но все-таки главное в программистах — это энтузиазм. Ведь именно благодаря ему рождаются необычайные идеи, обретающие новую жизнь в виртуальном мире, оказывая влияние и на реальный. А потому программированием стоит заниматься только тем людям, которые действительно любят созидать и мечтают сделать мир будущего лучше и интереснее.

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

Язы́к программи́рования - формальная знаковая система , предназначенная для записи компьютерных программ . Язык программирования определяет набор лексических , синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.

  • Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами .
  • Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека к компьютеру, в то время как естественные языки используются для общения людей между собой. Можно обобщить определение «языков программирования» - это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией.
  • Исполнение: язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.

Стандартизация языков программирования

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

Для многих широко распространённых языков программирования созданы международные стандарты . Специальные организации проводят регулярное обновление и публикацию спецификаций и формальных определений соответствующего языка. В рамках таких комитетов продолжается разработка и модернизация языков программирования и решаются вопросы о расширении или поддержке уже существующих и новых языковых конструкций.

Типы данных

Современные цифровые компьютеры обычно являются двоичными и данные хранят в двоичном (бинарном) коде (хотя возможны реализации и в других системах счисления). Эти данные как правило отражают информацию из реального мира (имена, банковские счета, измерения и др.), представляющую высокоуровневые концепции.

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

Статически-типизированные языки могут быть в дальнейшем подразделены на языки с обязательной декларацией , где каждая переменная и объявление функции имеет обязательное объявление типа, и языки с выводимыми типами . Иногда динамически-типизированные языки называются латентно-типизированными .

Структуры данных

Системы типов в языках высокого уровня позволяют определять сложные, составные типы, так называемые структуры данных . Как правило, структурные типы данных образуются как декартово произведение базовых (атомарных) типов и ранее определённых составных типов.

Основные структуры данных (списки, очереди, хеш-таблицы, двоичные деревья и пары) часто представлены особыми синтаксическими конструкциями в языках высокого уровня. Такие данные структурируются автоматически.

Семантика языков программирования

Существует несколько подходов к определению семантики языков программирования.

Наиболее широко распространены разновидности следующих трёх: операционного, деривационного (аксиоматического) и денотационного (математического).

  • При описании семантики в рамках операционного подхода обычно исполнение конструкций языка программирования интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ.
  • Деривационная семантика описывает последствия выполнения конструкций языка с помощью языка логики и задания пред- и постусловий.
  • Денотационная семантика оперирует понятиями, типичными для математики - множества, соответствия, а также суждения, утверждения и др.

Парадигма программирования

Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования.

Несмотря на то, что большинство языков ориентировано на императивную модель вычислений , задаваемую фон-неймановской архитектурой ЭВМ, существуют и другие подходы. Можно упомянуть языки со стековой вычислительной моделью (Форт , Factor , PostScript и др.), а также функциональное (Лисп , Haskell , , и др.) и логическое программирование (Пролог) и язык РЕФАЛ , основанный на модели вычислений, введённой советским математиком А. А. Марковым-младшим.

В настоящее время также активно развиваются проблемно-ориентированные, декларативные и визуальные языки программирования .

Способы реализации языков

Языки программирования могут быть реализованы как компилируемые и интерпретируемые .

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

Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) исходный текст без предварительного перевода. При этом программа остаётся на исходном языке и не может быть запущена без интерпретатора. Процессор компьютера, в этой связи, можно назвать интерпретатором для машинного кода.

Разделение на компилируемые и интерпретируемые языки является условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль , можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).

Для любого интерпретируемого языка можно создать компилятор - например, язык Лисп, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений. Создаваемый во время исполнения программы код может так же динамически компилироваться во время исполнения.

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

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

Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без программы-интерпретатора.

Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов. Следует упомянуть, что есть языки, имеющие и интерпретатор, и компилятор (Форт).

Используемые символы

Современные языки программирования рассчитаны на использование ASCII , то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Ранние языки, возникшие в эпоху 6-битных символов , использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ " :

Заметным исключением является язык APL , в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большу́ю популярность подобные языки не завоевали (исключение составляет Встроенный язык программирования 1С:Предприятие).

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других - арабскими, а третьих - китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006 , , Java) поддерживают Unicode .

Классы языков программирования

См. также

Примечания

Литература

  • Hal Abelson, Gerald Jay Sussman. Structure and Interpretation of Computer Programs
  • Роберт У. Себеста. Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. - 5-е изд. - М .: Вильямс, 2001. - 672 с. - 5000 экз. - ISBN 5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.)
  • Вольфенгаген В. Э. Конструкции языков программирования. Приёмы описания. - М .: Центр ЮрИнфоР, 2001. - 276 с. - ISBN 5-89158-079-9
  • Паронджанов В. Д. Как улучшить работу ума. Алгоритмы без программистов - это очень просто! - М .: Дело, 2001. - 360 с. - ISBN 5-7749-0211-0
  • Ф. Бьянкуцци, Ш. Уорден. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования . - СПб. : Символ-Плюс, 2010. - 608 с. - ISBN 978-5-93286-170-7

Ссылки

  • The Language List (англ.) - более 2500 языков с кратким описанием
  • Computer Languages History (англ.) - история языков программирования (с 1954 по май 2004) (содержит регулярно обновляемую диаграмму)
  • Examples (англ.) - примеры программирования на 162 языках
  • Programming Language Popularity (англ.) - исследование популярности языков программирования за 2004 год
  • 10 языков программирования, которые стоит изучать (2006 г.)
  • Programming Community Index (англ.) - регулярно обновляемый рейтинг популярности языков программирования
  • Computer Language Shootout Benchmarks (англ.) - сравнение языков программирования по эффективности
  • Programming Languages that are Loved (англ.) - сравнение языков программирования по «любви» и «ненависти» к ним

Wikimedia Foundation . 2010 .

Выучите базовые принципы ЯП. Тут, конечно, все зависит от выбранного вами языка, однако есть у ЯП и общие моменты, исключительно для написания полезных программ важные. Чем раньше вы овладеете всеми этими понятиями и научитесь применять их на практике, тем лучше для вас и ваших навыков программиста. Итак, вот лишь некоторые из вышеупомянутых «моментов»:

  • Переменные - в переменной можно хранить и вызывать меняющиеся данные. Переменными можно управлять, у переменных есть типы (очень упрощенно говоря - числа, символы и так далее), которыми и определяется тип хранящихся в переменной данных. Наименования переменных принято задавать такими, чтобы человек, читающий исходный код, мог получить представление о том, что в переменной хранится - так будет проще понять логику работы программы.
  • Условные конструкции (они же - условные выражения) - это действие, которые выполняется в том случае, если выражение или конструкция истинно или ложно. Наиболее распространенной формой таких выражений можно назвать конструкцию «If-Then» (если-то). Если выражение истинно (например, если x = 5), то произойдет действие №1, а если ложно (x != 5), то действие №2.
  • Функции - в разных языках программирования их называют по-разному: где-то это процедуры, где-то - методы, где-то - вызываемые единицы. По сути же, функции представляют собой мини-программы, входящие в состав большой программы. Функцию можно вызывать несколько раз, что позволяет программисту создавать сложные программы.
  • Ввод данных - достаточно широко трактуемое понятие, присутствующее в почти что каждом ЯП. Суть его - обработка данных, введенных пользователем, и их хранение. То, как будут собраны данные, зависит от программы и доступных пользователю способов ввода данных (с клавиатуры, из файла и так далее). Понятие ввода данных тесно связано с понятием вывода данных - то есть того, каким образом данные будут возвращены пользователю (выведены на экран, записаны в файл и так далее).
  • Установите все необходимое ПО. Многим ЯП нужны компиляторы - программы, переводящие программный код в понятные для компьютера инструкции. Впрочем, есть и ЯП другого типа (вроде Python), в которых программы выполняются сразу, а компиляция их не требуется.

    • У некоторых ЯП есть так называемые IDE (Integrated Development Environment, интегрированная среда разработки), в которые входят редактор кода, компилятор/интерпретатор и отладчик (дебаггер). Это дает программисту возможность работать над программой, образно выражаясь, по принципу одного окна. Также в IDE могут входить визуальные представления иерархий объектов и директорий.
    • Есть и онлайн-редакторы кода. Эти программы подсвечивают синтаксис программного кода несколько иначе, а также предлагают разработчику доступ к ряду полезных и простых инструментов.
  • Программирование - процесс и искусство создания компьютерных программ с помощью языков программирования.

    Программирование сочетает в себе элементы искусства, науки, математики и инженерии.

    В узком смысле слова, программирование рассматривается как кодирование - реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования.

    В более широком смысле, программирование - процесс создания программ, то есть разработка программного обеспечения.

    Большая часть работы программиста связана с написанием исходного кода на одном из языков программирования.

    Различные языки программирования поддерживают различные стили программирования (так называемые парадигмы программирования).

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

    Язык программирования - формальная знаковая система, предназначенная для записи программ.

    Программа обычно представляет собой некоторый алгоритм в форме, понятной для исполнителя (например, компьютера).

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

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

    Со времени создания первых программируемых машин человечество придумало уже более восьми с половиной тысяч языков программирования.

    Языки программирования могут быть разделены на компилируемые и интерпретируемые.

    Программа на компилируемом языке при помощи специальной программы компилятора преобразуется (компилируется) в набор инструкций для данного типа процессора (машинный код) и далее записывается в исполняемый файл, который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит программу с языка высокого уровня на низкоуровневый язык, понятный процессору.

    Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) ее текст без предварительного перевода. При этом программа остается на исходном языке и не может быть запущена без интерпретатора. Можно сказать, что процессор компьютера - это интерпретатор машинного кода.

    Кратко говоря, компилятор переводит программу на машинный язык сразу и целиком, создавая при этом отдельную программу, а интерпретатор переводит на машинный язык прямо во время исполнения программы.

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

    Общеизвестный пример низкоуровнего языка - язык ассемблера.

    Высокоуровневый язык программирования - язык программирования, разработанный для быстроты и удобства использования программистом.

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

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

    Такого рода оторванность высокоуровневых языков от аппаратной реализации компьютера помимо множества плюсов имеет и минусы.

    В частности, она не позволяет создавать простые и точные инструкции к используемому оборудованию.

    Программы, написанные на языках высокого уровня, проще для понимания программистом, но менее эффективны, чем их аналоги, создаваемые при помощи низкоуровневых языков.

    Одним из следствий этого стало добавление поддержки того или иного языка низкого уровня (язык ассемблера) в ряд современных профессиональных высокоуровневых языков программирования.

    Наиболее распространенными высокоуровневыми языками являются C++, Visual Basic, Java, Python, Ruby, Perl, Delphi (Pascal), .

    Первым языком программирования высокого уровня считается компьютерный язык Plankalkül разработанный немецким инженером Конрадом Цузе еще в период 1942 - 1946 гг.

    Однако, широкое применение высокоуровневых языков началось с возникновением Фортрана и созданием компилятора для этого языка (1957 год).

    Классы языков программирования

    Функциональные (Лисп, Haskell, Nemerle, Clean, ML, Flang, Erlang, Miranda, Curry);

    Стековые (PostScript, Forth);

    Структурные (Алгол, Basic, QBASIC, Фортран, Фокал, Cg);

    Процедурные (Ада, Бейсик (версии начиная с Quick Basic до появления Visual Basic), Си, КОБОЛ, Фортран, Модула-2, Глагол (русский аналог Оберона), Паскаль, ПЛ/1, Рапира, REXX);

    Языки динамического программирования (Python, PHP, Ruby, JavaScript);

    Учебные (Алгоритмический язык, КуМир, Лого, Робик, Рапира, Форт, Postscript);

    Описания интерфейсов (CORBA IDL, COM IDL);

    Прототипные (Actor-Based Concurrent Language, ABCL: ABCL/1, ABCL/R, ABCL/R2, ABCL/c+, Agora, Cecil, Cel, ECMAScript, ActionScript, DMDScript, JavaScript, JScript, Factor, NewtonScript, Obliq, OpenLaszlo, REBOL, Self, Slate, TADS);

    Объектно-ориентированные (Eiffel, Simula, Java, C#, C++, Object Pascal (Delphi), VB.NET, Visual, DataFlex, Perl, PHP, Python, Scala, ActionScript, JavaScript, JScript.NET, Ruby, Ada, Xbase++);

    Языки логического программирования (Prolog);

    Языки параллельного программирования (MC#);

    Сценарные, или скриптовые (Perl, Python, PHP, Tcl (Tool command language), Ruby, ERM, Lua);

    Эзотерические (Byter, Brainfuck, Befunge, INTERCAL, Whitespace).

    Компьютеры появились достаточно давно. Первые из них были ламповыми и за­нимали очень много места. Для того чтобы управлять такой машиной требовалось много обслуживающего персонала. Со временем лампы были вытеснены электронными компонентами, и компьютеры стали значительно меньше. Сейчас системные блоки компьютеров занимают совсем мало места,а их производительность стала значительно выше.

    Однако основные принципы работы компьютера, заложенные во времена их рождения, действуют до сих пор. Данные пере даются с помощью сигнала методом "имеется сигнал или нет". Так появился "бит" . Бит - это единица информации, которая может принимать значение 0 или 1. Восемь бит объединяются в байт, один байт равен 8 битам. Число 8 появилось из-за того что первые компьютеры были восьмиразрядными и могли работать одновременно только с 8 разрядами, например, 01011001. Первые нули можно убирать.

    В один байт можно записать любое число от 0 до 255. Указанный диапазон чисел очень мал, поэтому чаще используют более крупные диапазоны: два байта = слово, два слова = двойное слово.

    Компьютер стал работать в двоичной системе счисления. Любое десятичное число можно записать как двоичное. Подробное преобразование рассматривать не будем, если кому-то интересно, пишите в комментариях – расскажу.

    В компьютере принято вести расчет в двоичной или шестнадцатеричной систе­ме. Вторая стала использоваться, когда компьютеры стали 16-разрядными. При написании программ на Delphi будем использовать привычную десятичную систему, потому что компилятор сам переведет все числа в нужный процессору вид, но понимать, с какими числами работает процессор, очень важно.

    Шестнадцатеричная система выглядит по-другому. Каждый разряд со­держит шестнадцать состояний. Поэтому один разряд может принимать значения: 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D , Е, F . Буква "А" соответствует цифре 10 в десятичной системе, "В" - 11 и т. д.

    Например, число 1 B в шестнадцатеричной системе равно 27 в десятичной.

    На протяжении всех материалов мы будем иногда встречаться с шестнадцатеричной сис­темой исчисления. В этом случае, чтобы отличать шестнадцатеричное число от десятичного, перед ним будет стоять знак #, например, #25, так принято в Delphi .

    С числами с плавающей точкой работа идёт совершенно не так, рассматривать это мы не будем.

    Теперь разберемся отрицательными числами. Если заранее предусмотрено, что число может быть отрицательным, то его длина сокращается на один бит, который отводится под знак числа. Если первый бит равен 1, то число отрицательное, иначе положительное.

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

    1.2. Машинный язык

    Все данные на диске, в том числе и текстовые файлы, хранятся в двоичном виде. Точно так же выглядит и любая программа, толь­ко ее называют машинным кодом. Рассмотрим его подробнее.

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

    Реальная программа, которую выполняет компьютер, представляет собой по­следовательность единиц и нулей. Такую последовательность называют машинным языком.

    Например, команда сложения двух регистров в шестнадцатеричной системе выглядит так: $03С3. Это мало о чем го­ворит, и запомнить такую команду очень тяжело. Намного проще написать "сло­жить число 1 и число 2".

    Сначала программисты писали программы в машинных кодах, затем появился первый компилятор - программа, которая переводила текст программ в машинный код. Таким образом, пользователи стали писать программы более осмысленно, а всю рутинную работу по переводу текста программы в машинный байт-код стал выполнять сам компьютер.

    1.3. История языков программирования

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

    Первым компилятором был Assembler (переводится как "сборщик"). Писать на нем почти так же сложно, как и в ма­шинных кодах, но теперь уже использовались не числа, а понятные человеку слова .

    Текст на рисунке можно разделить на три колонки:

    · адрес инструкции;

    · машинный код инструкции;

    · код на языке Ассемблера.

    Например, команда копирования регистров выглядела так: mov еах, ebx . В данном случае mov - это команда языка программирования, еах и ebx - имена регистров.

    На языке Assembler про­грамму писать легче, но программа, написанная в машинных кодах, ра­ботала быстрее и более гибко. При написании программы в машинных кодах программист ничем не ограничен, а при работе с ассемблером есть ограничения. Не всегда возможно повлиять на результат.

    После создания ассемблера языки программирования стали появляться один за другим. Так появились С, ADA , FoxPro , Fortran , Basic , Pascal и др. Некоторые из них были предназначены только для обучения, другие были ориентиро­ваны на профессиональных программистов.

    Язык Assembler в настоящее время в основном используется только в качестве вставок для языков высоко­го уровня, а машинные коды используются для написания того, что не может сделать компилятор.

    Затем получило развитие объектно-ориентированное программирование. Язык С превратился в C++, Pascal в Object Pascal и т. д.

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

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

    1.4. Исполнение машинных команд

    Кроме байта существуют и другие размерности:

    · 1 килобайт = 1024 байт;

    · 1 мегабайт = 1024 килобайт;

    · 1 гигабайт = 1024 мегабайт.

    · 1 терабайт = 1024 гигабайт.

    · и т.д.

    В компьютере большинство значений являются степенью числа 2, потому что компьютер оперирует двоичной системой, и таким образом можно максимально эффективно использовать его воз­можности. Именно из-за этого при расчёте размерностей используется 1024 (2 в степени 10).

    Рассмотрим некоторые понятия.

    Сегмент - это область внутренней памяти компьютера.

    Когда операционные системы были 16-битными, процессор не мог работать с памя­тью размером более 64 килобайт, потому что это максимальный размер области памяти, который можно адресовать, используя в этих целях адрес длиной в два байта. Поэтому память делилась на сегменты по размеру и по назначению. В дан­ный момент используются 32-разрядныю ОС, которая может адресовать до 4 Гбайт оперативной памяти и 64-разрядные ОС. Поэтому можно сказать, что память стала сплошной. Однако деление ее по назначению все-таки осталось.

    Существуют следующие сегмент s ы памяти:

    · сегмент кода - область памяти, в которую загружается машинный код, который бу­дет потом выполняться процессором;

    · сегмент данных - область памяти для хранения данных;

    · сегмент стека - область памяти для хранения временных данных и адресов возврата из процедур.

    Каждой запущенной программе отводится свой сегмент кода, данных и стека. Поэтому данные одной программы не могут пересекаться с данными или кодом другой программы.

    Регистр - ячейка памяти в процессоре. Её размер зависит от разрядно­сти. В 32-разрядных процессорах ячейки 32-битные, но есть и 64-битные. Таких регистров у процессора несколько, и каждый из них предназначен для определен­ных целей. Существуют также регистры общего значения, которые программа мо­жет использовать на свое усмотрение.

    Понравилась статья? Поделитесь ей