Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Сравнительный анализ процедур для различных языков программирования

Содержание:

Введение

Язык программирования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.

Целью курсовой работы является изучение двух основных языков программирования и их сравнение на основе полученных ранее знаний.

1. Теоретическая часть

1.1. Определение языка программирования С++

Язык возник в начале 1980-х годов, когда сотрудник фирмы Bell Labs Бьёрн Страуструп придумал ряд усовершенствований к языку C под собственные нужды. Когда в конце 1970-х годов Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов), он обнаружил, что попытки применения существующих в то время языков моделирования оказываются неэффективными, а применение высокоэффективных машинных языков слишком сложно из-за их ограниченной выразительности. Так, язык Симула имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно, а язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения [1].

Вспомнив опыт своей диссертации, Страуструп решил дополнить язык C (преемник BCPL) возможностями, имеющимися в языке Симула. Язык C, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов), так и с точки зрения времени вычислений (благодаря быстродействию C). В первую очередь в C были добавлены классы (с инкапсуляцией), наследование классов, строгая проверка типов, inline-функции и аргументы по умолчанию. Ранние версии языка, первоначально именовавшегося «C with classes» («Си с классами»), стали доступны с 1980 года.

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

К 1983 году в язык были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Получившийся язык уже перестал быть просто дополненной версией классического C и был переименован из C с классами в «C++». Его первый коммерческий выпуск состоялся в октябре 1985 года.

До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. Функцию стандартных описаний языка выполняли написанные Страуструпом печатные работы по C++ (описание языка, справочное руководство и так далее). Лишь в 1998 году был ратифицирован международный стандарт языка C++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»; после принятия технических исправлений к стандарту в 2003 году — следующая версия этого стандарта — ISO/IEC 14882:2003[2].

1.2. Развитие и стандартизация языка

В 1985 году вышло первое издание «Языка программирования C++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта. В 1989 году состоялся выход C++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены. В 1990 году вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и булевский тип.

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

В 1998 году был опубликован стандарт языка ISO/IEC 14882:1998 (известный как C++98), разработанный комитетом по стандартизации C++ (ISO/IEC JTC1/SC22/WG21 working group). Стандарт C++ не описывает способы именования объектов, некоторые детали обработки исключений и другие возможности, связанные с деталями реализации, что делает несовместимым объектный код, созданный различными компиляторами. Однако для этого третьими лицами создано множество стандартов для конкретных архитектур и операционных систем.

В 2003 году был опубликован стандарт языка ISO/IEC 14882:2003, где были исправлены выявленные ошибки и недочёты предыдущей версии стандарта.

В 2005 году был выпущен отчёт Library Technical Report 1 (кратко называемый TR1). Не являясь официально частью стандарта, отчёт описывает расширения стандартной библиотеки, которые, как ожидалось авторами, должны быть включены в следующую версию языка C++. Степень поддержки TR1 улучшается почти во всех поддерживаемых компиляторах языка C++.

С 2009 года велась работа по обновлению предыдущего стандарта, предварительной версией нового стандарта сперва был C++09, а спустя год C++0x, сегодня — C++11, куда были включены дополнения в ядро языка и расширение стандартной библиотеки, в том числе большую часть TR1.

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

Никто не обладает правами на язык C++, он является свободным. Однако сам документ стандарта языка (за исключением черновиков) не доступен бесплатно. В рамках процесса стандартизации, ISO выпускает несколько видов изданий. В частности, технические доклады и технические характеристики публикуются, когда "видно будущее, но нет немедленной возможности соглашения для публикации международного стандарта." До 2011 года не было опубликовано три технических отчета по C++: TR 19768: 2007 (также известный как C++, Технический отчет 1) для расширений библиотеки в основном интегрирован в C++11, TR 29124: 2010 для специальных математических функций, и TR 24733: 2011 для десятичной арифметики с плавающей точкой. Техническая спецификация DTS 18822:. 2 014 (по файловой системой) была утверждена в начале 2015 года, и остальные технические характеристики находятся в стадии разработки и ожидают одобрения.

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

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

Высокая совместимость с языком Си : код на Си может быть с минимальными переделками скомпилирован компилятором C++. Внешнеязыковой интерфейс является прозрачным, так что библиотеки на Си могут вызываться из C++ без дополнительных затрат, и более того — при определённых ограничениях код на С++ может экспортироваться внешне не отличимо от кода на Си (конструкция extern "C")[3].

Как следствие предыдущего пункта — вычислительная производительность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Один из базовых принципов С++ — «не платишь за то, что не используешь» (см. Философия C++) — то есть ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования. Имеется возможность работы с памятью на низком уровне.

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

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

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

Имеется возможность управления константностью объектов (модификаторы const, mutable, volatile). Использование константных объектов повышает надёжность и служит подсказкой для оптимизации. Перегрузка функций-членов по признаку константности позволяет определять выбор метода в зависимости цели вызова (константный для чтения, неконстантный для изменения). Объявление mutable позволяет сохранять логическую константность при виде извне кода, использующего кэши и ленивые вычисления.

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

Возможность расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую. Например, библиотека Boost.Bind позволяет связывать аргументы функций. Используя шаблоны и множественное наследование, можно имитировать классы-примеси и комбинаторную параметризацию библиотек. Такой подход применён в библиотеке Loki, класс SmartPtr которой позволяет, управляя всего несколькими параметрами времени компиляции, сгенерировать около 300 видов «умных указателей» для управления ресурсами.

Возможность встраивания предметно-ориентированных языков программирования в основной код. Такой подход использует, например библиотека Boost.Spirit, позволяющая задавать EBNF-грамматику парсеров прямо в коде C++. Boost.Spirit реализует рекурсивно-нисходящий алгоритм, что накладывает соответствующие ограничения (такие как недопустимость левой рекурсии).

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

Недостатки и критика

Сторонники С++ позиционируют его как «универсально применимый» — вплоть до отождествления «применимости» с Тьюринг-полнотой (что является ошибкой) и одновременно с оптимальностью, то есть обоснованностью выбора его в качестве инструмента для данной конкретной задачи; при этом ни одной конкретной задачи не обозначается, а наоборот, делается утверждение, что С++ подходит для любой задачи (что теоретически невозможно. Однако С++ не отвечает многим требованиям качества программирования, не предъявляемым к Си, но важным для широкого спектра задач прикладного программирования. В частности, критики полагают, что:

Плохо продуманный синтаксис сужает спектр применимости языка (что, с учётом претензий на «универсальность», делает его крайне неудобным в некоторых задачах).

Унаследованные от Си низкоуровневые свойства существенно тормозят и затрудняют прикладную разработку.

Язык не содержит многих важных возможностей.

Язык содержит опасные возможности, существенно снижающие качество программ сразу по всем показателям.

Производительность труда программистов на языке оказывается неоправданно низка, а продукт труда — низкокачественным.

В то же время, критике подвергается и применимость С++ в низкоуровневой разработке в качестве «улучшенного Си».

Многие конкретные недостатки вытекают непосредственно из свойств семантики системы типов языка: она не отвечает требованиям полноты и ортогональности, при этом обладает избыточностью и предусматривает понятие «приведения типов» (как явно, так и неявно). В отношении типизации, С++ чаще всего противопоставляются либо типизируемые по Хиндли-Милнеру, либо динамически типизируемые языки. Начиная со стандарта C++0x, в языке появилась возможность автоматического выведения типов, из-за чего возникло заблуждение, что отныне «С++ поддерживает вывод типов по Хиндли-Милнеру». Однако, системе типов С++ противопоставляется не сам механизм выведения типов, а полиморфная семантика системы типов Хиндли-Милнера[4], предусматривающая в том числе и механизм выведения, но не как главное преимущество. Существуют примеры развития Си по пути типизации Хиндли-Милнера.

Критика C++ с позиций только ООП (без сравнения методологий проектирования) с описанием вреда от влияния C++ на другие языки приведена в работе[23]. В случае языково-ориентированного проектирования программ применимость С++, как и при использовании любых других языков, ограничивается нижним уровнем системы — реализацией предметно-специфичных языков (DSL) первого уровня. Для этой задачи С++ объективно является далеко не оптимальным выбором (см. раздел Отсутствие возможностей). В случае применения методологии «чистого встраивания» DSL в язык общего назначения (которая является традиционной для Lisp/ML, и для которой в С++ потенциально предназначена библиотека Boost.Spirit), с т.з. воплощения изоморфизма Карри-Ховарда выбор С++ в качестве базы был бы абсурден. Наиболее ортодоксальные противники С++ утверждают, что этот язык нельзя использовать в реальной индустрии вообще, и его существование имеет лишь педагогический смысл — в качестве образцово-показательной коллекции антипаттернов в задаче разработки языков программирования

1.3. Определение языка программирования Delphi

Изначально среда разработки Delphi была предназначена исключительно для разработки приложений Windows, затем был реализован вариант для платформ Linux (как Kylix), однако после выпуска в 2002 году Kylix 3 его разработка была прекращена, и вскоре было объявлено о поддержке Microsoft .NET, которая, в свою очередь, была прекращена с выходом Delphi 2007[5].

На сегодняшний день, наряду с поддержкой разработки 32 и 64-разрядных программ для Windows, реализована возможность создавать приложения для Apple Mac OS X (начиная с Embarcadero Delphi XE2), iOS (включая симулятор, начиная с XE4 посредством собственного компилятора), а также, в Delphi XE5, для Google Android (непосредственно исполняемые на ARM-процессоре).

Язык Pascal, полностью процедурный язык, был предложен Н. Виртом в конце 70-х годов как хорошо структурированный учебный язык. Расширения, привнесенные в язык компанией Borland, преследовали две основные цели:

1) упрощение обработки в языке структур, представляющих наиболее распространенные типы данных строки и файлы (например, в язык был внесен новый тип данных string);

2) реализация в языке основных возможностей объектно-ориентированных языков программирования.

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

Pascal был уникальным в своём роде – он имел самый быстрый компилятор в мире, да и в нем впервые была разработана технология создания платформенно независимых программ, которая нашла широкое применение в таком языке, как Java. Своё имя он получил в честь великого французкого физика Паскаля. Позднее, разработкой Pascal`ей занялась компания Borland, с помощью которой Pascal встал на серийное производство. надо заметить, что кроме Turbo Pascal компанией выпускался Borland Pascal, который выходил в свет несколько позднее, чем Turbo Pascal, но в отличие от него обладал большими способностями, как то различные режимы компиляции программы, более расширенный набор функций. Так, версия за версией было выпущенно семь Turbo и Borland Pascal`ей.

С появлением Windows у Pascal появилась новая разновидность – Turbo и Borland Pascal for Windows. Данная программа была не чуть не лучше обыкновенного блокнота, разве что только цифры отображала синим. Но время шло, требования к качеству оформления программ росли, а языки программиравания оставались всё теми же – Dos`овскими. И вот, наконец, компанией Microsoft был совершен переворот в области прикладного программирования – ими впервые была создана визуальная система разработки прикладных программ, которую они реализовали в Visual Basic. К новому стандарту стали приобщать все языки программирования, не избежал своей участи и Pascal. В тот момент, когда разработчики Pascal`я в компании Borland наконец добрались до него – находился он довольно в запущенном состоянии. Было пересмотрено и переработано множество функций, добавленно, а вернее сказать создано, многое. И в итоге внесения оказались столь колоссальными, что разработчики создали, можно сказать, новый язык программирования. Своё имя новая система (Delphi) получила в честь древнегреческого города Дельфы. Название было выбрано не спроста: город Дельфы связан с именем бога мудрости и покровителем искусств Аполона. Согласно легенде главное святилище Аполона находилось именно в этом городе. Его жрицы-сивиллы изрекали пророчества желающим узнать свою судьбу.

Так каждый год появлялась новая версия Delphi, но после пятой что-то случилось и новая версия не появилась в срок. Оказалось, что параллельно с разработкой новой версии Delphi, велась разработка нового, Delphi-подобного языка программирования для Linux. Новый продукт получил название Kylix. Delphi оказал огромное влияние на создание концепции языка C# для платформы .NET. Многие его элементы и концептуальные решения вошли в состав С#. Одной из причин называют переход Андерса Хейлсберга, одного из ведущих разработчиков Дельфи, из компании Borland Ltd. в Microsoft Corp. Версия 1 была предназначена для разработки под 16-ти разрядную платформу Win16; Версии со второй компилируют программы под 32-х разрядную платформу Win32; Вместе с 6-й версией Delphi вышла совместимая с ним по языку и библиотекам среда Kylix, предназначенная для компиляции программ под операционную систему Linux; Версия 8 способна генерировать байт-код исключительно для платформы .NET. Это первая среда, ориентированная на разработку мультиязычных приложений (лишь для платформы .NET); Последующие версии (обозначаемые годами выхода, а не порядковыми номерами, как это было ранее) могут создавать как приложения Win32, так и байт-код для платформы .NET; Delphi for .NET — среда разработки Delphi, а так же язык Delphi (Object Pascal), ориентированные на разработку приложений для .NET. Первая версия полноценной среды разработки Delphi для .NET — Delphi 8. Она позволяла писать приложения только для .NET.

В настоящее время, в Delphi 2006, можно писать приложения для .NET используя стандартную библиотеку классов .NET, VCL для .NET. Среда также позволяет писать NET-приложения на C# и Win32-приложения на C++. Delphi 2006 содержит функции для написания обычных приложений с использованием билиотек VCL и CLX. Delphi 2006 поддерживает технологию MDA с помощью ECO (Enterprise Core Objects) версии 3.0. В марте 2006 года компания Borland приняла решение о прекращении дальнейшего совершенствования интегрированных сред разработки Jbuilder, Delphi и C++Builder по причине убыточности этого направления. Планируется продажа IDE-сектора компании. Группа сторонников свободного программного обеспечения организовала сбор средств для покупки у Borland прав на среду разработки и компилятор Однако в ноябре того же года было принято решение отказаться от продажи IDE бизнеса. Тем не менее, разработкой IDE продуктов теперь будет заниматься новая компания — CodeGear, которая будет финансово полностью подконтрольна Borland. Borland продолжил развитие IDE систем под именем Turbo: Turbo Delphi, Turbo Delphi for .NET, Turbo C#, Turbo C++. А в марте 2007 года CodeGear порадовала пользователей обновленной линейкой продуктов Delphi 2007 for Win32 и выходом совершенно нового продукта Delphi 2007 for PHP. В России Borland Delphi появляется в конце 1993 г. и сразу же завоевывает широкую популярность. Новые версии выходят практически каждый год. В них реализуются все новые мастера, компоненты и технологии программирования. Действительно, процесс разработки в Delphi предельно упрощен. В первую очередь это относится к созданию интерфейса, на который уходит 80% времени разработки программы. Вы просто помещаете нужные компоненты на поверхность Windows-окна (в Delphi оно называется формой) и настраиваете их свойства с помощью специального инструмента (Object Inspector). С его помощью можно связать события этих компонентов (нажатие на кнопку, выбор мышью элемента в списке и т.д.) с кодом его обработки – и вот простое приложение готово. Причем разработчик получает в свое распоряжение мощные средства отладки (вплоть до пошагового выполнения команд процессора), удобную контекстную справочную систему (в том числе и по Microsoft API), средства коллективной работы над проектом, всего просто не перечислить. Вы можете создавать компоненты ActiveX без использования Microsoft IDL, расширять возможности web-сервера (скрипты на стороне сервера), практически ничего не зная об HTML, XML или ASP. Можно создавать распределенные приложения на базе СОМ и CORBA, Интернет- и intranet-приложения, используя для доступа к данным Borland DataBase Engine, ODBC-драйверы или Microsoft ADO. Появившаяся, начиная с Delphi 3, поддержка многозвенной технологии (multi-tiered) доступа к данным позволяет создавать масштабируемые приложения (относительно слабо зависящие от сервера БД) за счет перенесения методов обработки информации (бизнес-правил) на среднее звено[6].

Как уже говорилось ранее, в Delphi используется язык Object Pascal, который постоянно расширяется и дополняется Borland. Язык в полной мере поддерживает все требования, предъявляемые к объектно-ориентированному языку программирования. Как и положено строго типизированному языку, классы поддерживают только простое наследование, но зато интерфейсы могут иметь сразу несколько предков. К числу особенностей языка следует отнести поддержку обработки исключительных ситуаций (exceptions), а также перегрузку методов и подпрограмм (overload) в стиле C++.

К числу удачных, на взгляд автора, относится также поддержка длинных строк в формате WideChar и AnsiChar. Последний тип (AnsiString) позволяет использовать все прелести динамического размещения информации в памяти без всяких забот о ее выделении и сборке мусора Delphi делает это автоматически. Для поклонников свободного стиля программирования имеются открытые массивы, варианты и вариантные массивы, позволяющие размещать в памяти все, что душе угодно и смешивать типы данных. Вы можете создавать свои собственные компоненты, импортировать ОСХ-компоненты, создавать шаблоны проектов и мастеров, создающих заготовки проектов. Мало того, Delphi предоставляет разработчику интерфейс для связи ваших приложений (или внешних программ) с интегрированной оболочкой Delphi (IDE). Таким образом, вы можете использовать Delphi для создания как самых простых приложений, на разработку которых требуется 2-3 часа, так и серьезных корпоративных проектов, предназначенных для работы десятков и сотен пользователей. Причем для этого можно использовать самые последние веяния в мире компьютерных технологий с минимальными затратами времени и сил.

Одна из самых последних новостей от Inprise обещает, что в ближайшем будущем вы сможете переносить приложения, разработанные в Delphi, на платформу Linux.

1.3.1. История языка

Object Pascal — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal — динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемую интроспекцией — данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.

Object Pascal (Delphi) является результатом функционального расширения Turbo Pascal[7].

Delphi оказал огромное влияние на создание концепции языка C# для платформы .NET. Многие его элементы и концептуальные решения вошли в состав С#. Одной из причин называют переход Андерса Хейлсберга, одного из ведущих разработчиков Дельфи, из компании Borland Ltd. в Microsoft Corp.

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

Последующие версии (обозначаемые годами выхода, а не порядковыми номерами, как это было ранее) могут создавать как приложения Win32, так и байт-код для платформы .NET.

Delphi for .NET — среда разработки Delphi, а также язык Delphi (Object Pascal), ориентированные на разработку приложений для .NET.

Первая версия полноценной среды разработки Delphi для .NET — Delphi 8. Она позволяла писать приложения только для .NET. Delphi 2006 поддерживает технологию MDA с помощью ECO (Enterprise Core Objects) версии 3.0.

В марте 2006 года компания Borland приняла решение о прекращении дальнейшего совершенствования интегрированных сред разработки JBuilder, Delphi и C++ Builder по причине убыточности этого направления. Планировалась продажа IDE-сектора компании. Группа сторонников свободного программного обеспечения организовала сбор средств для покупки у Borland прав на среду разработки и компилятор.

Однако в ноябре того же года было принято решение отказаться от продажи IDE-бизнеса. Тем не менее, разработкой IDE продуктов теперь будет заниматься новая компания — CodeGear, которая будет финансово полностью подконтрольна Borland.

В августе 2006 года Borland выпустил облегченную версию RAD Studio под именем Turbo: Turbo Delphi (для Win32 и .NET), Turbo C#, Turbo C++.

В марте 2008 года было объявлено о прекращении развития этой линейки продуктов.

В марте 2007 года CodeGear порадовала пользователей обновлённой линейкой продуктов Delphi 2007 for Win32 и выходом совершенно нового продукта Delphi 2007 for PHP.

В июне 2007 года CodeGear представила свои планы на будущее, то есть опубликовала так называемый roadmap.

Embarcadero RAD Studio 2010

25 августа 2008 года компания Embarcadero, новый хозяин CodeGear, опубликовала пресс-релиз на Delphi for Win32 2009. Версия привнесла множество нововведений в язык, как то:

По умолчанию полная поддержка Юникода во всех частях языка, VCL и RTL; замена обращений ко всем функциям Windows API на юникодные аналоги (то есть MessageBox вызывает MessageBoxW, а не MessageBoxA).

Обобщённые типы, они же generics.

Анонимные методы.

Новая директива компилятора $POINTERMATH [ON|OFF].

Функция Exit теперь может принимать параметры в соответствии с типом функции.

Вышедшая в 2011 году версия Delphi XE2 добавила компилятор Win64 и кросс-компиляцию для операционных систем фирмы Apple (MacOS X, iOS).

Вышедшая в 2013 году версия Delphi XE5 обеспечила кросс-компиляцию приложений для устройств на платформе ARM/Android.

1.3.2. Отличие от других языков программирования

При создании языка (и здесь качественное отличие от языка C) не ставилась задача обеспечить максимальную производительность исполняемого кода или лаконичность исходного кода для экономии оперативной памяти. Изначально, язык ставил во главу угла стройность и высокую читаемость, поскольку был предназначен для обучения дисциплине программирования. Эта изначальная стройность, в дальнейшем, как по мере роста аппаратных мощностей, так и в результате появления новых парадигм, упростила расширение языка новыми конструкциями.

Ниже перечислены некоторые отличия синтаксических конструкций Delphi от семейства C-подобных языков (C/C++/Java/C#):

  1. В Delphi формальное начало любой программы четко отличается от других участков кода и должно располагаться в определенном, единственном в рамках проекта, исходном файле с расширением dpr (тогда как другие файлы исходных текстов программы имеют расширение pas)
  2. В С-подобных языках программирования в качестве входа обычно используется глобальная функция или статический метод с именем main и определенным списком параметров, причём такая функция может быть расположена в любом из файлов исходного текста проекта.
  3. В Delphi идентификаторы типов, переменных, а равно и ключевые слова читаются независимо от регистра: например идентификатор SomeVar полностью эквивалентен somevar. Регистро-зависимые идентификаторы в начале компьютерной эпохи ускоряли процесс компиляции, и кроме того, позволяли использовать очень короткие имена, порой отличающиеся лишь регистром.

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

  1. В Delphi в исходных файла pas (которые, как правило, и содержат основное тело программы) на уровне языковых средств введено строгое разделение на интерфейсный раздел и раздел реализации. В интерфейсной части содержатся лишь объявления типов и методов, тогда как код реализации в интерфейсной части не допускается на уровне компиляции. Подобное разделение свойственно также языкам C/C++, где в рамках культуры и парадигмы программирования вводится разделение на заголовочные и собственно файлы реализации, но подобное разделение не обеспечивается на уровне языка или компилятора.
  2. В C# и Java такое разделение устранено вовсе − реализация метода, как правило, следует сразу же после его объявления. Инкапсуляция обеспечивается лишь принадлежностью метода к той или иной области видимости. Для просмотра одной только интерфейсной части модуля исходного кода используются специальные средства.
  3. В Delphi метод или функция четко определяются зарезервированными для этого ключевыми словами procedure или function, тогда как в C-подобных языках различие обуславливается ключевым словом, определяющим тип возвращаемого значения:
  4. Для наиболее гибкой и эффективной реализации объектно-ориентированного подхода в Delphi, введены два механизма полиморфного вызова: классический виртуальный, а также динамический: если в случае классического виртуального вызова, адреса всех виртуальных функций будут содержаться в таблице виртуальных методов каждого класса, то в случае с динамическим вызовом указатель на метод существует лишь в таблице того класса, в котором он был задан или перекрыт.

Таким образом, для динамического вызова из класса D метода класса A, переопределенного в B, потребуется выполнить поиск в таблицах методов классов D, A и B.

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

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

2. Сравнительная характеристика языков Delphi и C++

Данные языки программирования можно различать:

  1. по структуре программы;

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

  1. по типам данных и их описанию;

Как уже было сказано, в С++ переменные можно объявлять, в отличие от Delphi, прямо в теле программы, что упрощает процесс понимания исходного кода, а также добавляет удобства программисту. Типы данных в С++ и Delphi похожи, в большей степени зависят от версии компилятора. Фирма Borland старается как можно более унифицировать типы данных в компиляторе С++ и Delphi Оба языка являются объектно-ориентированными (опять же, это зависит от компилятора). Оба языка поддерживают большие объемы данных, например, массивы с большим количеством элементов.

  1. по описанию основных операторов;

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

  1. по технологии создания программ.

Учитывая то, что оба языка предоставляют сравнимые фундаментальные возможности (объектно-ориентированный подход, работа с большими объемами данных, возможность низкоуровневого программирования), то к ним применимы одинаковые технологии создания программ: структурное программирование, объектно-ориентированное программирование.

2.1. Сравнение указанных элементов языков

2.1.1 Файлы и потоки в C++

Файлом называют способ хранения информации на физическом устройстве. Файл — это понятие, которое применимо ко всему — от файла на диске до терминала.

В C++ отсутствуют операторы для работы с файлами. Все необходимые действия выполняются с помощью функций, включенных в стандартную библиотеку. Они позволяют работать с различными устройствами, такими, как диски, принтер, коммуникационные каналы и т.д. Эти устройства сильно отличаются друг от друга. Однако файловая система преобразует их в единое абстрактное логическое устройство, называемое потоком.

Текстовый поток — это последовательность символов. При передаче символов из потока на экран, часть из них не выводится (например, символ возврата каретки, перевода строки).

Двоичный поток — это последовательность байтов, которые однозначно соответствуют тому, что находится на внешнем устройстве.

Режим доступа — строка, указывающая режим открытия файла файла и тип файла.

2.2.2. Файлы и потоки в Delphi. Работа с файлами в Delphi

Технология работы с файлами в системе Delphi требует определённого порядка действий:

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

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

Файл закрывается. Теперь он опять доступен другим приложениям без ограничений. Закрытие файла гарантирует, что все внесённые изменения будут сохранены, так как для увеличения скорости работы изменения предварительно сохраняются в специальных буферах операционной системы.

В Delphi реализовано несколько способов работы с файлами. Познакомимся со классическим способом, связанным с использованием файловых переменных. Файловая переменная вводится для указания на файл.

Описанная таким образом файловая переменная считается нетипизированной, и позволяет работать с файлами с неизвестной структурой. Данные считываются и записываются побайтно блоками, размер которых указывается при открытии файла, вплоть от 1 байт.

Но чаще используются файлы, состоящие из последовательности одинаковых записей. Для описания такого файла к предыдущему описанию добавляется указание типа записи:

В качестве типа могут использоваться базовые типы, или создаваться свои. Важно только, чтобы для типа был точно известен фиксированный размер в байтах, поэтому, например, тип String в чистом виде применяться не может, а только в виде String[N].

Данные, считанные из файла или записываемые в файл, содержатся в обычной переменной, которая должна быть того же типа, что и файловая. Поэтому сначала в программе лично я описываю нужный тип, а затем ввожу две переменные этого типа - файловую и обычную:

Для текстовых файлов тип файловой переменной в этом случае TextFile, а тип обычной - String.

Для открытия файла нужно указать, где он расположен. Для этого файловая переменная должна быть ассоциирована с нужным файлом, который определяется его адресом. Адрес файла может быть абсолютным, с указанием диска и каталогов, или относительным, тогда он создаётся в папке с .exe файлом программы. Для задания относительного адреса достаточно указать имя файла с нужным расширением. Делается это оператором AssignFile.

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

Потоки в Delphi

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

Заключение

Язык С (читается "Си") создан в начале 70-х годов, когда Кен Томпсон и Дэннис Ритчи из Bell Labs разрабатывали операционную систему UNDC Сначала они создали часть компилятора С, затем использовали се для компиляции остальной части компилятора С и, наконец, применили полученный в результате компилятор для компиляции UNIX. Операционная система UNIX первоначально распространялась в исходных кодах на С среди университетов и лабораторий, а получатель мог откомпилировать исходный код на С в машинный код с помощью подходящего компилятора С.

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

По сравнению с более ранним языком — BCPL, С был улучшен путем добавления типов данных определенной длины. Например, тип данных int мог применяться для создания переменной с определенным числом битов (обычно 16), в то время как тип данных long мог использоваться для создания целой переменной с большим числом битов (обычно 32). В отличие от других языков высокого уровня, С мог работать с адресами памяти напрямую с помощью указателей и ссылок. Поскольку С сохранил способность прямого доступа к аппаратному обеспечению, его часто относят к языкам среднего уровня или в шутку называют "мобильным языком ассемблера".

Что касается грамматики и синтаксиса, то С является структурным языком программирования. В то время как многие современные программисты мыслят в категориях классов и объектов, программисты на С думают в категориях процедур и функций. В С можно определить собственные абстрактные типы данных, используя ключевое слово struct. Аналогично можно описывать собственные целые типы (перечисления) и давать другие названия существующим типам данных при помощи ключевого слова typedef. В этом смысле С является структурным языком с зародышами объектно-ориентированного программирования. Широкое распространение языка C на различных типах компьютеров (иногда называемых аппаратными платформами) привело, к сожалению, ко многим вариациям языка. Они были похожи, но несовместимы друг с другом. Это было серьезной проблемой для разработчиков программ, нуждавшихся в написании совместимых программ, которые можно было бы выполнять на нескольких платформах. Стало ясно, что необходима стандартная версия C. В 1983г. ANSI (Американский Национальный Комитет Стандартов) сформировал технический комитет X3J11 для создания стандарта языка C (чтобы "обеспечить недвусмысленное и машинно-независимое определение языка"). В 1989 стандарт был утвержден. ANSI скооперировался с ISO (Международной Организацией Стандартов), чтобы стандартизовать C в международном масштабе; совместный стандарт был опубликован в 1990 году и назван ANSI/ISO 9899:1990. Этот стандарт усовершенствуется до сих пор и поддерживается большинством фирм разработчиков компиляторов.

Список литературы

1. Голицына О.Л. Языки программирования: учеб. пособие. Издательство: "ИНФРА-М, Форум", 2010.

2. Программирование на С++/ В.П. Аверкин, А.И. Бобровский, В.В. Веснич и др.; Под ред. А.Д. Хомоненко . – СПб.: Корона принт, 1999. – 252 с.

3. C++Builder 5: Рук. разработчика: [В 2 т.: Пер. с англ.] / Джарод Холингвэрт, Дэн Баттерфилд, Боб Сворт и др. – М.: Вильямс, 2001. – 824 с.

4. Архангельский А.Я. Программирование в С++Builder 6 / А.Я. Архангельский . – М.: Бином, 2012. – 1151 с.

5. Елманова Н.З. Введение в Borland C++ Builder / Н.З. Елманова, С.П. Кошель – М.: Диалог-МИФИ, 2007. – 272 с.

6. Паппас Крис Программирование на С и С++: [Учеб. пособие: Пер. с англ.] / Крис Паппас, Уильям Мюррей . – Киев: Ирина, 2009. – 318 с.

7. Павловская Т.А. C/C++: Программирование на языке высокого уровня: Учебник для вузов, Питер, 2012.