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

Классификация языков программирования. Критерии выбора среды и языка разработки программ (История развития и появления языков программирования)

Содержание:

Введение

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

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

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

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

Действительно, сначала было программирование в машинных кодах, а затем появилось мнемоническое представление машинного языка, ASSEMBLER и наконец MACROASSEMBLER.

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

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

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

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

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

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

Историю компьютерных наук в известной степени можно представить, как историю языков программирования, начало развития которых приходится на 19 век, когда английский ученый Чарльз Бэббидж разработал механическую вычислительную машину. А программу для нее написала леди Ада Лавлейс. Языки программирования в современном понимании фактически начали развиваться с появлением электронных вычислительных машин

История программ начинается с далеких 20-х годов 19 века, когда английский исследователь Ч.Бэббидж выдвинул идею о предварительной записи действий вычислительной машины.

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

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

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

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

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

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

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

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

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

В начале 50 годов XX века возникает язык ASSEMBLER. Он позволял программисту пользоваться текстовыми мнемоническими кодами, например, add. Язык ASSEMBLER мог использовать различные системы счисления, например, десятичную, для представления числовых констант. Программы на языке ASSEMBLER по-прежнему остались машинно-зависимыми. Для преобразования в машинный код необходимо было пользоваться специальной программой, которая называлась компилятор (от англ. Compile). Знание программистом языка ассемблера дает ему понимание архитектуры компьютера. Вместо 1 и 0 программисты теперь могли пользоваться операторами (MOV, ADD, SUB и т.д.), которые похожи на английские слова. Программы на ассемблере также являются машинно-зависимыми. Для преобразования в машинный код использовался компилятор (спец. программа – переводчик в машинный код).

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

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

С середины 50 годов XX века начали создаваться первые языки программирования высокого уровня (high-levellanguage). Они стали машинно–независимыми (то есть они не привязывались к определенному типу ЭВМ). Но для каждого искусственного языка создавался свой компилятор. Языки программирования высокого уровня были разработаны для того, чтобы освободить программиста от знания технических особенностей компьютерной системы и архитектуры. Преимуществом языка программирования этого вида является универсальность и независимость от электронно-вычислительной машины. Примерами языков программирования высокого уровня являются – FORTRAN (FORmulaTRANslator; 1954) предназначен для научных и технических расчетов, COBOL (1959) был предназначен в основном для коммерческих приложений (обрабатывал большие объемы нечисловых данных) – CommonBusiness-OrientedLanguage), BASIC (Beginner’sAllPurposeInstuctionCode – универсальный язык символьных инструкций для начинающих) (1964 г.), LISP, ALGOL, РЕФАЛ, LOGO (1960).

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

· процедурные;

· логические;

· объектно-ориентированные.

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

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

В то же время в середине 60-х годов начали разрабатывать алгоритмические языки широкой ориентации – универсальные языки, которые позволили перейти к структурному программированию (использование операторов ветвления, выбора, цикла и практически отказ от частого использования операторов перехода (GOTO) Обычно они строились по принципу объединения возможностей узко-ориентированных языков. Среди них наиболее известны PL/1, PASCAL (назван его создателем Никлаусом Виртом в честь великого физика Блеза Паскаля; 1970), C - позволяющий быстро и эффективно создавать программный код (1971), C++ (1983) - продолжение алгоритма языка С; MODULA, ADA. Однако, как любое универсальное средство, такие широко-ориентированные языки во многих конкретных случаях оказываются менее эффективными.

Логические языки- (PROLOG, LISP, MERCURY, KLO и др.) ориентированы не на запись алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания. В этих языках указывается что дано и что требуется получить. При этом поиск решения задачи возлагается непосредственно на ЭВМ.

Объектно-ориентированные языки (OBJECT PASCAL (1989) был создан на основе языка PASCAL, C++, JAVA (1995) строго типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle), OBJECTIVE (1983) компилируемый объектно-ориентированный язык программирования, используемый корпорацией Apple, построенный на основе языка Си и парадигм Smalltalk, CAML (1985) это объектно-ориентированный язык программирования, разработанный для создания более безопасных и защищенных программ. и др.). Руководящая идея объектно-ориентированных языков заключается в стремлении связать данные с обрабатывающими эти данные процедурами в единое целое - объект.

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

Объектно-ориентированный подход использует следующие базовые понятия:

объект;

свойство объекта;

метод обработки;

событие;

класс объектов.

Объект — совокупность свойств (параметров) определенных сущностей и методов их обработки (программных средств).

Свойство — это характеристика объекта и его параметров. Все объекты наделены определенными свойствами, совокупность которых выделяют (определяют) объект.

Метод — это набор действий над объектом или его свойствами.

Событие — это характеристика изменения состояния объекта.

Класс — это совокупность объектов, характеризующихся общностью применяемых к ним методов обработки или свойств.

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

инкапсуляция;

наследование.

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

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

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

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

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

В 50-е годы был создан язык FORTRAN (от FORmula TRANslator — переводчик формул). Так же, как и первые вычислительные машины, этот язык предназначался, в основном, для проведения естественнонаучных и математических расчетов. В усовершенствованном виде этот язык сохранился до настоящего времени. Среди современных языков высокого уровня он является одним из наиболее используемых при про­ведении научных исследований.

После FORTRAN в 1957 году появился язык ALGOL (от ALGOrithmic Language — алгоритмический язык). Этот язык так же, как и FORTRAN, предназначался для решения научнотехнических задач. Кроме того, этот язык применялся как средство обучения основам программирования.

LISP (от LISt Processing – обработка списков), созданный в 1960 году Джоном Маккарти. Этот язык широко используется для обработки символьной информации и применяется для создания программного обеспечения, имитирующего деятельность человеческого мозга.

В середине 60-х годов разработан в качестве учебного языка язык BASIC (Beginners All-Purpose Symbolic Instruction Code).

PL/1 (Programming Language One) создан в 1967 году. По своим возможностям PL/1 значительно мощнее многих других языков (C, PASCAL).

В конце 60-х – начале 70-х гг. появился язык FORTH (FORTH — четвертый). Этот язык стал применяться в задачах управления различными системами после того, как его автор Чарльз Мур написал на нем программу, предназначенную для управления радиотелескопом Аризонской обсерватории.

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

На основе языка PASCAL в конце 70-х гг. был создан язык ADA, названный в честь математика Ады Лавлейс.

В настоящее время популярным среди программистов является язык С (Си). Данный язык был создан в лаборатории Bell в 1972 году и первоначально не рассматривался как массовый. Он планировался для замены ASSEMBLER, чтобы иметь возможность создавать столь же эффективные и компактные программы и в то же время не зависеть от конкретного типа процессора. На этом языке в 70-е годы написано множество прикладных и системных программ и ряд известных операционных систем (UNIX).

Еще один язык был создан в начале 70-х гг. группой специалистов Марсельского университета. Это язык PROLOG. Свое название он получил от слов «ПРОграммирование на языке ЛОГики». В основе этого языка лежат законы математической логики.

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

C++ (Cи++) — это объектно-ориентированное расширение языка С, созданное Бьярном Страуструпом в 1980 году.

JAVA (Джава, Ява). Этот язык был создан компанией Sun Microsystems (в последующем приобретённой компанией Oracle) в начале 90-х годов на основе C++, строго типизированный объектно-ориентированный язык программирования. Он призван упростить разработку приложений на основе C++ путем исключения из него всех низкоуровневых возможностей. Но главная особенность этого языка — компиляция не в машинный код, а в платформенно-независимый байт-код (каждая команда занимает один байт).

C# (Cи Шарп). В конце 90-х годов в компании Microsoft под руководством Андерса Хейльсберга был разработан язык C#. В нем воплотились лучшие идеи С и С++, а также достоинства.

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

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

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

Процедурные

Непроцедурные

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

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

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

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

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

Процедурные подразделяются на две категории:

Низкого уровня (машинно-ориентированные)

Высокого уровня

А в первую очередь они направлены на машину или человека.

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

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

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

Трансляторы в свою очередь делятся на:

Компиляторы

Интерпретаторы

Что делают компиляторы? Они превращают текст программы в машинный код, который понятен той или иной машине, для которой был написан этот код, его можно сохранять и затем использовать уже без компиляторов (таким примером могут послужить исполняемые файлы с расширением *exe)

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

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

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

Непроцедурные языки включают в себя две основные языковые группы:

Объектно-ориентированные

Декларативные

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

Основными свойствами объектно-ориентированного программирования являются:

Инкапсуляция

Наследование

Полиморфизм

Инкапсуляция – это описание объектов как типов данных (то есть классов) имеющих общие поля и методы

Наследование – это действие подразумевает создание новых классов на основе тех, которые уже имеются. Класс-потомок обладает такими свойствами как у класса-родителя и дополняет их своими собственными возможностями.

Полиморфизм – это возможность ссылаться на любую общую черту иерархии классов как на наиболее общий класс-родитель.

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

Декларативные языки в свою очередь подразделяются на два семейства:

Логические

Функциональные

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

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

Логическое программирование основано на математической логике

Примером самого первого логического языка программирования является язык PLANNER, который был разработан Карлом Хьюитом в лаборатории искусственного интеллекта Массачусетского технологического института в 1969 году. В нем была заложена возможность автоматического получения (вывода) результата из данных и заданных правил путем переборки вариантов (совокупность таковых называется планом). А в свою очередь самым известным языком логического программирования является язык PROLOG, который был создан во Франции в Марсельском университете в 1971 году Аленом Кольмеро.

Программы составленные на языке программирования PROLOG содержат две составные части – факты и правила.

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

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

Первым языком функционального типа является язык LISP, который был создан в Массачусетском технологическом институте в 1956-1959 годах Джоном Маккарти, который в 1956 году на Дармутской конференции в США впервые предложил термин «искусственный интеллект».

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

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

Атомы – это символы, которые используются для идентификации числовых или символьных объектов (понятия, материалы, люди и пр.).

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

Основными свойствами функциональных языков программирования обычно рассматриваются:

Краткость и простота;

Строгая типизация;

Модульность;

Функции – объекты вычислений;

Чистота, то есть отсутствие побочных эффектов;

И отложенные (ленивые) вычисления.

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

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

Наглядность - использование в языке по возможности уже существующих символов, хорошо известных и понятных как программистам, так и пользователям ЭВМ;

Единство - использование одних и тех же символов для обозначения одних и тех же или родственных понятий в разных частях алгоритма. Количество этих символов должно быть по возможности минимальным;

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

Модульность - возможность описания сложных алгоритмов в виде совокупности простых модулей, которые могут быть составлены отдельно и использованы в различных сложных алгоритмах;

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

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

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

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

FORTRAN и ALGOL – языки, которые предназначены для решения научно-технических задач.

COBOL – предназначен для решения экономических задач

BASIC – необходим для решения небольших вычислительных задач в диалоговом режиме.

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

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

- высокое качество создаваемых программ (компактность и скорость выполнения);

- возможность использования конкретных аппаратных ресурсов;

- предсказуемость объектного кода и заказов памяти;

- для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;

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

- низкая скорость программирования;

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

Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.

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

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

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

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

алфавит,

синтаксис,

семантика.

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

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

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

Языки Символического Кодирования

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

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

Автокоды

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

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

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

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

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

Макрос

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

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

Макрос одинаково может работать, как с программами, так и с данными.

Машинно-независимые языки

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

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

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

Проблемно-ориентированные языки

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

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

Проблемных языков очень много, например:

FORTRAN, ALGOL - языки, созданные для решения математических задач;

SIMULA, СЛЭНГ - для моделирования;

LISP, SNOBOL - для работы со списочными структурами.

Универсальные языки

Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый универсальный язык был разработан фирмой IBM, ставший в последовательности языков PL/1. Второй по мощности универсальный язык называется ALGOL-68. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. PL/1 имеет развитую систему операторов для управления форматами, для работы с полями переменной длины, с данными организованными в сложные структуры, и для эффективного использования каналов связи. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнение участков программ.

Программы в PL/1 компилируются с помощью автоматических процедур. Язык использует многие свойства FORTRAN, ALGOL, COBOL (На COBOL написаны тысячи прикладных коммерческих систем. Язык являлся первым языком программирования, в котором введен тип данных «запись». Отличительной особенностью языка является возможность эффективной работы с большими массивами данных. Популярность COBOL высока, даже в настоящее время используется COBOL-74). Однако он допускает не только динамическое, но и управляемое и статистическое распределения памяти.

Диалоговые языки

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

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

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

Одним из примеров диалоговых языков является BASIC (Бейсик).

BASIC использует обозначения подобные обычным математическим выражениям. Многие операторы являются упрощенными вариантами операторов языка FORTRAN. Поэтому этот язык позволяет решать достаточно широкий круг задач.

Непроцедурные языки

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

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

Табличные методы легко осваиваются специалистами любых профессий.

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

макрос автокод ASSEMBLER

ASSEMBLER

Язык Ассемблера (assembly language) (1949) - это символическое представление машинного языка. Он облегчает процесс программирования по сравнению с программированием в машинных кодах.

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

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

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

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

Один из самых старых языков программирования - FORTRAN был создан в 50-х гг. нашего века. FORTRAN и подобные ему языки программирования (ALGOL, PL/1) предназначались для решения вычислительных задач, возникающих в математике, физике, инженерных расчетах, экономике и т.п. Эти языки в основном работают с числами.

Второй старейший язык программирования - LISP (List Information Symbol Processing), Дж. Маккарти в 1962 г. скорее для работы со строками символов, нежели для работы с числами. Это особое предназначение LISP открыло для программистов новую область деятельности, известную ныне, как «искусственный интеллект». В настоящее время LISP успешно применяется в экспертных системах, системах аналитических вычислений и т.п.

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

Существование множества различных диалектов LISP привело к созданию в начале 80-х гг. Common LISP Комитета, который должен был выбрать наиболее подходящий диалект LISP и предложить его в качестве основного. Этот диалект, выбранный Комитетом в 1985г., получил название Common LISP. В дальнейшем он был принят в университетах США, а также многими разработчиками систем искусственного интеллекта, в качестве основного диалекта языка LISP.

Язык программирования LISP существенно отличается от других языков программирования, таких, как PASCAL, C и т.п. Работа с символами и работа с числами как с основными элементами требует разных способов мышления.

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

Профессор Массачусетского технологического института Дж. Самман заметил, что математическая ясность и предельная четкость LISP - это еще не все. Главное - LISP позволяет сформулировать и запомнить «идиомы», столь характерные для проектов по искусственному интеллекту.

FORTRAN

Одним из первых и наиболее удачных компиляторов стал язык FORTRAN, разработанный фирмой IBM. Профессор Дж. Букс и группа американских специалистов в области программирования в 1954 году опубликовало первое сообщение о языке. Дословно, название языка FORmulae TRANslation -преобразование формул.

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

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

Модификация языка FORTRAN, появившиеся в 1958 году, получила название FORTRAN II и содержала понятие подпрограммы и общих переменных для обеспечения связи между сегментами.

К 1962 году относится появление языка, известного под именем FORTRAN IV и ставшего наиболее употребительным в настоящее время. К этому же времени относится и начало деятельности комиссии при Американской Ассоциации Стандартов (ASA), которая выработала к 1966 году два стандарта - языки FORTRAN и BASIC (основной) FORTRAN (Basic FORTRAN). Эти языки приблизительно соответствуют модификациям IV и II, однако BASIC FORTRAN является подмножеством FORTRAN, в то время, как FORTRAN II таковым для FORTRAN IV не является. Язык FORTRAN до сих пор продолжает развиваться и совершенствоваться, оказывая влияние на создание и развитие других языков. Например, FORTRAN заложен в основу BASIC - диалогового языка, очень популярного для решения небольших задач, превосходного языка для обучения навыкам использования алгоритмических языков в практике программирования. Разработан этот язык - Beginner's All -purpose Symbolic Instruction Code - группой сотрудников Вычислительного центра Дармутского колледжа, штат Нью-Хемпшир созданный в 1964 г. Но это уже следующий язык.

BASIC

Как знаменитые гамбургеры, бейсбол и баскетбол, BASIC - это продукт Новой Англии. Как я говорил, созданный в 1964г., как язык обучения программированию. BASIC является общепринятым акронимом от "Beginner's All-purpose Symbolic Insruction Code" (BASIC) - Многоцелевой Символический Обучающий Код для Начинающих".

Вскоре как обучаемые, так и авторы программ обнаружили, что BASIC может делать практически все то, что делает скучный неуклюжий FORTRAN. А так как BASIC было легко обучиться и легко с ним работать, программы на нем писались обычно быстрее, чем на FORTRAN. BASIC был также доступен на персональных компьютерах, обычно он встроен в ПЗУ. Так BASIC завоевал популярность. Интересно, что спустя 20 лет после изобретения BASIC, он и сегодня самый простой для освоения из десятков языков общецелевого программирования, имеющихся в распоряжении любителей программирования. Более того, он прекрасно справляется с работой.

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

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

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

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

Более того, с появлением транслятора QUICKBASIC фирмы MICROSOFT разработчики получили возможность строить на BASIC приложения из раздельно откомпилированных модулей, некоторые из которых могут быть написаны на других языках. Теперь, как и в случае других ведущих языков программирования, разработчик имеет выбор из нескольких промышленных библиотек подпрограмм, которые содержат готовые решения для распространенных задач программирования.

РЕФАЛ (РЕкурсивных Функций АЛгоритмический), разработанный у нас в России (СССР), в 1966г. ИПМ АН СССР. Этот язык прост и удобен для описания манипуляций над произвольными текстовыми объектами.

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

Программирование на РЕФАЛе имеет специфику, связанную, прежде всего, с тем, что РЕФАЛ является языком функционального типа в отличие от обычных операторных языков типа ALGOL, FORTRAN и т.д. Если программа на операторных языках - ни что иное, как совокупность приказов-операторов, то программа на РЕФАЛе представляет собой по существу описание связей и отношений между определенными понятиями.

Вследствие того, что в РЕФАЛе программист сам определяет структуру обрабатываемой информации, эффективность программы существенно зависит от удачного или неудачного выбора этой структуры. Для задания структур в РЕФАЛе используются скобки, а специфика всех реализаций языка такова, что использование скобок резко повышает эффективность выполнения программы. Это достигается с помощью адресного соединения скобок.

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

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

PROLOG и PROLOG ++

PROLOG - это язык, предназначенный для поиска решений. Это декларативный язык, то есть формальная постановка задачи может быть использована для ее решения. PROLOG определяет логические отношения в задаче, как отличные от пошагового решения этой задачи.

Центральной частью языка PROLOG являются средства логического вывода, которые решают запросы, используя заданное множество фактов и правил, к которым обращаются как к утверждениям. PROLOG также не имеет деления переменных на типы и может динамически добавлять правила и факты к средствам вывода. Таким образом, это гибкий язык, и он более пригоден для объектно-ориентированного расширения, чем язык со строго заданными типами, например, PASCAL. PROLOG ++ представляет собой дополнение к стандартному языку PROLOG.

Все свойства языка по-прежнему доступны программистам. Следовательно, PROLOG ++ можно отнести к группе гибридных языков, представителями которой считаются OBJECT PASCAL и C++. Расширение PROLOG ++ поддерживает все свойства, присущие обычно объектно-ориентированным языкам: концепции объектов и классов, единичное и многократное наследование, разбиение на подклассы и передачу сообщений. Поддерживаются также некоторые усовершенствованные свойства, существующие в таких языках, как C++ и SMALLTALK, включая общие и частные методы.

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

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

Сам язык основан на концепции передачи сообщений. Программа на языке PROLOG ++ строится вокруг множества объектов языка PROLOG ++, которые обмениваются сообщениями. В этом смысле PROLOG ++ ближе к чистому объектно-ориентированному языку, такому, как SMALLTALK, чем C++ или OBJECT PASCAL. Определения объектов строятся исходя из вызовов

Open_Object [имя_объекта] и Close_Object [имя_объекта], а методы определяются практически так же, как в других объектно-ориентированных языках. Для задания наследования можно явным образом указать, какой метод какого объекта должен наследоваться, что является необходимым для многократного наследования.

PROLOG предназначен для разработки систем и программ искусственного интеллекта. PROLOG принят в качестве основного языка в японских ЭВМ пятого поколения. Относится к числу широко используемых и постоянно развиваемых языков. Последняя его версия PROLOG 6.0.

LEX

LEX - генератор программ лексического анализа. программа для генерации лексических анализаторов, обычно используемая совместно с генератором синтаксических анализаторов yacc. LEX был первоначально написан Эриком Шмидтом (Eric Schmidt) и Майком Леском (Mike Lesk) и является стандартным генератором лексических анализаторов в операционных системах Unix, а также включён в стандарт POSIX. LEX читает входной поток, описывающий лексический анализатор, и даёт на выходе исходный код на языке программирования C. Лексический анализ - это распознавание LEX во входном потоке символов. Сделаем предположение, что задано некоторое конечное множество слов (лексем) в некотором языке и некоторое входное слово. Необходимо установить, какой элемент множества (если он существует) совпадает с данным входным словом. Обычно лексический анализ выполняется так называемым лексическим анализатором. Лексический анализатор - это программа. Лексический анализ применяется во многих случаях, например, для построения пакетного редактора или в качестве распознавателя директив в диалоговой программе и т.д. Однако, наиболее важное применение лексического анализатора - это использование его в компиляторе. Здесь лексический анализатор выполняет функцию программы ввода данных.

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

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

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

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

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

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

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

Особенности языка С

Язык С имеет свои существенные особенности, давайте, перечислим некоторые из них:

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

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

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

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

Недостатки языка C:

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

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

C++

Безусловно, C++ восходит, главным образом, к C. Язык С сохранен как подмножество, поэтому сделанного в С акцента на средствах низкого уровня достаточно, чтобы справляться с самыми насущными задачами системного программирования. С, в свою очередь, многим обязан своему предшественнику BCPL.

Название С++ - изобретение лета 1983-го. Более ранние версии языка использовались начиная с 1980-ого и были известны как "С с Классами". Первоначально язык был придуман потому, что автор хотел написать событийно управляемые модели для чего был бы идеален SIMULA67, если не принимать во внимание эффективность. "С с Классами" использовался для крупных проектов моделирования, в которых строго тестировались возможности написания программ, требующих (только) минимального пространства памяти и времени на выполнение. В "С с Классами" не хватало перегрузки операций, ссылок, виртуальных функций и многих деталей. С++ был впервые введен за пределами исследовательской группы автора в июле 1983-го. Однако тогда многие особенности С++ были еще не придуманы.

Название C++ выдумал Рик Масситти. Название указывает на эволюционную природу перехода к нему от С. "++" - это операция приращения в C. Чуть более короткое имя C+ является синтаксической ошибкой, кроме того, оно уже было использовано как имя совсем другого языка. Названия D язык не получил, поскольку он является расширением языка C и в нем не делается попыток исцелиться от проблем путем выбрасывания различных особенностей.

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

Изначально C++ был разработан, чтобы автору и его друзьям не приходилось программировать на ASSEMBLER, C или других современных языках высокого уровня. Основным его предназначением было сделать написание хороших программ более простым и приятным для отдельного программиста. Плана разработки C++ на бумаге никогда не было. Проект, документация и реализация двигались одновременно. Разумеется, внешний интерфейс C++ был написан на C++. Никогда не существовало "Проекта C++" и "Комитета по разработке C++". Поэтому C++ развивался и продолжает развиваться во всех направлениях, чтобы справляться со сложностями, с которыми сталкиваются пользователи, а также в процессе дискуссий автора с его друзьями и коллегами.

В качестве базового языка для C++ был выбран язык C, потому что он:

многоцелевой, лаконичный и относительно низкого уровня;

отвечает большинству задач системного программирования;

идет везде и на всем;

пригоден в среде программирования UNIX.

В языке C есть свои сложности, но в наспех спроектированном языке тоже были бы свои, а сложности C нам известны. Самое главное, работа с C позволила "C с Классами" быть полезным (правда, неудобным) инструментом в ходе первых месяцев раздумий о добавлении к C Simula-подобных классов.

C++ стал использоваться шире, и по мере того, как возможности, предоставляемые им помимо возможностей C, становились все более существенными, вновь и вновь поднимался вопрос о том, сохранять ли совместимость с C. Ясно, что отказавшись от определенной части наследия C можно было бы избежать ряда проблем. Это не было сделано, потому что:

есть миллионы строк на C, которые могли бы принести пользу в C++ при условии, что их не нужно было бы полностью переписывать с C на C++;

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

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

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

Язык C++ был развит из языка программирования C и за очень немногими исключениями сохраняет C как подмножество. Базовый язык, C подмножество C++, спроектирован так, что имеется очень близкое соответствие между его типами, операциями и операторами и компьютерными объектами, с которыми непосредственно приходится иметь дело: числами, символами и адресами. За исключением операций свободной памяти new и delete, отдельные выражения и операторы C++ обычно не нуждаются в скрытой поддержке во время выполнения или подпрограммах.

Одним из первоначальных предназначений C было применение его вместо программирования на ассемблере в самых насущных задачах системного программирования. Когда проектировался C++, были приняты меры, чтобы не ставить под угрозу успехи в этой области. Различие между языками C и C++ состоит в первую очередь в степени внимания, уделяемого типам и структурам. Язык C выразителен и снисходителен. А C++ еще более выразителен, но чтобы достичь этой выразительности, программист должен уделить больше внимания типам объектов. Когда известны типы объектов, компилятор может правильно обрабатывать выражения, тогда как в противном случае программисту пришлось бы задавать действия с мучительными подробностями. Знание типов объектов также позволяет компилятору обнаруживать ошибки, которые в противном случае остались бы до тестирования. Заметьте, что использование системы типов для того, чтобы получить проверку параметров функций, защитить данные от случайного искажения, задать новые операции и т.д., само по себе не увеличивает расходов по времени выполнения и памяти.

Особое внимание, уделенное при разработке C++ структуре, отразилось на возрастании масштаба программ, написанных со времени разработки C. Маленькую программу (меньше 1000 строк) вы можете заставить работать с помощью грубой силы, даже нарушая все правила хорошего стиля. Для программ больших размеров это не совсем так. Если программа в 10 000 строк имеет плохую структуру, то вы обнаружите, что новые ошибки появляются так же быстро, как удаляются старые. Язык C++ был разработан так, чтобы дать возможность разумным образом структурировать большие программы таким образом, чтобы для одного человека не было непомерным справляться с программами в 25 000 строк. Существуют программы гораздо больших размеров, однако те, которые работают, в целом, как оказывается, состоят из большого числа почти независимых частей, размер каждой из которых намного ниже указанных пределов.

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

Замечание по проекту языка СC++

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

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

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

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

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

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

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

Модель параллельных вычислений LINDA была предложена в 1985 году. Основной задачей является организация взаимодействия между параллельно выполняющимися процессами, что достигается за счет использования глобальной кортежной области (TUPLE SPACE). Процесс может поместить туда кортеж с данными (то есть совокупность нескольких, возможно разнородных, данных), а в свою очередь другой процесс может ожидать появления в кортежной области некоторого кортежа и, после его появления, прочитать кортеж с возможным последующим его удалением. Один процесс может, например, поместить кортеж в область и завершиться, а другой процесс может через некоторое время воспользоваться этим кортежем. Таким образом обеспечивается возможность асинхронного взаимодействия. Понятно, что при помощи такой модели может быть с эмулировано и синхронное взаимодействие. LINDA — это модель параллельных вычислений, и она может быть добавлена в любой язык программирования. Существуют достаточно эффективные реализации LINDA, обходящие проблему существования глобальной кортежной области с потенциально неограниченным объемом памяти.

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

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

Интерпретируемость (возможность компиляции);

Простота синтаксиса;

Легкая расширяемость.

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

JAVASCRIPT;

VBSCRIPT;

PERL;

PYTHON.

Язык скриптового программирования JAVASCRIPT был создан в компании NETSCAPE COMMUNICATIONS в качестве языка, который описывал сложное поведение веб-страниц. Первоначально назывался LIVESCRIPT, а название было изменено из маркетинговых соображений. Этот язык интерпретируется браузером во время отображения веб-страницы. По синтаксису JAVASCRIPT схож с JAVA и отдаленно с C/C++. Он не является подлинно объектно-ориентированным языком, однако имеет возможность использовать встроенную в браузер объектную функциональность.

VBSCRIPT был создан в качестве альтернативы JAVASCRIPT в корпорации MICROSOFT и имеет схожую с JAVASCRIPT область применения. А синтаксически он схож с VISUAL BASIC и является его усеченной версией. Он исполняется браузером при отображении веб-страниц и также имеет ту же степень объектно-ориентированности.

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

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

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

В 2019 году PYTHON стал самым популярным языком программирования, обогнав JAVA на 10%. Это обусловлено многими причинами, одна из которых — высокая оплата труда квалифицированных специалистов.

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

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

Синтаксис языка программирования PYTHON всегда выделял его на фоне других языков программирования. Он не страдает избыточностью, схожесть синтаксиса с обычным английским позволяет понять код даже обычному пользователю, кроме того, программист пишет меньше строк кода, потому что нет необходимости использовать символы: «;», «{», «}». Вложенность обозначается отступами, что повышает читаемость кода и приучает новичков к правильному оформлению.

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

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

Программисты часто задаются вопросом: “Не приведёт ли использование PYTHON к снижению производительности?”. Не стоит делать какие-либо выводы без детального разбирательства.

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

Однако в современном IT важна не только скорость работы программ, но и скорость их разработки. Разработка, тестирование, отладка и поддержка — всё это стоит немалых денег. И если в скорости работы программ PYTHON уступает, то в скорости разработки ему нет равных.

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

Компьютер — это всегда многоуровневое устройство. Используя самый сложный и неудобный инструмент, программист создаёт более простой, а из него ещё более простой. Хотя это понижает производительность (если бы всё было написано на ассемблере, программы работали бы в десятки или даже сотни раз быстрее), но также и значительно уменьшает время разработки, её удобство и сложность.

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

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

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

1. Скорость работы конечного продукта.

Требовательным к скорости выполнения могут быть программы с большим объемом математических вычислений, например, моделирование физических систем, расчеты большого объема экономических данных, выведение трехмерной графики и прочее. Для данных целей хорошо подойдут компилируемые языки: ASSEMBLER, С/С++, FORTRAN и т.д. Почему именно такие? После сборки программа не требует (грубо говоря) ничего лишнего и содержит в себе машинные команды, которые выполняются без лишних задержек. Схема работы таких программ такая:

1) программа исполняется сразу, так сказать она самодостаточна и не требует дополнительных библиотек;

2) программа кроме своего кода содержит вызовы библиотек с машинным кодом (как системных, так и входящих в проект), поэтому, кроме исполнения собственно своих команд, программа вызывает функции из библиотек;

3) в дополнение случаям 1 и 2, программа может работать через прослойку драйверов, которые написаны на языках низкого уровня и работают по умолчанию быстро. Как видно, максимум в схеме возможны 4 блока: программа -> библиотеки -> драйвера -> железо.

2. Объем занимаемой оперативной памяти.

Данное требование появляется, когда программа разрабатывается для встраиваемых систем, мобильных платформ, микроконтроллеров и так далее. В данных случаях, чем меньше памяти расходует программа на данном языке – тем лучше. К таким языкам, опять же, относятся ассемблер, С/С++, OBJECTIVE-C и другие. Список языков подобен списку пункта 1, так как чем меньше функциональных блоков в схеме исполнения, тем меньше занимается и памяти компьютера.

Если данное требование некритично, то можно использовать «истинно высокоуровневые языки».

3. Скорость разработки программы.

Данное требование возникает тогда, когда начальник говорит «программа нужна не позже, чем вчера!» или еще какая срочность. Тогда выбор падает на высокоуровневые языки с максимально человеколюбивым синтаксисом. Это, например, JAVA, FLASH и подобные. На данных языках время разработки может существенно сокращаться из-за обилия сторонних библиотек, максимально «очеловеченного» синтаксиса, и подобных вещей. Скорость выполнения программ, написанных на данных языках страдает, причем порой весьма ощутимо. Схема выполнения на примере JAVA:

Программа в виде байт-кода -> виртуальная машина-анализатор -> системные библиотеки -> драйвера -> железо.

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

4. Ориентированность на компьютер или человека

С кем будет работать программа в первую очередь? С человеком, или с компьютером? В первом случае программа должна обладать мощной графической частью, отвечающей требованиям дизайна и использования. Разработка графической части зачастую требует достаточно много времени, т.к. отличается немалой сложностью. Здесь сложность возникает в том, что вывод графики – это немало математики, а значит присутствует требовательность к скорости исполнения, а из-за сложности разработки присутствует необходимость в высокоуровневом языке. В данном случае, на мой взгляд, очень хорошо подходит С++/C# с их одновременной и высокоуровневостью, и скоростью выполнения программ на них. Однако, если ГИП не очень сложный, но красивый, возможно использование JAVA и FLASH, на которых создание красивых интерфейс гораздо проще, нежели на С++ и, тем более, С. Если программа ориентирована в первую очередь на «скрытую работу» с минимумом взаимодействия с пользователем, тогда выбор должен ложиться в сторону быстрых языков (ASM, C)

5. Кроссплатформенность.

Кроссплатформенность – возможность работы программы на различных платформах, в различных ОС с минимальными изменениями. В этой сфере можно выделить такие языки: JAVA, C#, FLASH, C++ с различными библиотеками и другие, менее используемые, языки.

JAVA создавался с тем условием, что программы на данном языке должны работать на любой платформе, где есть JVM – Java Virtual Machine. Программы на JAVA вообще не требуют никаких изменений – после компиляции получается .jar файл, который будет работать и на WINDOWS, и на MAC OS, и на LINUX и еще немало где. Аналогичная ситуация и с FLASH, только список платформ гораздо менее обширный. С С++ дело обстоит труднее. На чистом С++ написать кроссплатформенную программу довольно трудно, у кода возникает обширная избыточность, теряется достоинство в скорости выполнения. Облегчают задачу кроссплатформенные библиотеки, например, Qt, которые позволяют добиться принципа «один код на все платформы», однако на каждую платформу нужно программу собирать отдельно (при этом разными компиляторами).

В этот раздел так же можно включить интерпретируемые, скриптовые языки – для их работы нужно наличие интерпретатора языка в системе. Данные языки очень удобны в плане разработки, но достаточно медлительны. Схема их работы напоминает схему работы JAVA/FLASH, только анализатор стал еще медленнее – полумашинный байт код анализировать «на лету» гораздо проще, чем человеческий код. Так же, это влечет к большему потреблению памяти.

6. Скорость внесения изменений, скорость тестирования

Проект стремительно развивается, в него постоянно вносятся изменения, порой немало? Тогда выбор должен падать на высокоуровневые языки, где любой функциональный блок можно быстро переписать. Для подтверждения – я думаю, гораздо проще дебажить тот же С++, чем ASSEMBLER. А еще проще JAVA. Но тут очень много тонкостей, которые таятся даже не сколько в языке, сколько в разработчике с его стилем программирования и компиляторах. Тем не менее, язык вносит свою долю в это дело, так или иначе упрощая/осложняя работу программиста.

Заключение

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

Так же стоит учитывать, что большие программы могут писаться на разных языках в зависимости от их функционала. Например, критичные к скорости работы части пишутся на низкоуровневых языках, графическая часть — на высокоуровневых и медленных. В статье практически в каждом пункте упоминаются языки С и С++. Это действительно универсальные языки с большим количеством библиотек, с хорошей скоростью работы и еще многими другими плюсами. Но, кроме плюсов, они обладают еще довольно большим минусом – из-за этой универсальности данные языки довольно трудны в освоении, имеют очень много тонкостей (С++ больше, т.к. он содержит в себе больше парадигм, нежели С). Язык JAVA тоже универсален, более прост в изучении, но обладает на мой взгляд просто огромным минусом – крайне низкая скорость работы. Это сильно ограничивает его применение: большие программы на нем лучше не писать из-за возникающей потребности в мощном аппаратном обеспечении. Скриптовые/интерпретируемые языки хорошо подойдут для написания «одноразовых программ», автоматизации некоторых действий, а также для работы в связке с другими языками. Ассемблер – вообще говоря это группа языков со схожим синтаксисом, но многими различными параметрами в зависимости от платформы (Например, ASSEMBLER х86 это совсем не одно и то же, что и ASSEMBLER SPARC).

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

Список использованной литературы и материалов

  1. Ваулин А.С. Языки программирования. кн.5, 1993.
  2. Макарова Н.В. Информатика /под ред. Проф. Н.В. Макаровой. -- М.: Финансы и статистика, 1997.
  3. Попов И.И. Основы алгоритмизации и программирования. Учебное пособие. М: Форум: Инфра-М, 2004.
  4. Симонович С.В. Информатика базовый курс. С.-П. «Питер», 2005.
  5. Малышев Р.А. Локальные вычислительные сети: Учебное пособие/ РГАТА. - Рыбинск, 2005.
  6. Информатика: Учебник для вузов. Н.В. Макарова, В.Б. Волков. – СПб.: Питер, 2011.
  7. Информатика: Учеб. пособие / А.В. Терехов, А.В. Чернышов, В.Н. Чернышов. – Тамбов: Издательство ТГТУ, 2007.
  8. Себеста Р.У. Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ.; 5-е изд. М., 2001.
  9. Шилдт Г. Си++: базовый курс. Вильямс, 2008.
  10. Информатика. Энциклопедический словарь-справочник: введение в современные информационные и телекоммуникационные технологии в терминах и фактах. / Ф. С. Воройский - М.: ФИЗМАТЛИТ, 2008.
  11. Урок 4 Языки программирования. - URL: http://os39inf.ucoz.ru/Uroki_11kl/
  12. C++,Turbo Pasckal,QBasik:Эволюция языков программирования http://langprog.far.ru/historylangprog.html. -27.05.10.
  13. О.Л. Голицина, И.И. Попов «Основы алгоритмизации и программирования»
    https://studopedia.ru/18_70778_klassifikatsiya-yazikov-programmirovaniya.html
  14. https://pythonru.com/baza-znanij/s-chego-nachat-programmirovanie-na-python