Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Referat.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
567 Кб
Скачать
☆

6.1.4 Ассемблер

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

6.2 Специализированные языки программирования

Кроме описанных языков программирования, в ОС UNIX имеются спе- циализированные языки, перечисленные ниже.

6.2.1 awk(1)

awk(1) (буквы в названии языка представляют инициалы его авторов) отыскивает во входном файле строки, соответствующие шаблону, описанному в файле спецификаций. Найдя такую строку, awk выполняет действия, также заданные в файле спецификаций. Зачастую программа из двух строк на awk может сделать то же, что и программа на две страницы на таких языках как C или Фортран. В качестве примера рассмотрим следующую задачу. Пусть имеется множество записей, состоящих из двух полей, первое из которых является ключом, а второе содержит число. Требуется каждую группу записей с одним и тем же ключевым значением заменить одной записью с тем же ключом и с числом, равным сумме чисел во всех записях группы. Таким образом, в результирующем наборе записей уже не будет совпадающих значений ключа. Если предположить, что исходный набор записей отсортирован по ключевому полю, то алгоритм решения задачи может выглядеть, например, так:

Прочитать первую запись в рабочую область.

Читать записи, пока не встретится признак конца файла (EOF); при этом:

Если ключ текущей записи совпадает с ключом записи в рабочей области, прибавить к числу в рабочей области число из текущей записи. В противном случае добавить запись из рабочей области к результату и поместить в рабочую область текущую запись.

Если достигнут конец файла, добавить к результату последнюю запись из рабочей области.

Программа на awk, выполняющая те же действия, может быть, например, такой:

{ qty[$1] += $2 }

END { for (key in qty) print key, qty[key] }

Отметим, что в отличие от описанного выше алгоритма, для этой программы не требуется, чтобы входной файл был отсортирован.

6.2.2 lex(1)

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

6.2.3 yacc(1)

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

6.2.4 m4(1)

m4(1) - это макропроцессор, который можно использовать как препроцессор для языка ассемблера и C.

6.2.5 bc(1) и dc(1)

bc(1) позволяет использовать терминал как программируемый калькулятор. С помощью bc можно выполнить арифметические вычисления, специфицированные в файле или поступающие со стандартного ввода. В действительности bc является препроцессором к dc(1). Можно пользоваться непосредственно dc, но это трудно, поскольку он работает с обратной польской записью.

6.2.6. curses(3X)

Хотя в действительности это библиотека C-функций, curses(3X) упоминается здесь, поскольку его функции можно рассматривать как подъязык для выполнения операций с экраном терминала. Если писать программы, предполагающие организацию экранного интерфейса с пользователем, будет полезно знать возможности этого пакета.

Так почему, имея такой выбор средств программирования, лучше отдать предпочтение языку С++?

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

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

Название «C++» происходит от названия языка C, в котором унарный оператор ++ обозначает инкремент переменной.

Являясь одним из самых популярных языков программирования, C++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Borland C++ Builder и другие.

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

В книге «Дизайн и эволюция C++» Бьёрн Страуструп описывает принципы, которых он придерживался при проектировании C++. Эти принципы объясняют, почему C++ именно такой, какой он есть. Некоторые из них:

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

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

  • Дать программисту свободу выбора, даже если это даст ему возможность выбирать неправильно.

  • Максимально сохранить совместимость с C, тем самым делая возможным лёгкий переход от программирования на C.

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

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

  • «Не платить за то, что не используется» — никакое языковое средство не должно приводить к снижению производительности программ, не использующих его.

  • Не требовать слишком усложнённой среды программирования.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]