Файл: Современные языки программирования (История развития).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 14.05.2023

Просмотров: 222

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Достоинства и недостатки языка

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

Достоинства

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

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

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

Имеется возможность работы на низком уровне с памятью, адресами, портами.

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

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

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

Недостатки

- Отчасти недостатки C++ унаследованы от языка-предка — Си, — и вызваны изначально заданным требованием возможно большей совместимости с Си. Это такие недостатки, как:

- Синтаксис, провоцирующий ошибки:

- Препроцессор, унаследованный от С, очень примитивен.

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

8. Objective-C

Язык является надмножеством языка C (любой C код компилируется Objective-C компилятором). В язык добавлены: поддержка объектно-ориентированного программирования в стиле Smalltalk (посылка сообщения вместо вызова метода), строки, логический тип (BOOL, значения YES или NO), и др.


Язык отличается от C++ большей гибкостью и количеством метаинформации. При каждом вызове метода Objective-C runtime просматривает таблицу виртуальных методов в поисках нужного селектора. Если метод не найден, вызывается универсальный обработчик. У обычных объектов этот обработчик сигнализирует об ошибке (например, выбросом исключения). А у прокси–объектов этот обработчик конструирует удалённый вызов. Сделать прокси в Objective C относительно просто. Метаинформация об объектах содержит сведения о методах и типах аргументов. Достаточно сведений, чтобы прокси объект мог корректно интерпретировать содержимое стека и сериализовать вызов.

На низком уровне вызов метода выглядит как вызов objc_sendmsg(object, selector, arguments). Селектор — это строка, состоящая из идентификаторов, разделённых двоеточиями. Например, если вызов имеет вид:

[mycalendar ordinalityOfUnit:myunit inUnit:myunit2 forDate:mydate]

…то селектор этого вызова “ordinalityOfUnit:inUnit:forDate:”. Непосредственно в objc_sendmsg передаётся не строка, а 32-битное число. Каждая динамическая библиотека и сама программа при инициализации регистрируют все используемые селекторы, устанавливая соответствие между строками и числами.

arguments — это varargs языка C.

Такой способ вызова позволяет частично бороться с проблемой fragile base class. С одной стороны, API системы подлинно объектно–ориентированное. Например, любая Cocoa-программа содержит наследников NSController, который реализован в системной инфраструктуре. С другой стороны, можно относительно легко добавлять новые API к уже существующим классам, являющимися базовыми для пользовательских программ. Именно так Apple и вводит новые API. Пользовательские программы, будь то Camino или Roxio Toast Titanium, не требуют при этом никакой перекомпиляции. Неполнота этого подхода заключается в том, что можно добавлять новые методы, но нельзя добавлять новые поля. Чтобы бороться с этим ограничением, либо с самого начала резервируется достаточно места на будущее, либо создаётся поле типа id, содержащее указатель на внутреннюю реализацию.

По аналогии с интерфейсами в Java, в Objective C есть протоколы. Протокол определяет набор селекторов, которые должен поддерживать объект, реализующий протокол.

В языке определён специальный тип id. id отличается от void только тем, что компилятор позволяет вызывать методы id, но не позволяет делать это для void. Во время выполнения любой указатель на объект не отличим от id. Вся разница во время компиляции. Во время компиляции компилятор проверяет поддержку селектора у класса объекта. Например, если переменная имеет тип NSController*, компилятор сделает предупреждение при попытке вызвать неизвестный селектор. Предупреждение сделает, но скомпилировать всё же позволит. Это может быть полезно, если объект являет потомком NSController или вообще не является NSController, что вполне возможно. Поскольку работа со всеми объектами происходит через указатели, а приведение типов для объектов влияет только на восприятие объекта компилятором (никаких runtime проверок), становится возможным использовать утиную типизацию. Используя функции библиотеки Objective C (начинаются на objc_), в принципе, можно выяснить подлинную природу объекта, но компилятор автоматически такие проверки не создаёт.


Для создания объекта в Objective-C необходимо вызвать метод класса (похожая схема используется в Ruby). Это делает использование таких паттернов, как абстрактная фабрика или синглтон (одиночка), тривиальными.

Другие особенности:

Для строковых литералов используется запись вида @”строка”. Это создаёт строку типа NSString, а не char*, как в C.

Вместо директивы #include для заголовочных файлов Objective-C рекомендуется использовать директиву #import, которая гарантированно подключает заголовочный файл только один раз.

Несколько изменена схема поиска файла заголовка с учётом каркасов (framework). Каркас — это папка, имеющая расширение .framework. Внутри каркаса могут подпапки (или символические ссылки на них) Headers, Resources, Frameworks. Препроцессор при обработке #import <Cocoa/Cocoa.h> находит файл Cocoa.framework/Headers/Cocoa.h Препроцессор без поддержки каркасов не сможет найти этот файл.

9. R

R — язык программирования для статистической обработки данных и работы с графикой, а также свободная программная среда вычислений с открытым исходным кодом в рамках проекта GNU. Язык создавался как аналогичный языку S, разработанному в Bell Labs, и является его альтернативной реализацией, хотя между языками есть существенные отличия, но в большинстве своём код на языке S работает в среде R. Изначально R был разработан сотрудниками статистического факультета Оклендского университета Россом Айхэкой (англ. Ross Ihaka) и Робертом Джентлменом (англ. Robert Gentleman) (первая буква их имён — R); язык и среда поддерживаются и развиваются организацией R Foundation[4].

R широко используется как статистическое программное обеспечение для анализа данных и фактически стал стандартом для статистических программ[5].

R доступен под лицензией GNU GPL. Распространяется в виде исходных кодов, а также откомпилированных приложений под ряд операционных систем: FreeBSD, Solaris[6] и другие дистрибутивы Unix и Linux, Microsoft Windows, Mac OS X.

В R используется интерфейс командной строки, хотя доступны и несколько графических интерфейсов пользователя, например пакет R Commander, RKWard, RStudio, Weka, Rapid Miner, KNIME, а также средства интеграции в офисные пакеты.

В 2010 году R вошёл в список победителей конкурса журнала Infoworld[en] в номинации на лучшее открытое программное обеспечение для разработки приложений[7].

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


Ещё одной особенностью R являются графические возможности, заключающиеся в возможности создания качественной графики, которая может включать математические символы.

Для удобства работы с R разработан ряд графических интерфейсов, в том числе RStudio, JGR, RKWard, SciViews-R, Statistical Lab, R Commander, Rattle.

Кроме того, в ряде текстовых и кодовых редакторов предусмотренные специальные режимы для работы с R, в частности в ConTEXT, Emacs (Emacs Speaks Statistics), jEdit, Kate, Syn, TextMate, Tinn-R, Vim, Bluefish, WinEdt (с пакетом RWinEdt), Gedit (с пакетом rgedit/gedit-r-plugin). Для среды разработки Eclipse существует специализированный R-плагин; доступ к функциям и среде выполнения R возможен из Python с использованием пакета RPy; работать с R можно из эконометрического пакета Gretl.

10. Swift

Apple представила Swift 2 на конференции WWDC 2015 в качестве обновления к своему относительно новому языку программирования. Swift 2, как и Swift, используется для написания и создания мобильных приложений для устройств с операционными системами Mac OS X и iOS. Apple разработала Swift с целью добиться максимально быстрой и эффективной производительности от устройств, а Swift 2 расширяет и без того впечатляющий список функциональных особенностей этого языка программирования.
Главная новость для разработчиков, пожалуй, заключается в том, что теперь у Swift открытый исходный код. По словам представителей Apple, такой шаг призван стать тем драйвером, который послужит к развитию всей софтверной индустрии.

В Swift 2 представлен ряд новых особенностей, которые определенно оценят разработчики:

Модель управления ошибками. В Swift появился новый механизм обнаружения и управления ошибками, позволяющий коду устранять несложные ошибки («file-not-found» или сетевые тайм-ауты).

Улучшения синтаксиса. Синтаксические особенности Swift дают возможность писать более сложные коды. Apple заявляет, что это поспособствует целостности языка.

Доступность. Применение новейших SDK открывает доступ к новым функциям и информации об изменениях платформы. Теперь возможно собрать материал для старой ОС и компилятор покажет ошибку, если используемый API слишком новый.

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

Apple также обновила Objective-C (язык, предшествовавший Swift), что должно упростить парную работу Objective-C и Swift. Новые особенности Objective-C: Generics, аннотации обнуляемости (nullability annotation) и новый тип объекта, известный как «Kind-Of». Все это улучшит взаимодействие Swift и Objective-C.
Обновленный Swift призван в конечном итоге заменить Apple Objective-C, который разрабатывался в 80-х годах прошлого века и появился на Mac в 1996-м. Спустя 17 лет на конференции WWDC 2014 Apple представила новый язык программирования — Swift, что крайне важно для девелоперского сообщества Apple. Язык этот был разработан с целью облегчить программирование для Mac OS X и iOS.


Swift — язык программирования для Cocoa и Cocoa Touch (программных фреймворков в Mac OS X и iOS, соответственно). Программы в Swift создаются с использованием Xcode 6, новейшей версии IDE (интегрированной среды разработки) Apple.
Swift предназначался для совместного использования с Objective-C. Коды, написанные языком Swift, могут быть добавлены в приложения без необходимости замены старого кода Objective-C.

Представители Apple очертили ряд преимуществ Swift перед Objective-C.

Синтаксис

Apple Swift разработан с целью упростить чтение и написание кодов. Синтаксис Swift (форматирование) не требует наличия точек с запятой в конце каждой строки; функции языка более просты для понимания. К примеру, обычная команда Print, с которой большинство людей знакомы по Basic, это NSLOG в Objective-C (NS — отсылка к NextStep, компании, которую основал Стив Джобс, уйдя из Apple, (т.е. это показывает, сколько былого наследия Apple сейчас пытается заменить), в Swift такая команда выглядит как println. Для написания кодов требуется меньше символов, и, в общем и целом, Swift намного эффективнее Objective-C.
Одно из основных преимуществ Swift состоит в том, что разработчикам не требуется изменять значение памяти. В Swift переменные величины задаются перед использованием, массивы (arrays) и целые числа (integers) проверяются, управление памятью осуществляется автоматически, что добавляет надежности приложениям. Другими словами, с языком Swift все намного проще.

ЗАКЛЮЧЕНИЕ

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

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

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

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