Надо отметить, что и Delphi и CBuilder созданы для решения одних и тех же задач. Так же эти инструменты используют один и тот же стиль IDE. Поэтому сравнение их между собой является вполне корректным.

Рождение CBuilder.

Прежде всего, рассмотрим, в чем CBuilder превосходит
Delphi:

  • наличие шаблонов
  • наличие STL
  • наличие дополнительных библиотек
  • средства языка С++ 
  • стандарт языка С++

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

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

int max(int massive[], int number)
{
int large = massive[0];
for(int i=1; i<number; i++)
{
if(massive[i]>large)
large = massive[i];
}
return large;
}

Но у такой функции есть существенное ограничение - она работает только с массивом целых чисел. А если нам нужна функция, работающая еще и с float-значениями? В данном примере можно без труда исправить типы элементов massive и large с int на float. Но это лишь самый простой случай, в жизни все намного сложнее - ты потеряешь очень много времени на исправления и получишь всего лишь еще одну функцию, на которую теперь будет тратить время компилятор. На выручку приходит шаблон:

template <typename T>
T max(T massive[], int number)
{
T large = massive[0];
for(int i=1; i<number; i++){
if(massive[i]>large)
large = massive[i];
}
return large;

Теперь функция max будет работать с любыми типами (и возвращать значения любых типов тоже). Мы не можем дальше уделять время программированию шаблонов (это тема отдельной статьи) и пойдем дальше. 

STL (Standard Template Library) - стандартная библиотека шаблонов. Это огромная библиотека, содержащая уже написанные функции и классы на все случаи жизни. Большинство этих функций и классов написано с использованием шаблонов. Так что они могут работать с любыми типами данных. Использование STL рекомендуется всем и каждому, так как, во-первых, это экономит время (не надо ничего программировать самому), во-вторых, все функции проверены и выверены на предмет всяких переполнений, ошибок и исключительных ситуаций. То есть при использовании функции из STL ты гарантированно создаешь хорошо защищенный код. И это неудивительно, ведь STL - продукт деятельности многих профессионалов, которые создавали и проверяли его не один десяток лет. В связи с отсутствием полновесной поддержки шаблонов в Delphi невозможно создание для него такой библиотеки. 

Теперь давай рассмотрим на примерах, какие полезные функции предоставляет STL. Наибольшие сложности у программиста обычно вызывает создание динамических структур (связанных списков и т.д.). Ему приходится предусмотреть все ошибки, которые теоретически могут возникнуть при нехватке памяти и ее переполнении. Так же нужно создать корректный деструктор, иначе вся выделенная память канет в лету. В общем, работы непочатый край! В STL все такие классы (динамические) уже давно реализованы. Например, класс list. Это односвязный список, по которому можно перемещаться только в одном направлении. Для него уже реализованы не только простые функции:

....
Insert - вставляет новый элемент в данную позицию;
Push_back - вставляет элемент в конец списка;
Push_front - вставляет элемент в начало списка; 
Resize - заставляет список изменить количество элементов; 
....

Но и достаточно сложные для программирования самому:

...
Sort - сортирует список по возрастанию;
Find - возвращает позицию первого элемента, удовлетворяющего заданному критерию;
Reverse - изменит порядок элементов в списке на противоположный.
...

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

Помимо STL существует масса дополнительных библиотек. Они очень полезны и часто используются. Конечно, есть различные модули и для Delphi, но их значительно меньше. Тут можно провести аналогию с ФОРТРАНОМ. Знаешь такой язык? ФОРТРАН используется и сейчас при решении многих математических задач. Это знает почти каждый, но вот почему это так, знают не все. Самый частый ответ, у ФОРТРАНА компилятор приспособлен для операций над числами с плавающей точкой. Действительно, оптимизация кода в данном случае у ФОРТРАНА на высоте. Но это не главное, если правильно оформить код, то и программа на С/С++ будет бегать не намного медленнее аналогичной на ФОРТРАНЕ. Суть же в том, что к ФОРТРАНУ уже написаны библиотеки, охватывающие любые задачи. Там где С-кодеру придется программировать алгоритм, его коллега просто вызовет необходимую функцию. И сэкономит этим неделю (если не больше) своего времени. Примерно такая же ситуация и с Delphi - для него пока очень мало библиотек (по сравнению с CBuilder). 

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

  • быстрее рисовать "{ }" чем "begin end"
  • удобнее "i++" и "i--", чем "inc(i)" и "dec(i)"
  • возможность объявлять переменные в любом месте программы и ограничивать их область видимости
  • множественное присваивание "a=b=c=0", что в Pascal невозможно
  • перегрузка операторов реализована в Delphi через чур громоздко
  • отсутствие макросов в Pascal
  • отсутствие оператора "?:" в Pascal, а между тем макрос плюс этот оператор позволяют в секунду создать код, возвращающий минимум двух чисел: #define MIN(a,b) ((a)<(b))?(a):(b)
  • очень гибкие циклы в С++
  • битовые поля, регистровые переменные и т.д. и т.п.

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

Последний довод - стандарт С++. Не секрет, что С++ считается основным языком разработки прикладных программ. Поэтому все описания функций Win API используют синтаксис С++. Писать на С++ помогает и MSDN. Хотя она ориентирована на MS Visual C++, при создании приложений под Windows на CBuilder MSDN очень полезна.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии