Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ (История развития и появления языков программирования).pdf
Добавлен: 28.03.2023
Просмотров: 352
Скачиваний: 3
В качестве базового языка для 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 — явный лидер в сфере разработки нейронных сетей. Помимо стандартных инструментов он обзавёлся огромным количеством библиотек для машинного обучения. Благодаря этому на Питоне можно относительно быстро написать даже большой и сложный проект.
Компьютер — это всегда многоуровневое устройство. Используя самый сложный и неудобный инструмент, программист создаёт более простой, а из него ещё более простой. Хотя это понижает производительность (если бы всё было написано на ассемблере, программы работали бы в десятки или даже сотни раз быстрее), но также и значительно уменьшает время разработки, её удобство и сложность.