1

Тема: Недостатки Delphi

Некоторые недостатки Delphi по моей просьбе были перечислены на "Ремесле программиста", но обсуждение не сложилось. Понятные мне претензии решил перенести сюда, авось что-то получится.

budden пишет:
  • ручное управление памятью. В широком классе задач проигрывает конкуренцию сборке мусора из-за низкой надёжности. Не во всех задачах, но в широком классе. В идеале должно быть сочетание обоих подходов, но если надо выбирать "то или то", я выберу сборку мусора, а особые случаи буду особо рассматривать. У ручного управления памятью есть  "размещение ресурсов на стеке", хорошо сделанное в С++, где можно на стеке разместить объект, к-рый автоматически удалится при выходе из функции. В Дельфи можно имитировать интерфейсами, но это - костыль и вроде бы дорого стоит с т.з. производительности. Или везде писать try..finally, но это загромождает код и даёт высокий риск ошибиться и забыть, или написать не то в finally, т.е. по сути не решает проблему надёжности.

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

  • по состоянию на 2007 (последняя версия, с которой я работал) - несовершенная объектная система, например, нет такой полезной вещи, как примеси. Во время создания VCL не было и интерфейсов, отсюда кривоватая архитектура VCL. А кому будет нужен "просто Паскаль" без рисования GUI? Вряд ли кому-то будет нужен. В принципе меня это не сильно напрягает - я вообще могу обойтись без объектов спокойно, но всё же это некий недостаток.

  • синтаксис

    Да, begin .. end я считаю неудачным решением, и не только я (смотрим долю языков, которые унаследовали это решение от Паскаля и видим, что даже Оберон отложился). Хотя это не столь важно.

  • Плохие строковые литералы (нет многострочных). Нет параметров-ключей (можно имитировать, но это опять костыль).

MihalNik пишет:
budden пишет:

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

Всё там нормально с размещением в стеке, для этого надо знать особенности структур и объектов,
ну или при особом задротстве - работу с указателями по старинке как в С++, которую там никто не отменял.

budden пишет:

Плохие строковые литералы (нет многострочных).

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

budden пишет:
MihalNik пишет:

Всё там нормально с размещением в стеке

Давайте вы сначала попробуете понять, что я написал? Я имел в виду частный случай RAII, а именно, привязку ресурсов к автоматической переменной объектного типа с захватом ресурса в конструкторе и освобождением в деструкторе. В Дельфи такой элегантной записи нет (по состоянию на 2007 год). [...] Если вы приведёте пример, который покажет RAII в Дельфи, такое же, как

{
ifstream my_file;
/* делай что угодно - при выходе из функции файл закроется (кроме особых случаев 
типа вложенных исключений в деструкторе, когда он всё равно закроется 
вместе со всей программой */
}

Когда покажете мне это в Дельфи 7 - я признаю, что я не всё знаю в Дельфи.

Далее в этой теме евангелист "Канторовых систем" должен описать, как всё решено в Канторе, а пока некому. Можете попробовать, или же просто высказаться, если по делу.

2 (изменено: Лис, 25.04.2017 в 22:41)

Re: Недостатки Delphi

евангелист "Канторовых систем" должен описать, как всё решено в Канторе

Да, было бы интересно почитать. Особенно - какие новшества по сравнению с:
1) C# который позволяет сочетать размещение на стеке (ValueTypes) со сборкой мусора в отличие от Java;
2) Rust, который по-другому описывает передачу параметров функций/методов по сравнению с C++.
Несущественные доработки типа миксинов и трайтов ничего прорывного на мой взгляд не добавляют.
В C# ещё было распределённое управление временем жизни (Leases в Remoting). Возможно что-то подобное должно быть в Erlang, не знаю.
Есть в Канторе новизна в вопросе управления объектами или нет?
Вот что волнует патриотическую общественность в лице меня.

3

Re: Недостатки Delphi

Пусть сначала автор в теме про Яр отпишется.

А вообще, всё перечисленное решено в Канторе, и если вы внимательно следите за проектом, уже и так всё знаете. Поскольку вы неоднократно сливали темы на "Ремесле", я не верю в ваш патриотизм. С вас 500 ₽ за ответ -- за найм меня евангелистом.

4 (изменено: Лис, 26.04.2017 в 0:43)

Re: Недостатки Delphi

Freeman пишет:

С вас 500 ₽ за ответ -- за найм меня евангелистом.

Если именно с меня, а другим бесплатно - то это дискриминация, иначе это публичная оферта (и упоминание именно меня - лишнее). Хотя тут "вас" с маленькой буквы, формально это не мне написано.

Freeman пишет:

Поскольку вы неоднократно сливали темы на "Ремесле", я не верю в ваш патриотизм.

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