Что относится к инструментальным программам
Инструментальное программное обеспечение
Инструмента́льное програ́ммное обеспе́чение — программное обеспечение, предназначенное для использования в ходе проектирования, разработки и сопровождения программ, в отличие от прикладного и системного программного обеспечения.
Инструментальный уровень (трансляторы и компиляторы языков программирования, системы программирования), обеспечивают создание новых программ для персонального компьютера.
Языки программирования подразделяются на низкоуровневые и высокоуровневые языки.
Такого рода оторванность высокоуровневых языков от аппаратной реализации компьютера помимо множества плюсов имеет и минусы. В частности, она не позволяет создавать простые и точные инструкции к используемому оборудованию. Программы написанные на языках высокого уровня, проще для понимания программистом, но гораздо менее эффективны, чем их аналоги, создаваемые при помощи низкоуровневых языков. Одним из следствий этого стало добавление поддержки того или иного языка низкого уровня (язык ассемблера) в большинство современных профессиональных высокоуровневых языков программирования.
Наиболее распространёнными языками подобного типа являются C++, Visual Basic, Java, Python, Ruby, Perl, Delphi, PHP.
Языки программирования также можно разделить на компилируемые и интерпретируемые.
Программа на компилируемом языке при помощи специальной программы компилятора преобразуется (компилируется) в набор инструкций для данного типа процессора (машинный код) и далее записывается в исполняемый файл, который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит программу с языка высокого уровня на низкоуровневый язык, понятный процессору.
Кратко говоря, компилятор переводит программу на машинный язык сразу и целиком, создавая при этом отдельную программу, а интерпретатор переводит на машинный язык прямо во время исполнения программы.
Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).
Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык. Вместе с тем при каждом изменении текста программы требуется ее перекомпиляция, что создает трудности при разработке. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которую был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа, требуется новая компиляция.
Интерпретируемые языки обладают некоторыми специфическими дополнительными возможностями, кроме того, программы на них можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий. Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора.
Классы языков программирования.Условно, языки программирования можно разделить на следующие классы (рис. 2.).
В языках функционального программирования основными конструктивными элементами являются функции. Тексты программ на функциональных языках программирования описывают «как решить задачу», но не предписывают последовательность действий для решения.
В качестве основных свойств функциональных языков программирования обычно рассматриваются следующие:
· краткость и простота;
· чистота (отсутствие побочных эффектов);
· отложенные (ленивые) вычисления.
Рис. 2. Классы языков программирования
Примеры языков функционального программирования: Лисп, Haskell, Clean, ML и др.
Примеры процедурных языков программирования: Ада, Бейсик, Си, Си++, Паскаль, Visual Basic, Dilphi и др.
Наследование. Создание нового класса объектов путём добавления новых элементов (методов). В данный момент ОО языки позволяют выполнять множественное наследование, т.е. объединять в одном классе возможности нескольких других классов.
Инкапсуляция. Сокрытие данных, которое (при грамотной реализации) позволяет вносить изменения в части программы безболезненно для других её частей. Что существенно упрощает сопровождение и модернизацию программного обеспечения.
Полиморфизм. При наследовании некоторые части (методы) родительского класса заменяются новыми, реализующими специфические для данного потомка действия. Таким образом, интерфейс классов остаётся прежним, а реализация методов с одинаковым названием и набором параметров различается.
Типизация. Позволяет устранить многие ошибки на момент компиляции, операции проводятся только над объектами подходящего типа.
Примеры ОО-языков программирования: Си++, Delphi (Object Pascal), С#, Java и др.
Логическое программирование— парадигма программирования, а также раздел дискретной математики изучающий методы и возможности этой парадигмы, основанная на выводе новых фактов из данных фактов согласно заданным логическим правилам. Логическое программирование основано на теории математической логики. Самым известным языком логического программирования является Пролог, являющийся по своей сути универсальной машиной вывода, работающей в предположении замкнутости мира фактов.
Примеры скриптовых языков программирования: VBA (Visual Basic Application), AutoLISP, 3DMAX Script, JCL, JavaScript и др.
Вопросы для самопроверки:
1. Программное обеспечение.
3. Системный уровень программного обеспечения.
4. Служебный уровень программного обеспечения.
5. Прикладной уровень программного обеспечения.
6. Что называется драйверами устройств?
7. Что называется утилитами?
8. Дайте определение языка программирования.
9. Что такое интерпретатор?
10. Что такое компилятор?
11. Приведите примеры языков программирования низкого и высокого уровней, в чём их отличие?
12. Какие классы языков программирования можно выделить? Приведите примеры для каждого класса.
13. Назовите основные свойства функциональных языков программирования
14. Назовите какие методы используются в современных объектно-ориентированных языках программирования.
Инструментальные программные системы
· текстовые экранные редакторы для создания и редактирования текстов программ;
· средства компоновки программ;
· библиотеки стандартных программ и функций;
Данная совокупность программ, объединенных в общую систему, позволяет создавать и редактировать программы, транслировать их, компоновать, отлаживать и запускать на выполнение, не выходя из среды. Управление вычислительным процессом в интегрированной среде осуществляется с помощью клавиатуры и мышки посредством системы меню и диалоговых окон.
Трансляторы бывают двух типов: компиляторы и интерпретаторы, они существенно различаются с точки зрения перевода исходной программы.
Стадии разработки программного обеспечения. Основные версии программ в процессе своей разработки обычно проходят следующие стадии:
Данный набор тестов позволит читателю проконтролировать свои знания по изложенному в этой главе материалу по программному обеспечению персональных компьютеров.
a. основные устройства компьютера;
b. программы на языке низкого уровня;
c. комплекс системных и служебных программ;
d. совокупность программ, используемых для операций с документами.
a. логическая единица информации, которая состоит из переменной последовательности байт и имеет имя и расширение;
b. специальная программа с именем, типом и значением;
c. индексированные переменные;
d. множество правил и фактов.
3.В пакет Microsoft Office не входит программа:
a. Microsoft Power Point;
b. Microsoft Outlook;
c. Microsoft Train Simulator;
a. объем которого изменяется при работе компьютера;
b. в котором хранятся все программы операционной системы;
c. в котором находятся файлы, созданные пользователем;
d. с которым работает пользователь в данный момент.
5.Программы сопряжения устройств компьютера называются:
6.OC Windows поддерживает длинные имена файлов, которым считается:
a. любое имя файла, записанное латинскими буквами, не превышающее 255 символов;
b. любое имя файла без ограничения на количество символов в имени файла;
c. любое имя файла, не превышающее 255 символов.
7.Папка, в которую временно попадают удаленные обьекты, называются:
a. оперативная папка;
8.Перевод программ с языка высокого уровня в машинные коды осуществляет:
9.Какое расширение имеют исполняемые файлы:
10. Какое полное имя файла, если путь к файлу C:\DOC\PROBA.TXT:
11.Технология «Plug and Play»:
a. позволяет синхронизировать работу компьютера и устройства;
b. позволяет новым устройствам автоматически настраиваться под конфигурацию данного компьютера;
c. используется вместо внешних устройств.
12. Технология OLE позволяет:
a. внедрять и связывать объекты;
b. редактировать рисунки;
c. форматировать абзацы;
d. набирать формулы в тексте.
13.Системный диск необходим, чтобы:
a. загружать операционную систему;
b. архивировать файлы;
c. хранить важные файлы;
d. лечить компьютер от вирусов.
14. Где хранится BIOS:
a. в оперативно-запоминающем устройстве (ОЗУ);
b. в постоянно-запоминающем устройстве (ПЗУ);
d. на жестком диске.
15. Текущий диск – это:
a. диск, с которым пользователь работает в данный момент времени;
d. диск, в котором хранится операционная система.
16. Какое имя соответствует жесткому диску:
a. копия файла, папки или программы;
c. перемещенный файл, папка или программа;
d. ссылка на файл или папку.
19. В состав ОС не входит:
20. К функциональным возможностям ОС Windows не относится:
a. поддержка мультимедиа;
b. технология «Plug and Play»;
c. поддержка имен файлов только формата 8.0;
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
Инструментальное программное обеспечение
Прикладное программное обеспечение.
Прикладное ПО служит для решения задач или классов задач в определённой области применения ПК. К нему относят пакеты прикладных программ (ППП или приложения) и оригинальные программы пользователей. ППП делятся на:
· ППП общего назначения предназначены для широкого круга пользователей в различных проблемных областях. К ним относят текстовые, графические и табличные процессоры, трёхмерные аниматоры, СУБД, интегрированные ППП, САПР, оболочки экспертных систем, редакторы HTML (Web-редакторы), обозреватели (для просмотра электронных документов на локальном ПК или в Интернет), музыкальные редакторы, настольные издательские системы и др.
· Проблемно- ориентированные ППП для решения задач узкого класса (банковские, бухгалтерские ППП, ППП финансового менеджмента, справочные системы и др.).
· Методо- ориентированные ППП, в основе которых лежат, прежде всего, метод решения задачи: математического программирования (линейного, динамического и др.), сетевого планирования и управления, теории массового обслуживания, математической статистики и др.
Инструментальные программные средства (системы программирования) используются для разработки различных программ, включая системное программное обеспечение.
Инструментальные программные средства (системы программирования)- это интегрированные инструментальные средства, обеспечивающие все основные функции по разработке программ: создание и редактирование исходного модуля, трансляция, создание загрузочного модуля и их выполнения, отладка, тестирование, сохранение и документирование и т.д. Современные системы программирования поддерживают все технологические этапы проектирования, программирования, тестирования и отладки программ, предоставляя программистам мощные и удобные средства для разработки программ.
А состав инструментальных средств входят (рисунок 5.2):
· редакторы программного кода;
· трансляторы с различных языков программирования, осуществляющие перевод текстов программ с входного языка программирования на машинный язык;
· редакторы связей, объединяющие отдельные части программ в единое целое, создающие загрузочный модуль;
· отладчики, позволяющие обнаруживать и устранять ошибки в программах;
· интегрированные среды разработчиков, объединяющие перечисленные выше компоненты е единую систему, удобную для разработчиков программ;
· системы быстрой разработки программных приложений (RAD).
Рисунок 5.2 Основные этапы обработки программ в ПК
Исходный модуль- текст алгоритма задачи, описанный средствами языка программирования. Исходный модуль переводится в последовательность команд ПК с помощью транслятора (компилятора или интерпретатора). Компилятор транслирует исходный модуль в машинный код, называемый объектным модулем, за один непрерывный процесс. А интерпретатор выполняет исходный модуль в режиме «оператор- за- оператором».
Объектный модуль выполняться не может т.к. может содержать неразрешенные ссылки на другие модули или программы. Поэтому объектный модуль обрабатывается редактором связей. Редактор связей разрешает все внешние ссылки и создает загрузочный модуль.
Загрузчик определяет для загрузочного модуля абсолютные адреса в оперативной памяти. После этого программа может выполняться.
Иногда функции редактора связей и загрузчика выполняет одна программа- редактирующий загрузчик (Turbo Pascal).
Для отладки программ используются отладочные средства, трассировщики, тестирующие и др. средства как в системе программирования, так и автономно.
Реализация любого языка может быть как компиляторного, так и интерпретаторного типа. Основное преимущество компиляторных языков- скорость выполнения программы. Но интерпретируемые языки более предпочтительны для программ диалогового типа, отладка проходит без выхода из интерпретатора, что сокращает время и упрощает отладку.
Таблица 5.1 Поколения языков программирования
Поколения ПС | Языки и системы программирования | Характерные черты ПС |
1-е поколение | Машинные | Машинно-зависимые, быстрые, сложны для освоения, требуют хорошего знания архитектуры ЭВМ |
2-е поколение | Ассемблера, макроассемблеры | В отличии от предыдущих более удобны для использования, быстрые |
3-е поколение | Языки программирования высокого уров-ня (Fortran, Algol, Cobol, Pascal, C, PL/1, Forth, LOGO, APL, Basic, Modula и др.) | Во многом мобильные, более человеко-ориентированные, проще в освоении, более медленные |
4-е поколение | Непроцедурные языки, генераторы отчетов, объектно-ориентированные языки, языки запросов, параллельные языки | Ориентированы на непрофессионала, на ЭВМ с параллельной архитектурой |
5-е поколение | Языки искусственного интеллекта, экспертных систем и баз знаний, естественные языки. | Повышение интеллектуального уровня ЭВМ и интерфейса с ними. |
Языки 1- го уровня- машинные- набор машинных команд в бинарном коде. Языки 2- го уровня- ассемблеры- вместо бинарных форматов машинных команд используют их мнемоническое символьное обозначение. Программы, составленные на языках ассемблера, затруднительны в чтении, трудоемки при отладке, требуют больших усилий для переноса на другие типы ЭВМ. Сейчас используются при создании высокоэффективных программ (минимального по времени и максимального по быстродействию), хотя ограниченно, т.к. ИПО располагает весьма эффективными ЯВУ, да и требования к оптимизации основных ресурсов ЭВМ становятся не столь жесткими.
Языки 3- го поколения носят явно выраженный процедурный характер, т.е. программы определяют не только что нужно сделать, но и как это сделать. Сейчас существуют свыше 2000 различных ЯВУ. Они составляют основу ИПО.
Языки 4- го поколения носят явно непроцедурный характер. Программы на них описывают только что, но не как надо сделать. Типичные непроцедурные языки:
1. Языки параллельного программирования ориентированы на создание СПО и ППО для ВС параллельной архитектуры (многомашинных и многопроцессорных ВС).
2. Объектно-ориентированные языки: Delphy, C++, SmallTalk, Objective C и др.
3. Языки для задач искусственного интеллекта: Prolog, Langin. Т.к. непроцедурные языки имеют минимальное количество синтаксических правил, они значительно более пригодны для использования недостаточно квалифицированными пользователями.
4. Языки запросов, позволяющие получить информацию из БД на основе запросов (SQL, QBE, Intellect, Ingress, Oracle). Генераторы отчетов по требованию пользователя выводят отчеты на основе данных, находящихся в БД (GIS, Mark IV). Языки запросов и генераторы отчетов позволяют приобщить к КТ широкие круги пользователей из сфер бизнеса, банков и т.д.
Естественные языки определяют следующий шаг развития языков программирования. Пользователь любого уровня освобождается от необходимости освоения каких- либо словарей, грамматики и синтаксиса.
Visual Basic широко распространен и интегрирован в приложения MS Office: Access, Excel, Word.
Язык гипертекстовой разметки HTML (Hyper Text Markup Language) разработан как компонент технологии WWW. Он позволяет описывать структуру электронного документа с полиграфическим уровнем оформления. Такой документ может содержать иллюстрации, аудио- и видеофрагменты.
Язык Perl предназначен для работы с Web-страницами.
Язык моделирования виртуальной реальности (Virtual Reality Modeling Language- VRML)- для описания сред, имитирующих 3-х мерное пространство, для создания Web-страниц. Является расширением языка HTML (для плоских изображений).
Язык Java- для создания программ, работающих в компьютерных сетях, например, для размещения динамической рекламы в компьютерных сетях (анимация, телетайпные ленты). Java- приложения «оживляют» статические картинки Web-страниц.
Контрольные вопросы:
1. Понятие и состав ПО ПК?
3. Назначение ИПО? Состав ИПО?
4. Понятие, состав и назначение служебных программ?
5. Поколения систем программирования?
6. Состав процедурных и непроцедурных языков программирования?
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
Инструментальное ПО
4.1. Языки программирования
История развития языков программирования начинается с машинных языков. Программы для первых компьютеров разрабатывались в машинных кодах, а основными носителями информации были перфокарты и перфоленты. Программисты обязаны были знать архитектуру машины досконально. Программы были достаточно простыми, что обусловливалось, во-первых, весьма ограниченными возможностями этих машин, вовторых, большой сложностью разработки и, главное, отладки программ непосредственно на машинном языке.
Вместе с тем такой способ разработки обеспечивал программисту просто неограниченные возможности работы с компьютером. Становилось возможным использование таких хитроумных алгоритмов и способов организации программ, которые не используют (а некоторые и не знают) многие современные программисты. Например, могла применяться такая возможность, как самомодифицирующийся код. Знание двоичного представления команд позволяло иногда не хранить некоторые данные отдельно, а встраивать их в код как команды. И это далеко не полный список приемов, владение хотя бы одним из которых сейчас сразу же продвигает программиста до уровня экстра-класса [15].
Известный пример из мира современных компьютеров – кодирование инструкции mov в процессорах Intel. Существует несколько совершенно поразному кодируемых вариантов команды. Выбор того или иного варианта зависит от операндов, хотя суть выполняемой операции неизменна: поместить содержимое (или значение ) второго операнда в первый. Появилась также возможность использования макросов и меток, что также упрощало создание, модификацию и отладку программ. Появилось даже некое подобие переносимости – существовала возможность разработки целого семейства машин со сходной системой команд и некоего общего ассемблера для них, при этом не было нужды обеспечивать двоичную совместимость.
Вместе с тем, переход к новому языку таил в себе и некоторые отрицательные (на первый взгляд) стороны. Становилось почти невозможным использование всяческих хитроумных приемов, подобных упомянутым выше. Кроме того, впервые в истории развития программирования появились два представления программы: в исходных текстах и в откомпилированном виде. Сначала, пока ассемблеры только транслировали мнемонические коды в машинные, одно легко переводилось в другое и обратно, но затем, по мере появления таких возможностей, как метки и макросы, дизассемблирование (перевод из машинного кода в ассемблер ) становилось все более и более трудным делом [21].
Язык Фортран использовался (и используется сейчас) для научных вычислений. Он страдает от отсутствия многих привычных языковых конструкций и атрибутов, компилятор практически никак не проверяет синтаксически правильную программу с точки зрения семантической корректности (соответствие типов и др.). В нем нет поддержки современных способов структурирования кода и данных. Это осознавали и сами разработчики. По признанию самого Бэкуса, перед ними стояла задача скорее разработки компилятора, чем языка. Понимание самостоятельного значения языков программирования пришло позже.
Появление Фортрана было встречено еще большей критикой, чем внедрение ассемблера. Программистов пугало снижение эффективности программ за счет использования промежуточного звена в виде компилятора. И эти опасения имели под собой основания: действительно, хороший программист, скорее всего, при решении какой-либо небольшой задачи вручную напишет код, работающий быстрее, чем код, полученный как результат компиляции. Через некоторое время пришло понимание того, что реализация больших проектов невозможна без применения языков высокого уровня. Мощность вычислительных машин росла, и с тем падением эффективности, которое раньше считалось угрожающим, стало возможным смириться. Преимущества же языков высокого уровня стали настолько очевидными, что побудили разработчиков к созданию новых языков, все более и более совершенных.
К середине 60-х годов прошлого века в США резко возросла потребность в обучении программированию не только специалистов в области вычислительной техники, но и широкого круга пользователей. Это было связано с резким увеличением количества компьютеров в бизнесе. Два профессора Дартмутского колледжа – Томас Курт и Джон Кемени – для обучения студентов программированию создали язык Бейсик ( BASIC ). Свое название язык получил по первым буквам английских слов » Beginner ‘s All-purpose Symbolic Instruction Code» – универсальный код символических инструкций для начинающих.
Создание каждого из вышеупомянутых языков (за исключением, может быть, Algol ‘а) было вызвано некоторыми практическими требованиями. Эти языки послужили фундаментом для более поздних разработок. Все они представляют одну и ту же парадигму программирования. Следующие языки пошли существенно дальше в своем развитии, в сторону более глубокого абстрагирования.
В 1986 году Бьярн Страуструп создал первую версию языка C++, добавив в язык C объектно-ориентированные черты, взятые из Simula (см. ниже), и исправив некоторые ошибки и неудачные решения языка. C++ продолжает совершенствоваться и в настоящее время, так в 1998 году вышла новая (третья) версия стандарта, содержащая в себе некоторые довольно существенные изменения. Язык стал основой для разработки современных больших и сложных проектов. У него имеются, однако же, и слабые стороны, вытекающие из требований эффективности.
Все вышеперечисленные языки являются языками общего назначения в том смысле, что они не ориентированы и не оптимизированы под использование каких-либо специфических структур данных или на применение в каких-либо специфических областях. Было разработано большое количество языков, ориентированных на достаточно специфические применения. Ниже приведен краткий обзор таких языков.
В 1969 году был создан язык SETL – язык для описания операций над множествами. Основной структурой данных в языке является множество, а операции аналогичны математическим операциям над множествами. Язык полезен при написании программ, имеющих дело со сложными абстрактными объектами.
Язык JavaScript был создан в компании Netscape Communications в качестве языка для описания сложного поведения веб-страниц. Первоначально язык назывался LiveScript, причиной смены названия послужили маркетинговые соображения. Он интерпретируется браузером во время отображения веб-страницы, по синтаксису похож на Java и (отдаленно) на C/C++. Язык имеет возможность использовать встроенную в браузер объектную функциональность, однако подлинно объектно-ориентированным языком не является.
Другой скриптовый язык VBScript был создан в корпорации Microsoft во многом в качестве альтернативы JavaScript. Имеет подобную область применения, синтаксически похож на язык Visual Basic (является усеченной версией последнего); так же, как и JacaScript, исполняется браузером при отображении веб-страниц и имеет ту же степень объектной ориентированности.
Язык Perl, нашедший применение для динамической генерации веб-страниц на веб-серверах, создавался в помощь системному администратору операционной системы Unix для обработки различного рода текстов и выделения нужной информации. Развился до мощного средства работы с текстами. Является интерпретируемым языком и реализован практически на всех существующих платформах. Интерпретируемый объектно-ориентированный язык программирования Python по структуре и области применения близок к Perl, однако менее распространен и более строг и логичен. Имеются реализации для большинства существующих платформ.
Популярность объектно-ориентированному программированию принес язык Smalltalk, созданный в 1972 году. Язык предназначался для проектирования сложных графических интерфейсов и был первым понастоящему объектно-ориентированным языком. В нем классы и объекты – это единственные конструкции программирования. Недостатком Smalltalk являются большие требования к памяти и низкая производительность полученных программ. Причина – в не очень удачной реализацией объектно-ориентированных особенностей. Популярность языков C++ и Ada 95 связана именно с тем, что объектная ориентированность реализована без существенного снижения производительности.
Существует еще язык с очень хорошей реализацией объектной ориентированности, не являющийся надстройкой ни над каким другим языком. Это язык Eiffel (1986 г.). Являясь чистым языком объектно-ориентированного программирования, он, кроме того, повышает надежность программы путем использования «контрольных утверждений».
Большинство компьютерных архитектур и языков программирования ориентированы на последовательное выполнение операторов программы. В настоящее время существуют программно-аппаратные комплексы, позволяющие организовать параллельное выполнение различных частей одного и того же вычислительного процесса. Для программирования таких систем необходима специальная поддержка со стороны средств программирования, в частности, языков программирования. Некоторые языки общего назначения содержат в себе элементы поддержки параллелизма, однако программирование истинно параллельных систем требует подчас специальных приемов [15].
Язык Оccam был создан в 1982 году и предназначен для программирования транспьютеров – многопроцессорных систем распределенной обработки данных. Он описывает взаимодействие параллельных процессов в виде каналов – способов передачи информации от одного процесса к другому. Отметим особенность синтаксиса языка Occam – в нем последовательный и параллельный порядки выполнение операторов равноправны, и их необходимо явно указывать ключевыми словами PAR и SEQ.
В 1985 году была предложена модель параллельных вычислений Linda. Основной ее задачей является организация взаимодействия между параллельно выполняющимися процессами. Это достигается за счет использования глобальной кортежной области ( tuple space ). Процесс может поместить туда кортеж с данными (то есть совокупность нескольких, возможно, разнородных данных), а другой процесс может ожидать появления в кортежной области некоторого кортежа и, после его появления, прочитать кортеж с возможным последующим его удалением.
Из языков с энергичной семантикой упомянем ML и два его современных диалекта – Standard ML ( SML ) и CaML. Последний имеет объектно-ориентированного потомка – Objective CaML (O’CaML). Среди языков с ленивой семантикой наиболее распространены два: Haskell и его более простой диалект Clean. Интересен язык функционального программирования F#. Он является языком мультипарадигменного программирования. На нем можно писать функциональный, императивный и объектно-ориентированный код. Это позволяет быть более прагматичным, вместо того чтобы пытаться загнать любую задачу, стоящую перед разработчиком, в прокрустово ложе классов и интерфейсов. Язык F# включен в стандартный набор Visual Studio 2010, хотя присутствует и сейчас, в виде плагина для VS2008.
Программы на языках логического программирования выражены как формулы математической логики, а компилятор пытается получить следствия из них. Родоначальником большинства языков логического программирования является язык Prolog (1971). У него есть ряд потомков – Parlog (1983, ориентирован на параллельные вычисления), Delta Prolog и др.
Технология программирования во многом определяется языком программирования, на котором пишутся программы. В языке могут быть заложены средства, влияющие на технологичность и архитектуру разрабатываемой системы (например, объектная ориентированность, модульность и т.п.). О распространенности языков можно судить по рейтингу, ежемесячно составляемому фирмой TIOBE [26].
Позиция | Изменения по сравнению с прошлым годом | Язык программирования | Рейтинг Март 2009 | Рейтинг октябрь 2005 |
---|---|---|---|---|
1 | 0 | Java | 19.9% | 21.9% |
2 | 0 | C | 15.9% | 18.8% |
3 | +2 | C++ | 10.4% | 11.8% |
4 | 0 | PHP | 9.5% | 9.7% |
5 | –2 | (Visual) Basic | 8.3% | 6.9% |
6 | +1 | Python | 5.2% | 2.9% |
7 | +1 | C# | 4.3% | 3.5% |
8 | +2 | JavaScript | 3.6% | 2.0% |
9 | –3 | Perl | 3.4% | 7.4% |
10 | –1 | Delphi | 2.7% | 1.5% |