Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Обзор языков программирования высокого уровня (Характеристика языков )

Содержание:

ВВЕДЕНИЕ

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

А остальным осталась категория языков общего назначения, с помощью которых писали программы насущные, полезные и не очень сложные: расчет зарплаты, управление заводскими установками, создание утилит, расчетные и инженерные программы. Иногда даже игры, если после работы оставалось свободное время. Напомним, что персоналки в основном стояли на работе, а дома оккупировали бытовые компьютеры. Именно в то время и начались первые «холивары» – священные войны на тему «какой язык лучше». Ответов тогда никто ни от кого не ждал, поэтому предлагается объективно взглянуть на эти языки того времени.

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

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

Начало было положено – компьютеры становились все мощнее и портативнее, а математики с разработчиками писали все новые и новые языки программирования. Своего апофеоза «зоопарк» языков программирования достиг в России в 90-х годах, и тому были причины. Во-первых, появились первые персоналки – новые и красивые игрушки; во-вторых, софт традиционно был бесплатным, что давало возможность «попробовать все»; и, наконец, самое главное – было много свободного времени на работе, чтобы развлекаться и получать зарплату. До кризисов оставалось еще долго.

В то время программисты от мала до велика изучали компиляторы языков, делали для себя вывод и выбор. А выбирать было из чего – в 2000 году в мире насчитывалось около 7000 языков программирования. И большинство из них – студенческие самоделки или языки, далеко ушедшие от нужд народа в науку. Хотя в то время еще были живы и здравы корифеи-разработчики и теоретики языков, программисты мало обращали внимания на строгую классификацию языков. В их понятии, категории были такими: системные языки, языки общего назначения и те, которые интересны лишь военным и ученым. В последнюю категорию сваливали все, что не давалось изучить за пару часов – Ada, APL, Prolog, Forth, Smalltalk и т.п.

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

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

Объектом исследования послужили языки программирования

Задачи работы:

Дать понятие языка программирования:

Привести классификацию языков программирования;

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

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

ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

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

Язык программирования— инструмент, относящийся к категории машинно-независимых. Что это означает? Дело в том, что языки программирования делятся на несколько категорий. Есть машинный код: набор алгоритмов, что предназначены для управления пользователем непосредственно аппаратными элементами компьютера. Их сущность будет полностью машинно-зависимой: для конкретных типов ПК подойдут только определенные алгоритмы [6].

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

Их цель – преобразовать наши команды в понятный для компьютера язык. Принцип их работы заключается в том, что они задают некое число заранее определённых электрических разрядов, серия которых несёт за собой последствие в виде решения поставленной задачи. В обиходе эти компиляторы называют языками программирования, то есть языками, понятными и для программистов, и для компьютеров.

Развиваться именно как компьютерные программы эти языки начали в середине 60-х – начале 70х, когда были созданы первые настоящие компьютеры, способные исполнять несколько различных функций. Со временем количество компиляторов увеличивалось по мере того, как расширялись направления работы компьютеров. Например, некоторые из них использовались исключительно для создания операционных систем, другие – только для написания программного обеспечения разнообразных направлений [3].

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

C++    (1983)

Python   (1990)

Visual Basic    (1991)

PHP    (1994)

Delphi     (1995)

Java     (1995)

JavaScript    (1995)

Ruby   (1995)

ActionScript   (1998)

Nemerle  (2006)

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

1.2 Виды языков программирования высокого уровня

Языки программирования высокого уровня – это машинно-независимые языки, которые согласно ГОСТ 19781-90, используют понятия и структуры удобные для восприятия человеком [8].

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

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

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

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

Первым языком программирования высокого уровня считается компьютерный язык Plankalkül разработанный немецким инженером Конрадом Цузе ещё в период 1942—1946 гг. Однако транслятора для него не существовало до 2000 г. Первым в мире транслятором языка высокого уровня является ПП (Программирующая Программа), он же ПП-1, успешно испытанный в 1954 г. Транслятор ПП-2 (1955 г., 4-й в мире транслятор) уже был оптимизирующим и содержал собственный загрузчик и отладчик, библиотеку стандартных процедур, а транслятор ПП для ЭВМ Стрела-4 уже содержал и компоновщик (linker) из модулей. Однако, широкое применение высокоуровневых языков началось с возникновением Фортран а и созданием компилятор а для этого языка (1957).

Высокоуровневые языки программирования были разработаны для платформенной независимости сути алгоритмов. Зависимость от платформы перекладывается на инструментальные программы — трансляторы, компилирующие текст, написанный на языке высокого уровня, в элементарные машинные команды (инструкции). Поэтому, для каждой платформы разрабатывается платформенно-уникальный транслятор для каждого высокоуровневого языка, например, переводящий текст, написанный на Delphi в элементарные команды микропроцессоров семейства x86.

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

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

Языки высокого уровня делятся на:

процедурные (алгоритмические) (Basic, Pascal, C и др.), которые предназначены для однозначного описания алгоритмов; для решения задачи процедурные языки требуют в той или иной форме явно записать процедуру ее решения;

логические (Prolog, Lisp и др.), которые ориентированы не на разработку алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания;

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

ГЛАВА 2. СОВРЕМЕННЫЕ ЯЗЫКЫ ПРОГРАММИРОВАНИЯ

2.1 Характеристика языков

1) С++

Это один из первых, и невероятно популярный до сих пор язык, которым просто обязан владеть каждый программист. Не обязательно начинать изучение программирования именно с него, но со временем С++ всё равно станет одним из наиболее используемых компиляторов. С момента своего создания этот язык прошёл несколько стандартизаций и обновлений, благодаря чему остаётся актуальным и в наше время. Основным его плюсом является полная универсальность – на С++ можно писать всё. Именно благодаря этому его так часто используют профессионалы. Также можно отметить сравнительную простоту компилятора – если вы уже овладели С, Python или  Java, то работать с С++ для вас не составит труда [2].

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

Правда, вторая проблема была частично решена в 1998 году, когда были введены дополнительные шаблоны компилятора. В целом, что бы ни говорили критики, а С++ вот уже почти 30 лет остаётся одним из наиболее популярных языков программирования в мире.

2) Python

Питон – достаточно популярный в наше время язык, суть которого сводится к тому, чтобы как можно проще было создавать сложные программы. Созданный на основе более ранних языков, он впитал в себя все их наработки и является более совершенным. К тому же он постоянно обновляется, последняя версия была выпущена в начале 2012 года. Основные плюсы компилятора – минимализм, многофункциональность  и простота. Но в свою очередь, за минимализм приходится платить низким быстродействием, а за минимализм – наличием множества ошибок в системном коде, некоторые из которых присутствуют и в самых последних версиях. Как бы то ни было, но и Python нашёл своих поклонников.

3) Visual Basic

Этот продукт от Майкрософт знают все программисты, ведь большинство именно на нём познавало азы работы с компиляторами. Он прост, многофункционален и идеально подходит для быстрого создания прототипов программ. Кроме широких возможностей по созданию программного кода, также с его помощью можно конструировать пользовательский интерфейс программы. Именно ВБ чаще всего используют профессионалы из Майкрософт для создания своих программ.  Недостатки у компилятор также есть. К ним относятся отсутствие указателей, низкоуровневый доступ к памяти компьютера. Также программа отличается невысокой скоростью работы и возможностью использования только на Windows и Mac OS X [5].

4) PHP

Это язык программирования, который чаще всего применяют специалисты для создания веб-страниц. В настоящее время его принимают и поддерживают большинство хостинг-провайдеров. Благодаря возможности применения на любой ОС, скорости выполнения, функциональности и простоте его используют практически все разработчики сайтов. Также с помощью PHP можно создавать графический интерфейс пользователя. Создатели языка заложили в него несколько пасхальных яиц. Например, если ввести в  строку любой_сценарий.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 то на экране появится фотография (то, что на ней изображено, зависит от версии).

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

5) Delphi

Delphi – многофункциональный язык, созданный на основе Object Pascal. Данный язык является ещё одним из самых популярных языков из-за наличия огромного количества компиляторов и диалектов. Каждый программист использует именно тот диалект, который подходит для его основного направления в работе. В целом, Delphi – императивный, объектно-ориентированный язык. Чаще всего на этом языке создаются разнообразные программы. Так, именно с помощью Delphi создали Light Alloy, AIMP, The KMPlayer, Total Commander, QIP,  графический интерфейс Skype и многое другое. Именно наличие множества диалектов является одновременно и достоинством, и недостатком языка, так как программу, написанную на одном из них, другой компилятор, скорее всего, не откроет. 

6) Java

Это ещё один известный язык, способный работать на любой платформе. Более того, сейчас большинство операционных систем просто обязаны включать его в свой состав, так как работа некоторых приложений без этого компилятора будет недостаточно  результативной. Однако есть у языка и подводные камни. Так, программы, написанные на Java, имеют репутацию слишком медлительных и требующих больших объёмов оперативной памяти. Java имеет несколько модификаций (не диалектов, а именно разных видов), которые созданы для различных целей. Каждый из них имеет свои уникальные библиотеки данных и структуру, позволяющую более продуктивно работать над определённым направлением программирования [7].

7) JavaScript

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

8) Ruby

Это кроссплатформенный и невероятно многофункциональный язык, полностью предназначенный  для объектно-ориентированных программ. Синтаксис языка простой и лаконичный, без множества ненужных кодов. Также язык содержит в себе сборщик ненужного мусора, поддерживает блоки команд и замыкания с полной привязкой к переменным. У Руби довольно обширное количество разнообразных библиотек, каждая из которых применяется в определённых случаях,  в зависимости от необходимости. Также особенностью этого скриптового языка является то, что программы, написанные на нём, могут в дальнейшем использовать его для расширения своих возможностей.  На данный момент уже выпущено несколько версий языка, каждая из которых принесла что-то новое в принцип его работы. Кроме того, этот язык один из самых экономных по отношению к ресурсам компьютера, за что его так любят обычные программисты. Самая последняя из них — 1.9.3-p194, релиз которой состоялся 20 апреля 2012 года [12].

9) ActionScript

Этот язык также менее популярен среди обывателей из-за того, что с его помощью можно писать в основном объектно-ориентированные программы, даже чаще всего не программы, а Flash – приложения. Синтаксис и функциональность компилятора стандартны для подобного рода языков и заключаются в работе, запрограммированной лишь на указанный вид приложений. Плюсом этого языка является его многофункциональность по отношению к Flash. Как ни странно, но это же одновременно и его минус, так на нём больше нельзя написать практически ничего.

10) Nemerle

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

2.2 Паскаль – как один из основных языков программирования

Язык программирования Turbo Pascal является развитием языка Pascal, разработанного Никлаусом Виртом в 1969-71 годах, для обучения структурному программированию. Фирма Borland International, существенно расширила алгоритмические средства языка, создала удобную среду программирования и высокоскоростной компилятор.

Turbo Pascal разрабатывался под операционную систему ДОС (Дисковая Операционная Система), поэтому он работает только в текстовом режиме. Среда разработки Turbo Pascal (версия 7) представляет из себя текстовый редактор и средства отладки и компиляции программы. Для переключения редактора из оконного в полноэкранный режим и обратно следует нажать одновременно клавиши Alt + Enter.

Программа на Pascal пишется в текстовом редакторе по определённым правилам. Текст программы проверяется редактором кода. Зарезервированные слова языка и определённые синтаксические конструкции выделяются цветом, что создаёт определённые удобства.

Простые программы пишутся последовательно, шаг за шагом до тех пор, пока не будет получено решение задачи. Такая линейная последовательность в программировании называется линейным алгоритмом. Рассмотрим программу простого калькулятора. Пусть нам нужно сложить, вычесть, умножить и разделить два числа X и Y. В большинстве языков программирования принято объявлять участвующие в программе переменные [12]. Это нужно для того, что бы зарезервировать фрагмент оперативной памяти компьютера для хранения объявленных данных. На рисунке показана программа калькулятора:

Рассмотрим построчно, что означают введённые в редакторе команды:

uses crt; - Выражение: Использовать модуль CRT. В начале программы, обычно, пишется директива uses и затем, через запятую, перечисляются модули содержащие набор необходимых функций для работы программы. CRT - модуль поддержки монитора и клавиатуры. (Важное замечание. Регистр букв текста программы не имеет значения. Так, например, можно написать uses crt; или Uses CRT; - программа будет работать и не воспримет это как ошибку). Любое выражение на Pascal должно заканчиваться знаком "точка с запятой".

var - (сокращённое от variable - переменная) объявления блока переменных. После команды var точка с запятой не ставится.

x, y, z1, z2, z3, z4 : real; - перечисляем через запятую переменные необходимые для решения задачи; x и y - вводимые данные для вычислений; z1 ... z4 - переменные для хранения результатов вычислений. Двоеточие и real означает, что все перечисленные переменные объявлены как тип данных - число с плавающей запятой. 

Begin - собственно начало программы. Оператор begin называется операторной открывающейся скобкой. После оператора begin точка с запятой не ставится.

Clrscr; - процедура очистки экрана. Эта процедура встроена в модуль CRT. В фигурных скобках {clear screen} написан комментарий к программе.

Write('Wwedite X: '); - функция write выводит на экран сообщение. Выводимое сообщение является аргументом функции write. Если сообщение текстовое, то оно заключается в одинарные кавычки (апострофы). К сожалению Turbo Pascal не поддерживает символы кириллицы, поэтому сообщение <Введите Х:> пришлось написать латинским шрифтом.

Readln(x); - функция readln получает данные с клавиатуры вводимые пользователем. При появлении этой функции в исполняемой программе, действие программы приостанавливается и она ожидает ввода данных до нажатия клавиши Enter.

Сама функция readln состоит из двух частей: read - собственно чтение с клавиатуры (может использоваться самостоятельно); окончание ln - означает (line new) новая строка, после выполнения чтения с клавиатуры переводит курсор на новую строку.

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

z1 := x + y; - вычисляем сумму аргументов х и у. Знак := означает переменной z1 присвоить значение суммы х и у.

z2 := x - y; - вычисляем разность аргументов х и у.

z3 := x + y; - вычисляем произведение аргументов х и у.

z4 := x + y; - вычисляем частное от деления аргументов х и у.

Writeln(z1) - так же, как и оператор write выводит сообщение на экран, ln - означает, что следующее сообщение будет выводиться с новой строки. Так как переменная z числового типа, то апострофы ставить не нужно. Итак, функции Writeln(z1); Writeln(z2); Writeln(z3); и Writeln(z4); выводят на экран все значения z в столбик.

End. - оператор конца программы. После end (операторная закрывающаяся скобка, парная оператору begin) ставится точка. Точка является признаком конца файла [15].

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

Если компилятор обнаружит ошибку, то появится соответствующее сообщение, а курсор будет установлен в строку с ошибкой.

В нашем случае строка z4 = x / y; - должно быть z4 := x / y; 
Для запуска программы на исполнение, следует нажать комбинацию клавиш Ctrl и F9. В программе следует ввести значение х и нажать Enter, затем ввести значение у и опять нажать Enter. Компьютер произведёт необходимые вычисления и выведет значения на экран, но мы, скорее всего, ничего не увидим, потому что выполнение программы закончится и произойдёт возврат в редактор. Для просмотра полученных результатов следует нажать одновременно Alt и F5.

То, что мы видим на экране не совсем удобно для понимания. Лучше будет, если результаты отображать не экспоненциальном виде, а в нормальном, десятичном.

Так же, пользователь программы вынужден догадываться в какой строке результатов сложение, в какой умножение и так далее. Для исправления ситуации изменим строки вывода результатов на экран:
writeln('X + Y = ', z1:0:4);

writeln('X - Y = ', z2:0:4);

writeln('X * Y = ', z3:0:4);

writeln('X / Y = ', z4:0:4); [15]

Рассмотрим любую из изменённых строк, например writeln('X / Y = ', z4:0:4); Функция вывода writeln в качестве аргумента (в нашем случае) принимает два значения. Аргументы друг от друга отделяются запятой. 

Первое значение: 'X / Y = ' - надпись которая будет выводиться на экран, она должна быть заключена в апострофы. Второе значение - число z4. Для придания числу десятичной формы отображения, оно отформатировано по следующей схеме: двоеточие - число знаков до запятой, двоеточие - число знаков после запятой. Если число знаков до запятой неизвестно, то лучше поставить ноль.

Усовершенствованная программа принимает удобочитаемый вид:

До оператора end можно ввести строку readln;, тогда программа не будет завершаться сразу после выполнения, а будет ожидать нажатия клавиши Enter. Для сохранения готовой программы следует нажать F2 и сохранить файл с именем, например, calc.pas. 

При выполнении написанной программы могут возникнуть непредвиденные обстоятельства, а именно, если пользователь программы вторым числом введёт значение 0 (нуль). Как известно, деление на 0 запрещено и при выполнении программы компьютер выдаст такое сообщение:

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

Самое простое решение, в нашем случае, при значении Y равном нулю, перейти к началу программы, что бы пользователь ввёл другие значения. Перечислим те действия, которые должна выполнить программа:
- если Y равно 0 то перейти к метке в начале программы, иначе (Y не равен 0) выполнить математические действия. [6]

На языке Pascal это будет выглядеть так: if y = 0 then goto label1 else ... 
Эта запись означает: (if) если y = 0 (y = 0 - логическое выражение) then (то) goto (перейти к) label1 (имя метки) else (иначе) ... Оператор else можно не использовать если дальнейшее выполнение программы подразумевается при невыполнении условия логического выражения. Метка label1 придуманное имя метки, поэтому мы должны его объявить до начала программы, сразу за разделом объявления переменных. Сама метка устанавливается в том месте программы, куда должен осуществиться переход. После имени метки ставится знак двоеточие. Изменённая таким образом программа показана на рисунке:

Такая программа имеет более "товарный" вид и свойства.
Рассмотрим подробно какие конструкции можно создавать на языке Pascal с использованием логических операторов. В общем виде логическая запись выглядит так:

if (условие) then (действие1) else (действие2); 

или
if (условие) then (действие);

Логические связки записываются между логическими условиями, сами условия берутся в скобки, например: if (a = b) and (z <= 0) then ...
Следует иметь в виду что при выполнении условия, после оператора then может быть только одно действие. Если действий по условию программы должно быть больше, то все действия должны быть взяты в операторные скобки begin ... end.

Например:

if a = b then

  begin 

  writeln('Error!'); 

  y:= 22; 

  goto label1; 

end else ...

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

Написанная нами программа "калькулятор" имеет один существенный недостаток, если нужно произвести несколько вычислений, приходится перезапускать программу на выполнение. Изменим нашу программу так, что бы она завершалась с согласия пользователя. Пользователю следует предложить нажать клавишу Y для продолжения работы с программой, или любую другую клавишу для завершения работы.
Заменим последний в программе оператор readln; на такие строки:
  write('Repeat - Y / End - other key');

{Выводим сообщение для пользователя}   readln(sym);

{Считываем символ с клавиатуры}

  if (sym = 'Y') or (sym = 'y') then goto label1; {Если введён символ Y или y , то переходим к началу программы}

В нашей программе появилась новая переменная - sym (вымышленное имя, которое придумываем мы сами. Имя должно начинаться с буквы, а затем могут следовать цифры или буквы). Эта переменная имеет тип одиночного символа и мы должны её объявить в разделе переменных. Символьные переменные имеют тип char. Символьные переменные при использовании в программе следует заключать в апострофы.
Добавим эту переменную в разделе var:

var 

sym : char;

Запустим программу на исполнение, и убедимся, что программа написана правильно:

В паскале есть ещё один тип символьных переменных, это тип string - строка состоящая максимум из 255 символов, но об этом в следующих разделах.

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

ГЛАВА 3. ПЕРСПЕКТИВЫ РАЗВИТИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

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

Elm набирает популярность в сообществе JavaScript, в первую очередь среди тех, кто предпочитает функциональное программирование, которое находится на подъеме. Как и TypeScript или Dart, Elm транспилируется в JavaScript.

Rust является языком системного программирования, предназначенным в основном для ниш, где применяют С и С++. Поэтому удивительно видеть, что популярность этого языка быстрее растёт среди веб-разработчиков. Этот факт становится более осмысленным, когда вы выясняете, что язык был создан в Mozilla, которая хотела дать лучший вариант веб-разработчикам, которые вынуждены писать низкоуровневый код, и при этом более производительный, чем PHP, Ruby, Python или JavaScript. Rust был также признан лучшим в номинации ”сама любимая технология” по результатам опроса разработчиков, проведённом StackOverflow в 2016 году (это означает, что большинство пользователей хотели бы продолжать использовать этот язык). [9]

Kotlin существует уже около пяти лет, но только в этом году он достиг production-ready версии 1.0. Несмотря на то, что он ещё не достиг популярности Scala, Groovy или Clojure — три самых популярных и зрелых (не считая Java) языков под JVM — он выделяется из множества других JVM-языков и, кажется, готов занять свое место среди лидеров этой группы. Язык возник в JetBrains (создатель популярной IntelliJ IDEA IDE). Так что он продуман с упором на производительность труда разработчиков.

Crystal — ещё один язык, который надеется принести производительность программ на уровне C в высокоуровневый мир веб-разработчиков. Crystal нацелен на Ruby-сообщество, т.к. его синтаксис подобен, а порой идентичен, Ruby. И без того большое количество стартапов на Ruby продолжает расти, и Crystal может сыграть ключевую роль, помогая поднять производительность этих приложений на следующий уровень.

Теперь взгляните, как четыре из этих пяти языков карабкаются по лестнице популярности (на основе данных StackOverflow и GitHub):

Каждый из этих языков может похвастаться увлечённым сообществом и собственной еженедельной новостной рассылкой. Если вы подумываете об изучении молодого языка с захватывающими возможностями для будущего, прочитайте краткие презентации для каждого из этих пяти языков, написанные опытными энтузиастами и лидерами соответствующих экосистем. [2]

Elm — функциональный язык программирования, ориентированный на удобство и простоту использования, который компилируется в высокопроизводительный JavaScript-код. Вы можете использовать его, в том числе и совместно с JavaScript, для создания пользовательских интерфейсов в интернете. Основными преимуществами Elm по сравнению с JavaScript являются надёжность, лёгкость в поддержке и нацеленность на удовольствие от программирования. Более конкретно:

Семантическое версионирование: elm-package обеспечивает соблюдение семантических версий автоматически. Если автор пакета пытается сделать ломающие API изменения, не поднимая основной номер версии, elm-package обнаружит это и откажет в публикации новой версии пакета. Ни один другой известный менеджер пакетов не обеспечивает соблюдение семантического версионирования настолько надёжно.

Быстрый и функциональный: Elm является чистым функциональным языком, который гарантирует отсутствие мутаций и побочных эффектов. Это не только обеспечивает прекрасную масштабируемость Elm-кода, но также помогает ему рендерить UI приложения быстрее, чем React, Angular или Ember.

Мощные инструменты: elm-format форматирует исходный код в соответствии со стандартом сообщества. Нет больше споров по конвенциям оформления кода. Просто нажимаете кнопку “Сохранить” в вашем редакторе и ваш код становится красивым. elm-test поставляется с “батарейками” для поддержки как модульного, так и случайного тестирования. elm-css позволяет писать Elm-код, который компилируется в css-файл, так что вы можете разделять код между приложением и таблицами стилей, чтобы гарантировать, что ваши константы никогда не рассинхронизируются.

Elm код также может взаимодействовать с JavaScript. То есть вы можете вводить его в малых дозах в ваш JS код, и вы всё ещё можете использовать огромную экосистему JS и не изобретать колесо. [12]

Посмотрите guide.elm-lang.org, чтобы начать, Elm in Action для более глубокого ознакомления и How to Use Elm at Work, если вам интересно, как можно было бы использовать Elm на работе.

Этот раздел написал Richard Feldman — автор Elm in Action и создатель elm-css, CSS-препроцессора для Elm.

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

Основными целями при проектировании языка были:

Безопасность: Многие C-подобные языки открывают путь к ошибкам в результате ручного управления памятью (например, висячие указатели или двойные освобождения). Rust перенимает передовые практики современного C++, такие как RAII и смарт-указатели и делает их применение обязательным, систематически гарантируя, что чистый код на Rust безопасен по памяти.

Скорость: Почти все языки работают медленнее, чем C, поскольку они обеспечивают абстракции, которые упрощают разработку программного обеспечения. Но это даётся ценой существенного увеличения накладных расходов во время выполнения (например, сборка мусора и динамическая диспетчеризация). Rust фокусируется на "абстракциях нулевой стоимости”, т.е. таких методах упрощения программирования, которые не требуют дополнительных затрат во время выполнения. Например, Rust управляет памятью во время компиляции и использует статическую диспетчеризацию для дженериков (по аналогии с шаблонами C++, но более безопасно по отношению к типам).

Конкурентность: Конкурентный код в системных языках часто хрупок и подвержен ошибкам, учитывая нетривиальность многопоточного программирования. Rust пытается смягчить эти проблемы путем предоставления гарантий на уровне типа какие значения могут быть разделены между потоками и как именно. [12]

Rust также имеет несколько отличительных особенностей:

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

Композиция вместо наследования: Вместо того, чтобы использовать систему наследования классов подобно C++ или Java, Rust использует трейты или компонуемые интерфейсы для поддержки модульного программирования. Вместо того, чтобы указывать, что конкретный тип является частью иерархии классов, программист может описать тип на основе его возможностей, например, говоря о том, что тип должен быть Printable и Hashable вместо наследования от класса PrintableHashable.

Крутые инструменты: Любой C/C++ ветеран знает боль установки зависимостей, компиляции кода на нескольких платформах и борьбы с тайнами конфигурации CMake. Rust экономит бесконечные часы, проведенные в криках на GCC, предоставляя разумный менеджер пакетов и кросс-платформенные API.

Для получения дополнительной информации, ознакомьтесь с The Rust Book и Rust by Example.

Этот раздел написал Will Crichton — аспирант Стэнфордского университета, который специализируется на параллельных и конкурентных системах, визуальных вычислениях и архитектуре компиляторов и языков программирования. Он часто пишет о Rust в своем блоге. [7]

Kotlin представляет собой статически типизированный язык, который ориентирован на JVM и JavaScript. Kotlin родился из потребности JetBrains, которая искала новый язык для разработки своего набора инструментов (который был в основном написан на Java). Что-то, что позволило бы им использовать существующую кодовую базу и в то же время решить некоторые проблемы, которые возникали из-за Java. И именно решения этих распространенных недочётов, встречающихся при написании программного обеспечения, определили большую часть характеристик Kotlin.

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

Универсальность: создать язык, который подходит для любого типа промышленного применения, будь то веб, мобильная разработка, desktop или серверные приложения.

Безопасность: пусть язык сам обрабатывает некоторые из распространенных ошибок, связанные с такими вопросами, как null reference exceptions.

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

Kotlin был и всегда будет нацелен на прагматизм — выискивая распространённые проблемы, с которыми мы часто сталкиваемся при написании кода, и пытаясь помочь в их решении. Это проходит красной нитью через различные языковые особенности, такие как:

Null-safe по умолчанию: типы Kotlin по умолчанию не обнуляемы, что позволяет избежать назойливых исключений, связанных с пустыми ссылками/указателями.

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

Соглашения: ряд соглашений, которые позволяют писать выразительный код, открывая путь к созданию сильно типизированного DSL, который улучшает читабельность и упрощает рефакторинг[9]

html {

head { title

{+"XML encoding with Kotlin"}

}

body {

p { + "This is some HTML" }

}

}

Kotlin 1.0 был выпущен в феврале 2016 года, спустя более пяти лет разработки и тщательного тестирования в реальных проектах. В настоящее время более десяти продуктов JetBrains используют Kotlin. Также его используют такие компании, как Amex, NBC Digital, Expedia и Gradle.

Для получения дополнительной информации посетите kotlinlang.org

Этот раздел написал Hadi Hariri — вице-президент JetBrains, редактор блога Kotlin и главный докладчик на темы, посвящённые этому языку.

Crystal

Crystal является языком программирования общего назначения с девизом “Быстр как C, привлекателен как Ruby."

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

Архитектурные цели Crystal:

Синтаксис похожий на Ruby (но совместимость с ним не является целью).

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

Возможность вызывать C-код, написав биндинги к нему на Crystal.

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

Компиляция в эффективный машинный код.

Crystal имеет уникальные функции, такие как:

Каналы: Crystal использует каналы, вдохновленные CSP (так же, как Go) для достижения конкурентности. Он использует согласованные легковесные потоки, называемые Fibers, для достижения этой цели. Fiber легко создать с помощью ключевого слова spawn и сделать выполнение асинхронным/неблокирующим.

Макросы: Crystal использует макросы, чтобы избежать шаблонного кода и обеспечить возможности метапрограммирования. Макросы очень мощные и раскрываются во время компиляции, то есть они не приводят к потери производительности.

crystal: Команда crystal сама по себе полнофунциональна и поставляется с большим количеством встроенных инструментов. Она используется для создания нового проекта, компиляции, запуска тестов и многого другого. Там также есть встроенная утилита для автоматического форматирования кода. А ещё crystal play представляет интерактивную среду для быстрого прототипирования, подобно irb. [9]

Бонус:

Выразительность: Код читают гораздо чаще, чем пишут. Благодаря Ruby, Crystal действительно выразителен и лёгок для понимания. Это облегчает обучение для новичков и окупается в долгосрочной перспективе, благодаря упрощению сопровождения кода.

Для получения дополнительной информации вы можете обратить внимание на официальную Crystal Book и Crystal for Rubyists.

Этот раздел был написан Serdar Doğruyol — автор Crystal for Rubyists, создатель Kemal, веб-фреймворка для Crystal, куратор Crystal Weekly.

Elixir

Впервые представленный в 2012 году, Elixir является функциональным языком общего назначения, предназначенным для повышения производительности, масштабируемости и эксплуатационной надежности. В то время как язык является относительно новым, он компилируется в байт-код, который выполняется на виртуальной машине Erlang (BEAM). Erlang VM родилась в телекоммуникационной отрасли, развивается в течение почти 25 лет и стоит за многими сложными системами с высокой доступностью и низкой задержкой.

В настоящее время Elixir в основном используется для создания веб-приложений с использованием как Cowboy (низкоуровневый HTTP-сервер), так и Phoenix (полнофункциональный фреймворк для разработки веб-приложений). Кроме того, Elixir пробивается в нишу встраиваемых систем благодаря фреймворку Nerves.

Цели языка:

”Дружественное” функциональное программирование: сила и преимущества функционального языка программирования с ясным и доступным синтаксисом.

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

Отличные средства разработки: для компиляции, управления зависимостями, тестирования и развёртывания.

Иммутабельные структуры данных и отсутствие побочных эффектов помогают сделать большие системы проще в обслуживании и понимании.

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

Очень эффективное управление ресурсами означает, что вы можете обслуживать множество пользователей ограниченными аппаратными средствами. См. Почему WhatsApp требуется только 50 инженеров для обслуживания 900 миллионов пользователей.

Горячая замена кода позволяет проводить деплои без даунтайма.

Elixir и Phoenix набирают популярность, поскольку это сочетание позволяет легко создавать сложные надёжные веб-приложения и API с хорошей поддерживаемостью, отличной производительностью и масштабируемостью. Вот почему Pinterest, Bleacher Reports и многие другие компании выбирают Elixir для ключевых частей инфраструктуры своих продуктов. Вы можете получить продуктивность без ущерба для производительности (или наоборот), чего не скажешь о большинстве других языков.

ЗАКЛЮЧЕНИЕ

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

Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко.

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

Языков программирования в наше время великое множество. Мы рассмотрели лишь самые популярные из них. Каждый имеет свои недостатки и преимущества из-за того, что они ориентированы на различные сферы программной деятельности. Один отлично работает с браузерами, но совершенно не подходит для написания Flash, другой – совсем наоборот. Каждый программист начинает с самых простых из них и в конце обучения выбирает или тот, который больше всего подходит ему из-за направления его деятельности, и становится специалистом в этой области, или же продолжает понемногу использовать каждый из них.

СПИСОК ЛИТЕРАТУРЫ

  1. Александреску, А. Язык программирования D / А. Александреску. - СПб.: Символ-плюс, 2014. - 544 c.
  2. Ашарина, И.В. Основы программирования на языках C и C++ / И.В. Ашарина. - М.: ГЛТ, 2016. - 208 c.
  3. Баженова, И.Ю. Языки программирования: Учебник для студентов учреждений высш. проф. образования / И.Ю. Баженова; Под ред. В.А. Сухомлин. - М.: ИЦ Академия, 2016. - 368 c.
  4. Белоусова, С.Н. Основные принципы и концепции программирования на языке VBA в Excel: Учебное пособие / С.Н. Белоусова, И.А. Бессонова. - М.: БИНОМ. ЛЗ, 2015. - 200 c.
  5. Бьянкуцци, Ф. Пионеры программирования: Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден; Пер. с англ. С. Маккавеев. - СПб.: Символ-Плюс, 2015. - 608 c.
  6. Бьянкуцци, Ф. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования / Ф. Бьянкуцци, Ш. Уорден. - М.: Символ, 2016. - 608 c.
  7. Головин, И.Г. Языки и методы программирования: Учебник для студентов учреждений высшего профессионального образования / И.Г. Головин, И.А. Волкова. - М.: ИЦ Академия, 2016. - 304 c.
  8. Довек, Ж. Введение в теорию языков программирования / Ж. Довек, Ж.-Ж. Леви. - М.: ДМК, 2016. - 134 c.
  9. Керниган, Б. Язык программирования C. / Б. Керниган, Д.М. Ритчи. - М.: Вильямс, 2016. - 288 c.
  10. Опалева, Э.А. Языки программирования и методы трансляции. / Э.А. Опалева. - СПб.: BHV, 2015. - 480 c.
  11. Орлов, С. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения / С. Орлов. - СПб.: Питер, 2017. - 688 c.
  12. Пирс, Б. Типы в языках программирования / Б. Пирс. - М.: КДУ, 2016. - 680 c.
  13. Серебряков, В.А. Теория и реализация языков программирования / В.А. Серебряков. - М.: Физматлит, 2016. - 236 c.
  14. Фридман, А.Л. Основы объектно-ориентированного программирования на языке Си++ / А.Л. Фридман. - М.: Гор. линия-Телеком, 2016. - 234 c.
  15. Хейлсберг, А. Язык программирования C#. Классика Computers Science / А. Хейлсберг, М. Торгерсен, С. Вилтамут. - СПб.: Питер, 2016. - 784 c.
  16. Цуканова, Н.И. Теория и практика логического программирования на языке Visual Prolog 7: Учебное пособие для вузов / Н.И. Цуканова, Т.А. Дмитриева. - М.: Гор. линия-Телеком, 2015. - 232 c.