Компьютеры Windows Интернет

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

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

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

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

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

Итак, когда стала мощность дешевле и более доступна, те, кто создавал языки программирования стали все больше задумываться о более удобном написании софта, а не о скорости их выполнения. «Небольшие» операции, то есть операции атомарного типа, которые непосредственно выполнялись устройствами аппаратов, были объединены в более «объемные» операции высокого уровня и единые конструкции, с которыми пользователям было намного удобнее и проще осуществлять свою деятельность.

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

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

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

Для чего необходимы языки программирования?

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

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

Языки программирования подразделяются на 2 группы

Есть языки, которые имеют низкий уровень и языки, которые имеют высокий уровень.

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

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

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

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

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

Какие бывают языки программирования

Фортран

Еще в середине пятидесятых годов ученые стали создавать языки программирования. И самый первый язык такого типа был назван Фортран, и разработали его в 1957 году. Он используется для описания алгоритма решения задач научно-технического типа при помощи ЦВМ. Кроме этого, как и первые вычислительные агрегаты, язык данного типа использовался для того, чтобы проводить естественнонаучные и математические расчеты. Данный язык в усовершенствованном типе сохранился и до нашего времени, и является он, среди современных зыков, которые имеют высокий уровень, наиболее используемым при проведении исследований научного характера. Самые распространенные варианты на сегодняшний день: Фортран-I2, Фортран-I4, EASIC Fortran и их обобщения.

Алгол

Продолжаем нашу тему языки программирования. Как вы уже поняли, сейчас пойдет речь о таком языке программирования, как Алгол, который появился в 1958-1960 годах. В 1964-1968 он был усовершенствован, так появился Алгол - 68. Язык такого типа разработал комитет, в который входили ученые Америки и Европы, и отнесли его к языкам, которые имеют высокий уровень. При помощи языка такого типа можно было с легкостью переводить в программные команды алгебраические формулы. Алгол был популярным не только в странах Европы, но и в России. На все созданные спустя некоторое время языки программирования, данный вид языка оказал заметное влияние, и в частности, это коснулось языка Паскаль. Данный вид языка, в принципе, так же, как и язык Фортран, создали для разрешения задач научно-технического вида. Кроме этого, язык применяли в виде средства обучения основам программирования, то есть искусству составления софта.

Кобол

Язык программирования Кобол создали в 1959-1960 годах, и относится данный язык к третьему поколению. В первую очередь, он предназначается для разработки приложений для бизнеса и для разрешения задач экономического типа, для обработки банковских данных, для компаний по страхованию и других учреждений. «Изобретатель» Кобола - Грейс Хоппер. Обычно, за громоздкость и многословность, КОБОЛ критикуется, так как одна из целей создателей данного языка являлась максимальное приближение к английскому языку. В то же время, язык программирования имел для своего времени отличные средства для осуществления деятельности со структурами данных и файлами и это, кстати, и обеспечило ему в приложениях для бизнеса долгую жизнь. По крайней мере, в США - точно.

Лисп

Следующий у нас на очереди, язык программирования Лисп. Язык программирования Лисп был разработан почти в одно время с языком программирования Кобол. Основан данный язык на представлении программы системных линейных списков символов, являющиеся основной структурой данных языка. Это второй язык программирования после Фортрана по возрасту. Он используется в широком объеме для обработки информации в виде символов и используется для того, чтобы создавать ПО, которое имитирует деятельность мозга человека.

Программа, созданная на Лиспе, состоит из последовательностей выражений, то есть форм. Результатом работы программы является вычисление этих выражений, записывающиеся в виде списка - одной из основных структур данного вида языка. Главный смысл программы Лисп «жизнь» в символьном пространстве.

Бейсик

Язык программирования бейсик разработали программисты Дартмутского колледжа США в середине шестидесятых годов. Язык основали частично на Фортране 2 и частично на Алгол - 60, также были внесены добавления, которые сделали его для работы в режиме разделения времени более удобным, а по прошествии нескольких лет он стал и удобен для текстовых обработок и матричной арифметики. Данный вид языка программирования изначально реализовали на мейнфрейме GE-265, который поддерживает большое количество терминалов. В момент своего появления, вопреки распространенному убеждению, он являлся компилируемым языком.

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

Форт

Язык программирования Форт появился в конце шестидесятых годов в начале семидесятых. Данный вид языка применяли в задачах управления различного рода системами после того как его создатель Мур Чарльз написал на нем софт, который предназначался для управления радиотелескопами обсерватории Аризоны.

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

Паскаль

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

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

Продолжая тему языки программирования, мы решили рассказать еще об одном виде языка - это язык Ада. Язык программирования Ада был создан на основе Паскаля в конце семидесятых годов и назвали его в честь Ады Лавлейс, одаренной женщины математика. Именно эта талантливая женщина в 1843 году объяснила всему миру возможности Аналитического агрегата Чарльза Бэббиджа. Данный вид языка разработали по заказу, которое сделало Министерство обороны США, и изначально он использовался для разрешения задач управления космическими полетами.

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

Язык программирования Си на сегодняшний день является среди программистов самым популярным и используемым. Свое начало данный вид языка программирования берет от 2-ух языков, а именно, BCPL и B. Мартин Ричардс в 1967 году создал BCPL как язык, который предназначался для написания системного ПО и компиляторов. Что это такое, мы расскажем ниже. Кен Томпсон в 1970 году для создания более ранних версий ОС UNIX использовал на ПК DEC PDP-7. И в первом и во втором языке на типы не разделялись переменные - у каждого значения данных имелось в памяти одно слово.

Впервые реализовали язык программирования СИ в 1972 году на ПК DEC PDP-11. Но свою популярность и известность он сумел получить в качестве операционной системы UNIX. Все основные ОС сегодня написаны на Си или СИ++. Язык программирования Си по прошествии нескольких десятилетий имеется в наличии на большом количестве ПК. И кстати, это стоит отметить, он полностью не зависит от аппаратной части.

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

Пролог

Ну вот, мы и подошли к концу. Нашу тему языки программирования мы закончим рассказом о последнем языке в этой сфере - и называется он Пролог. Данный вид языка считается языком программирования будущего, и создали его в начале семидесятых годов. В разработке принимали участие специалисты Марсельского университета. Назвали его от слов «ПРОграммирование на языке ЛОГики». Язык программирования был создан на основе законов математической логики. Данный вид языка, в отличие от языков программирования, которые были описаны выше, не является алгоритмическим и относится он к так называемым дескриптивным, то есть языкам описательного рода.

А сейчас пойдет разговор о том, что собой представляет компилятор и интерпретатор?

Компилятор и интерпретатор

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

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

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

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

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

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

К написанию этой статьи меня побудила дискуссия, разгоревшаяся на одном из форумов dotSITE после появления там сообщения, резко критикующего C# - одну из основных составляющих новой платформы.NET от Microsoft. Сообщение содержало в себе уже ставшую достаточно банальной критику Microsoft вообще и в частности (я здесь не утверждаю, что критиковать Microsoft не за что, просто эта критика уже порядочно набила оскомину), а также некоторые высказывания конкретно о C#. В ходе развернувшейся дискуссии было высказано несколько любопытных замечаний, некоторые же вопросы остались незатронутыми. Все это и побудило меня написать статью, в которой делается попытка «примирить» в некотором роде носителей мнений об исключительности того или иного языка программирования. Я постараюсь дать некоторый исторический очерк развития различных языков и пояснить на примерах некоторые общие тенденции. Возможно, мне удастся убедить кого-то в бесполезности проведения дискуссий, аналогичных вышеупомянутой. Я не претендую ни на объективность (хотя постараюсь быть таковым), ни на полноту изложения. Это всего лишь попытка «встать на цыпочки и осмотреться»…

1. Первые универсальные языки

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

2. Ассемблер

Первым значительным шагом представляется переход к языку ассемблера (позволим себе маленькое лирическое отступление: английское название assembly language, или assembler, на русский переводят именно тем термином, который был использован выше. При этом у новичка создается впечатление, что язык назван в честь некоего человека по имени ассемблер. Достаточно забавная ситуация, не правда ли?). Не очень заметный, казалось бы, шаг - переход к символическому кодированию машинных команд - имел на самом деле огромное значение. Программисту не надо было больше вникать в хитроумные способы кодирования команд на аппаратном уровне. Более того, зачастую одинаковые по сути команды кодировались совершенно различным образом в зависимости от своих параметров (широко известный пример из мира современных компьютеров - это кодирование инструкции mov в процессорах Intel: существует несколько совершенно по-разному кодируемых вариантов команды; выбор того или иного варианта зависит от операндов, хотя суть выполняемой операции неизменна: поместить содержимое (или значение) второго операнда в первый). Появилась также возможность использования макросов и меток, что также упрощало создание, модификацию и отладку программ. Появилось даже некое подобие переносимости - существовала возможность разработки целого семейства машин со сходной системой команд и некоего общего ассемблера для них, при этом не было нужды обеспечивать двоичную совместимость.

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

3. Фортран

В 1954 году в недрах корпорации IBM группой разработчиков во главе с Джоном Бэкусом (John Backus) был создан язык программирования Fortran.

Значение этого события трудно переоценить. Это первый язык программирования высокого уровня. Впервые программист мог по-настоящему абстрагироваться от особенностей машинной архитектуры. Ключевой идеей, отличающей новый язык от ассемблера, была концепция подпрограмм. Напомним, что это современные компьютеры поддерживают подпрограммы на аппаратном уровне, предоставляя соответствующие команды и структуры данных (стек) прямо на уровне ассемблера, в 1954 же году это было совершенно не так. Поэтому компиляция Fortran’а была процессом отнюдь не тривиальным. Кроме того, синтаксическая структура языка была достаточно сложна для машинной обработки в первую очередь из-за того, что пробелы как синтаксические единицы вообще не использовались. Это порождало массу возможностей для скрытых ошибок, таких, например:

В Фортране следующая конструкция описывает «цикл for до метки 10 при изменении индекса от 1 до 100»: DO 10 I=1,100 Если же здесь заменить запятую на точку, то получится оператор присваивания: DO10I = 1.100 Говорят, что такая ошибка заставила ракету взорваться во время старта!

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

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

4. Cobol

В 1960 году был создан язык программирования Cobol. Он задумывался как язык для создания коммерческих приложений, и он стал таковым. На Коболе написаны тысячи прикладных коммерческих систем. Отличительной особенностью языка является возможность эффективной работы с большими массивами данных, что характерно именно коммерческих приложений. Популярность Кобола столь высока, что даже сейчас, при всех его недостатках (по структуре и замыслу Кобол во многом напоминает Фортран) появляются новые его диалекты и реализации. Так недавно появилась реализация Кобола, совместимая с Microsoft .NET, что потребовало, вероятно, внесения в язык некоторых черт объектно-ориентированного языка.

В 1964 году все та же корпорация IBM создала язык PL/1, который был призван заменить Cobol и Fortran в большинстве приложений. Язык обладал исключительным богатством синтаксических конструкций. В нем впервые появилась обработка исключительных ситуаций и поддержка параллелизма. Надо заметить, что синтаксическая структура языка была крайне сложной. Пробелы уже использовались как синтаксические разделители, но ключевые слова не были зарезервированы. В частности, следующая строка - это вполне нормальный оператор на PL/1: IF ELSE=THEN THEN THEN; ELSE ELSE

В cилу таких особенностей разработка компилятора для PL/1 была исключительно сложным делом. Язык так и не стал популярен вне мира IBM.

6. BASIC

В 1963 году в Дартмурском колледже (Dartmouth College) был создан язык программирования BASIC (Beginners’ All-Purpose Symbolic Instruction Code - многоцелевой язык символических инструкций для начинающих). Язык задумывался в первую очередь как средство обучения и как первый изучаемый язык программирования. Он предполагался легко интерпретируемым и компилируемым. Надо сказать, что BASIC действительно стал языком, на котором учатся программировать (по крайней мере, так было еще несколько лет назад; сейчас эта роль отходит к Pascal). Было создано несколько мощных реализаций BASIC, поддерживающих самые современные концепции программирования (ярчайший пример - Microsoft Visual Basic).

7. Algol

В 1960 году командой во главе с Петером Науром (Peter Naur) был создан язык программирования Algol. Этот язык дал начало целому семейству Алгол-подобных языков (важнейший представитель - Pascal). В 1968 году появилась новая версия языка. Она не нашла столь широкого практического применения, как первая версия, но была весьма популярна в кругах теоретиков. Язык был достаточно интересен, так как обладал многими уникальными на так момент характеристиками.

8. Дальнейшее развитие языков программирования

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

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

9. Pascal-подобные языки

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

Отрицательной чертой языка было отсутствие в нем средств для разбиения программы на модули. Вирт осознавал это и разработал язык Modula-2 (1978), в котором идея модуля стала одной из ключевых концепций языка. В 1988 году появилась Modula-3, в которую были добавлены объектно-ориентированные черты. Логическим продолжением Pascal и Modula являются язык Oberon и Oberon-2. Они характеризуются движением в сторону объектно- и компонентно- ориентированности.

10. C-подобные языки

В 1972 году Керниганом и Ритчи был создан язык программирования C. Он создавался как язык для разработки операционной системы UNIX. C часто называют «переносимым ассемблером», имея в виду то, что он позволяет работать с данными практически так же эффективно, как на ассемблере, предоставляя при этом структурированные управляющие конструкции и абстракции высокого уровня (структуры и массивы). Именно с этим связана его огромная популярность и поныне. И именно это является его ахиллесовой пятой. Компилятор C очень слабо контролирует типы, поэтому очень легко написать внешне совершенно правильную, но логически ошибочную программу.

В 1986 году Бьярн Страуструп создал первую версию языка C++, добавив в язык C объектно-ориентированные черты, взятые из Simula (см. ниже), и исправив некоторые ошибки и неудачные решения языка. C++ продолжает совершенствоваться и в настоящее время, так в 1998 году вышла новая (третья) версия стандарта, содержащая в себе некоторые довольно существенные изменения. Язык стал основой для разработки современных больших и сложных проектов. У него имеются, однако же, и слабые стороны, вытекающие из требований эффективности.

В 1995 году в корпорации Sun Microsystems Кеном Арнольдом и Джеймсом Гослингом был создан язык Java. Он наследовал синтаксис C и C++ и был избавлен от некоторых неприятных черт последнего. Отличительной особенностью языка является компиляция в код некоей абстрактной машины, для которой затем пишется эмулятор (Java Virtual Machine) для реальных систем. Кроме того, в Java нет указателей и множественного наследования, что сильно повышает надежность программирования.

В 1999–2000 годах в корпорации Microsoft был создан язык C#. Он в достаточной степени схож с Java (и задумывался как альтернатива последнему), но имеет и отличительные особенности. Ориентирован, в основном, на разработку многокомпонентных Интернет-приложений.

11. Языки Ada и Ada 95

В 1983 году под эгидой Министерства Обороны США был создан язык Ada. Язык замечателен тем, что очень много ошибок может быть выявлено на этапе компиляции. Кроме того, поддерживаются многие аспекты программирования, которые часто отдаются на откуп операционной системе (параллелизм, обработка исключений). В 1995 году был принят стандарт языка Ada 95, который развивает предыдущую версию, добавляя в нее объекно- ориентированность и исправляя некоторые неточности. Оба этих языка не получили широкого распространения вне военных и прочих крупномасштабных проектов (авиация, железнодорожные перевозки). Основной причиной является сложность освоения языка и достаточно громоздкий синтаксис (значительно более громоздкий, чем Pascal).

12. Языки обработки данных

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

В 1957 году была предпринята попытка создания языка для описания математической обработки данных. Язык был назван APL (Application Programming Language). Его отличительной особенностью было использование математических символов (что затрудняло применение на текстовых терминалах; появление графических интерфейсов сняло эту проблему) и очень мощный синтаксис, который позволял производить множество нетривиальных операций прямо над сложными объектами, не прибегая к разбиению их на компоненты. Широкому применению помешало, как уже отмечалось, использование нестандартных символов как элементов синтаксиса.

14. Snobol и Icon

В 1962 году появился язык Snobol (а в 1974 - его преемник Icon), предназначенный для обработки строк. Синтаксис Icon напоминает С и Pascal одновременно. Отличие заключается в наличии мощных встроенных функций работы со строками и связанная с этими функциями особая семантика. Современным аналогом Icon и Snobol является Perl - язык обработки строк и текстов, в который добавлены некоторые объектно-ориентированные возможности. Считается очень практичным языком, однако ему недостает элегантности.

15. SETL

В 1969 году был создан язык SETL - язык для описания операций над множествами. Основной структурой данных в языке является множество, а операции аналогичны математическим операциям над множествами. Полезен при написании программ, имеющих дело со сложными абстрактными объектами.

16. Lisp и ему подобные языки

В 1958 году появился язык Lisp - язык для обработки списков. Получил достаточно широкое распространение в системах искусственного интеллекта. Имеет несколько потомков: Planner (1967), Scheme (1975), Common Lisp (1984). Многие его черты были унаследованы современными языками функционального программирования.

17. Скриптовые языки

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

18. JavaScript

Язык был создан в компании Netscape Communications в качестве языка для описания сложного поведения веб-страниц. Первоначально назывался LiveScript, причиной смены названия получили маркетинговые соображения. Интерпретируется браузером во время отображения веб-страницы. По синтаксису схож с Java и (отдаленно) с C/C++. Имеет возможность использовать встроенную в браузер объектную функциональность, однако подлинно объектно-ориентированным языком не является.

19. VBScript

Язык был создан в корпорации Microsoft во многом в качестве альтернативы JavaScript. Имеет схожую область применения. Синтаксически схож с языком Visual Basic (и является усеченной версией последнего). Так же, как и JacaScript, исполняется браузером при отображении веб-страниц и имеет ту же степень объектно- ориентированности.

20. Perl

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

21. Python

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

22. Объектно-ориентированные языки

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

23. Simula

Первым объектно-ориентрованным языком был язык Simula (1967). Этот язык был предназначен для моделирования различных объектов и процессов, и объектно-ориентированные черты появились в нем именно для описания свойств модельных объектов.

24. Smalltalk

Популярность объектно-ориентированному программированию принес язык Smalltalk, созданный в 1972 году. Язык предназначался для проектирования сложных графических интерфейсов и был первым по-настоящему объектно-ориентированным языком. В нем классы и объекты - это единственные конструкции программирования. Большим недостатком Smalltalk являются большие требования к памяти и низкая производительность полученных программ. Это связано с не очень удачной реализацией объектно-ориентированных особенностей. Популярность языков C++ и Ada 95 связана именно с тем, что объектно- ориентированность реализована без существенного снижения производительности.

25. Eiffel

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

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

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

27. Язык Оccam

Язык Оccam был создан в 1982 году и предназначен для программирования транспьютеров - многопроцессорных систем распределенной обработки данных. Он описывает взаимодействие параллельных процессов в виде каналов - способов передачи информации от одного процесса к другому. Отметим особенность синтаксиса языка Щccam - в нем последовательный и параллельный порядки выполнение операторов равноправны, и их необходимо явно указывать ключевыми словами PAR и SEQ.

28. Модель параллельных вычислений Linda

В 1985 году была предложена модель параллельных вычислений Linda. Основной ее задачей является организация взаимодействия между параллельно выполняющимися процессами. Это достигается за счет использования глобальной кортежной области (tuple space). Процесс может поместить туда кортеж с данными (то есть совокупность нескольких, возможно разнородных, данных), а другой процесс может ожидать появления в кортежной области некоторого кортежа и, после его появления, прочитать кортеж с возможным последующим его удалением. Заметим, что процесс может, например, поместить кортеж в область и завершиться, а другой процесс может через некоторое время воспользоваться этим кортежем. Таким образом обеспечивается возможность асинхронного взаимодействия. Очевидно, что при помощи такой модели может быть сэмулировано и синхронное взаимодействие. Linda - это модель параллельных вычислений, она может быть добавлена в любой язык программирования. Существуют достаточно эффективные реализации Linda, обходящие проблему существования глобальной кортежной области с потенциально неограниченным объемом памяти.

29. Неимперативные языки

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

30. Функциональные языки

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

Из языков с энергичной семантикой упомянем ML и два его современных диалекта - Standard ML (SML) и CaML. Последний имеет объектно-ориентированного потомка - Objective CaML (O’CaML).

Среди языков с ленивой семантикой наиболее распространены два: Haskell и его более простой диалект Clean.

Более подробные сведения о функциональных языках приведены ЗДЕСЬ:

31. Языки логического программирования

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

Родоначальником большинства языков логического программирования является язык Prolog (1971). У него есть ряд потомков - Parlog (1983, ориентирован на параллельные вычисления), Delta Prolog и др. Логическое программирование, как и функциональное, - это отдельная область программирования, и за более подробными сведениями мы отсылаем читателя к специальной литературе.

32. Вместо заключения

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

Целью данного обзора была попытка дать читателю представление о всем многообразии существующих языков программирования. Среди программистов часто бытует мнение о «всеобщей применимости» того или иного языка (C, C++, Pascal и т.п.). Это мнение возникает по нескольким причинам: недостаток информации, привычка, инертность мышления. Я попытался слегка компенсировать первый фактор. По поводу остальных могу лишь сказать, что настоящий профессионал должен постоянно стремиться повышать свои профессиональную квалификацию. А для этого нужно не бояться экспериментировать. Ну и что, что все вокруг пишут на C/С++/VB/Pascal/Perl/Java/… (нужное подчеркнуть)? А почему бы не попробовать что-нибудь новенькое? А вдруг это окажется эффективнее? Разумеется, прежде чем приниматься использовать новый язык, нужно внимательно изучить все его особенности, включая наличии эффективной реализации, возможности взаимодействия с существующими модулями и т.п., и только после этого принимать решение. Разумеется, всегда есть риск пойти не тем путем, но… Не ошибается лишь тот, кто ничего не делает.

И еще. Мне доводилось слышать, а порой и участвовать в дискуссиях вида «язык A лучше, чем язык B». Я надеюсь, что, прочитав этот обзор, многие убедятся в бессмысленности таких споров. Максимум, о чем может идти речь - это о преимуществах одного языка над другим при решении той или иной задачи в тех или иных условиях. Вот здесь действительно иногда есть о чем поспорить. И решение подчас отнюдь не очевидно. Однако же спорить «вообще» - очевидная глупость.

Эта статья задумывалась как ответ тем, кто кричит «язык X MUST DIE». Надеюсь, что ответ получился достаточно адекватным и убедительным. Надеюсь также, что статья имеет, помимо полемической, и познавательную ценность.

Материал из Википедии

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

В это же время, в 1940-е годы, появились электрические цифровые компьютеры и был разработан язык, который можно считать первым высокоуровневым языком программирования для ЭВМ - «Plankalkül », созданный немецким инженером К. Цузе в период с по 1945 годы .

С середины 1950-х начали появляться языки третьего поколения, такие как Фортран , Лисп и Кобол . Языки программирования этого типа более абстрактны (их ещё называют «языками высокого уровня») и универсальны, не имеют жесткой зависимости от конкретной аппаратной платформы и используемых на ней машинных команд. Программа на языке высокого уровня может исполняться (по крайней мере, в теории, на практике обычно имеются ряд специфических версий или диалектов реализации языка) на любой ЭВМ, на которой для этого языка имеется транслятор (инструмент, переводящий программу на язык машины, после чего она может быть выполнена процессором).

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

Совершенствование

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

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

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

Типы данных

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примером языка низкого уровня является ассемблер . Языки низкого уровня ориентированы на конкретный тип процессора и учитывают его особенности, поэтому для переноса программы на ассемблере на другую аппаратную платформу её нужно почти полностью переписать. Определенные различия есть и в синтаксисе программ под разные компиляторы. Правда, центральные процессоры для компьютеров фирм AMD и Intel практически совместимы и отличаются лишь некоторыми специфическими командами. А вот специализированные процессоры для других устройств, например, видеокарт и телефонов содержат существенные различия.

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

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

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

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

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

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

Современные языки программирования рассчитаны на использование 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 .

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

Математически обоснованные языки программирования

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