ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 15.05.2021
Просмотров: 243
Скачиваний: 1
16
Лекция 1
1. Введение
В данном разделе представлен ряд вводных замечаний, касающихся языков программирования. Во-первых, приводятся соображения, согласно которым не только студенты, но и профессиональные разработчики программного обеспечения (ПО) должны изучать общие концепции языков. Во-вторых, рассматриваются области применения программирования, поскольку предметная область оказывает существенное влияние на выбор используемого языка. Затем представляются критерии, по которым могут приниматься решения о таком выборе.
Обсуждаются два основных фактора, влияющих на структуру языка: архитектура ЭВМ и методология разработки программ. Рассматриваются некоторые направления, изучение которых необходимо при разработке языка. Кроме того, в разделе содержится обзор наиболее общих подходов к реализации языков программирования. В заключение приводится несколько примеров сред программирования и обсуждается их влияние на процесс производства программного обеспечения.
1.1. Зачем изучать концепции языков программирования
В компьютерных науках существует множество предметов, заслуживающих серьезного изучения. Почему же стоит тратить время на изучение общих концепций языков программирования? Может быть, достаточно ограничиться знанием 1-2 конкретных языков? Ниже приводится перечень потенциальных выгод изучения языковых концепций.
Больше возможностей для выражения идеи.
Распространенным является мнение, что на глубину мыслей человека влияет выразительная сила языка, на котором он эти мысли выражает. Людям сложно осмыслить структуры, которые они не могут описать. С подобным явлением сталкиваются и программисты при разработке ПО. Язык программирования налагает ограничения на виды управляющих структур, структур данных и абстракций, которые они могут использовать; следовательно, число форм алгоритмов, которые могут создать программисты, также ограничено.
Изучение новых языковых конструкций помогает программистам повысить мастерство. Часто средства одного языка могут быть воспроизведены в других языках, непосредственно их не поддерживающих. Изучение концепций языков программирования позволяет разобраться в разнообразных языковых возможностях и поощряет программистов к их использованию.
Более обоснованный выбор подходящего языка.
Некоторые программисты прошли формальное обучение в далеком прошлом. Изучавшиеся ими языки уже практически не используются, а многие свойства, доступные в современных языках программирования, известны не очень широко. Так случилось, например, с появлением ООП. В результате, многие программисты продолжают использовать привычный язык, даже если он совсем не подходит для работы над новым проектом. Если бы они знали другие языки программирования, в частности их особые возможности, то выбор рабочего языка был бы более осознанным.
Повышаются способности к изучению новых языков.
Методологии, средства разработки программного обеспечения и языки программирования все еще находятся в состоянии развития. Это делает разработку программного обеспечения интересным занятием, подразумевающим необходимость непрерывного обучения. Процесс изучения новых языков программирования может быть длительным и трудным, особенно для программиста, уверенно себя чувствующего только с одним-двумя языками и никогда не изучавшего концепций языков программирования в целом. Досконально разобравшись в общих концепциях, можно понять, как эти концепции реализованы в структуре изучаемого нового языка программирования.
Это относится и к естественным языкам. Чем лучше знание грамматики родного языка, тем легче дастся изучение второго языка. Более того, положительным побочным эффектом изучения второго языка станет лучшее понимание первого.
Углубляется понимание реализации.
При изучении концепций языков программирования необходимо затрагивать вопросы их реализации. Разобравшись в этом, можно понять, почему язык разработан именно таким образом. Это позволит более рационально его использовать. Программист может значительно повысить мастерство, если научится правильно выбирать конструкции языков программирования и оценивать последствия своего выбора.
Некоторые виды ошибок в программах могут найти и устранить только программисты, знающие соответствующие детали реализации языка.
Кроме того, понимание проблем, связанных с реализацией, позволяет представлять, каким образом компьютер выполняет различные языковые конструкции. В свою очередь, это дает возможность точнее оценить относительную эффективность альтернативных конструкций, которые могут быть выбраны при разработке программы. Например, программисты, не разбирающиеся в реализации рекурсии, не знают, что рекурсивные алгоритмы, как правило, медленнее эквивалентных итеративных.
Повышаются способности к разработке новых языков.
Необходимость
создания нового языка программирования
в наше время может показаться нереальной.
Однако экспертам приходится
разрабатывать различные языки
программирования. Например, большинство
программных систем требует взаимодействия
с пользователем, хотя бы для ввода данных
и команд. В простых ситуациях
вводится несколько значений, а результаты
выдаются в тривиальном формате. Чаще
же пользователь бывает вынужден проходить
по нескольким уровням меню и вводить
большое количество разнообразных
команд. В таких случаях разработка
интерфейса пользователя
– непростая задача. Форма этого интерфейса
проектируется
разработчиком системы, а критерии его
оценки весьма похожи на критерии
оценки языка программирования. Ведь
интерфейс пользователя можно считать
языком виртуальной машины. Критический
разбор языков программирования поможет
при конструировании таких систем.
Понимание новых технологий.
Со временем появляются новые парадигмы программирования. Для наилучшего использования концепций объектно-ориентированного, логического или параллельного программирования необходимо понимание конкретных языков, в которых эти концепции реализованы. Новые технологии, такие как Интернет (Internet) и Всемирная паутина (World Wide Web), в корне меняют природу программирования. Создание методов программирования, оптимально отвечающих этим новым условиям, требует достаточно глубокого понимания существа языков программирования.
1.2. Области применения программирования
Компьютеры применяются во множестве различных областей – как для управления атомными электростанциями, так и хранения записей о личных чековых книжках. Из-за такого разнообразия разработка языков программирования также ведется в различных направлениях. Здесь мы кратко рассмотрим несколько областей применения компьютеров и укажем использующиеся в этих областях языки программирования.
1.2.1. Научные вычисления
Первые цифровые компьютеры (1940-е годы) создавались и использовались для научных целей. Научные приложения (особенно того времени) имеют дело с простыми структурами данных и значительным количеством арифметических вычислений, выполняемых над числами с плавающей точкой. Наиболее часто употребляемыми структурами данных являются массивы и матрицы; из управляющих структур чаще других используются циклы со счетчиком и условные операторы. Языки программирования высокого уровня, созданные для применения в научных исследованиях, разрабатывались именно для удовлетворения таких потребностей. Первым из таковых можно считать FORTRAN. Язык ALGOL 60 и большинство его потомков также предназначались для подобных целей, хотя при этом они могли использоваться и в других родственных областях. Однако для научных приложений особенно важна эффективность, и ни один из языков в этом плане не оказался лучше чем FORTRAN.
1.2.2. Коммерческие приложения
Использование компьютеров в области коммерции началось в 1950-х годах. Для этой цели были разработаны специальные компьютеры и языки программирования. Первым удачным языком высокого уровня для коммерческих целей был COBOL, появившийся в 1960 году и до сего времени являющийся в этой области наиболее используемым. Деловые языки программирования отличаются возможностями генерации подробных отчетов, точными способами описания и хранения десятичных чисел и символьных данных, а также возможностью определять арифметические действия с десятичными числами.
С появлением микро-ЭВМ возникли новые возможности использования компьютеров в деловой сфере, особенно в малом бизнесе. Для коммерческих целей были разработаны два специальных инструмента, широко используемые сейчас в малых компьютерах: системы крупноформатных электронных таблиц и системы баз данных.
Кроме языка COBOL, существует лишь несколько языков программирования, специально ориентированных на коммерческую сферу применения. К таковым можно отнести язык SQL, предназначенный для работами с базами данных.
1.2.3. Искусственный интеллект
Искусственный интеллект (ИИ) – обширная область применения компьютеров, отличающаяся большим использованием символьных данных, чем численных расчетов. Кроме того, символьную обработку удобнее производить с использованием связных списков, а не массивов. Символьные вычисления иногда требуют большей гибкости, чем другие области программирования. Например, в некоторых приложениях искусственного интеллекта удобно иметь возможность создавать и реализовывать фрагменты программы в процессе ее выполнения.
Первым широко используемым в ИИ был язык функционального программирования LISP, появившийся в 1959 году. Многие программы в этой области были написаны именно на языке LISP или на одном из родственных языков. Однако в начале 1970-х годов возник альтернативный подход к решению этих задач – язык логического программирования Prolog.
1.2.4. Системное программирование
Операционные системы и другие инструменты программной поддержки компьютерных архитектур относятся к системному ПО. Применяемые в этой области языки программирования должны обеспечивать эффективное выполнение программ. Более того, они должны иметь низкоуровневые средства для взаимодействия с аппаратурой. Наиболее ранними языками системного программирования были ассемблеры.
В 1960-70-х годах ряд производителей компьютеров (IBM, Digital, Burroughs) разработали для системного ПО машинно-ориентированные языки высокого уровня. Для универсальных вычислительных машин IBM таким языком является PL'S (диалект PL/I); для компьютеров Digital – BLISS, находящийся всего на один уровень выше языка ассемблера; компания Burroughs в тех же целях использовала язык Extended ALGOL.
Операционная система UNIX практически полностью написана на языке C, что позволяет относительно легко переносить ее на различные машины. Некоторые черты языка C способствуют его использованию в системном программировании. Он низкоуровневый, эффективно функционирует и не обременяет программиста большим количеством ограничений. Системные программисты обычно имеют самую высокую квалификацию и считают подобные ограничения излишними. Тем не менее, некоторые специалисты считают язык C опасным для использования в больших и важных системах программного обеспечения.
Развитие языка C в направлении новых технологий программирования привело к появлению объектно-ориентированного языка C++, в значительной мере сохранившего эффективность языка C.
1.2.5. Сценарии
Языки сценариев развивались постепенно в течение последних 30 лет. Программы на этих языках представляют наборы непосредственно выполняемых команд. Первым из таких языков был sh (сокр. от shell – оболочка). Он состоял из небольшого набора команд, интерпретируемых как вызовы системных подпрограмм для выполнения служебных функций (управление файлами, их простую фильтрацию и т.п.). Затем к этой основе были добавлены переменные, операторы управления, функции и другие возможности. В результате получился язык программирования. Один из наиболее мощных и широко известных языков сценариев – ksh, разработанный Д. Корном из компании Bell Laboratories.
Еще один язык сценариев – awk – был разработан сотрудниками компании Bell Laboratories А. Ахо, П. Уайнбергером, Б. Керниганом. Вначале этот язык предназначался лишь для генерации отчетов, но позже стал универсальным. Расширяемый язык подготовки сценариев tcl был разработан в университете штата Калифорния в Беркли Дж. Остераутом. Затем tcl объединили с языком tk, позволяющим создавать приложения в системе X Window.
Разработанный Л. Уоллом язык Perl сначала представлял собой комбинацию языков sh и awk. После этого он получил значительное развитие и сейчас является мощным, хотя и несколько примитивным, языком программирования. С появлением World Wide Web популярность Perl резко возросла, в основном благодаря тому, что он хорошо подходит для программирования интерфейса CGI (Common Gateway Interface – общий шлюзовый интерфейс). Вообще говоря, языки сценариев внесли не очень большой вклад в развитие традиционных языков программирования. Однако язык Perl имеет несколько интересных особенностей.
Все большую популярность завоевывает гибкий современный язык сценариев Python, разработанный с учетом многолетней истории программирования и современных технологий.
Можно назвать еще ряд языков сценариев, порожденных Интернет-технологиями – PHP, JavaScript и т.д.
1.2.6. Информационные системы уровня предприятий
В последние десятилетия наблюдается тенденция к универсализации языков программирования. Современные крупные программные продукты имеют сложную и распределенную архитектуру, объединяют в себе подсистемы различного назначения (базы данных, безопасность, сценарии, web-интерфейс, бизнес-расчеты и т.п.). Для их разработки и интеграции возникла потребность в универсальных системах программирования, которые кроме языка содержат исполняющую платформу. К таковым, в частности, можно отнести языки и соответствующие им платформы Java, C#.
1.2.7. Специализированные задачи
В последние годы появилось также множество специализированных языков программирования для решения узких задач. В их число входит язык RPG, используемый для генерации деловых отчетов, язык APT, созданный для управления программируемыми устройствами, и язык GPSS, разработанный для моделирования систем. В нашей стране к таковым можно отнести скриптовые языки подобные пакету «1С-Предприятие».
1.3. Критерии оценки языков программирования
Цель настоящего курса – изучение концепций, лежащих в основе конструкций и возможностей языков программирования. Мы также должны уметь оценивать эти концепции, особенно в плане их влияния на разработку и эксплуатацию ПО. Любой перечень критериев такой оценки будет спорным, поскольку всегда найдутся специалисты по вычислительной технике, имеющие различные точки зрения на относительную ценность того или иного свойства языка. Мы приведем лишь критерии, признанные большинством ученых.