Самая актуальная версия Делфи - это вышедшая в этом году 12.3. И выходит каждые пол года. Обновляют и язык и среду и фреймворки, которых из коробки теперь 2: старый добрый vcl и кроссплатформенный fmx.
Визуальное программирование (Delphi, VB): ускорило разработку форм, но не заменило код.
Delphi никогда не был про визуальное программирование. В нем нет визуального программирования. Никогда нельзя было описать логику визуально и сейчас тоже нельзя. Да, есть редактор форм, есть визуальные биндинги, есть UML (устарело, выпилено и в вообще основном ридонли был), есть невизуальные компоненты, есть редактор стилей, но визуального программирования нет и никогда не было.
Delphi позволяет сократить спагетти код, который вы вынуждены сейчас писать в Питоне для GUI, хотя и для этой проблемы есть инструменты, например, Qt Designer для pyqt и других qt биндов. К слову, существуют бинды (официальные) для Питона и для совместной работы с Делфи редактором и фреймворками VCL и FMX.
Delphi - это про rapid разработку. И инструменты в нем именно для этого, а не для визуального программирования. Ты можешь создать и оформить окно быстро и наглядно, настроить какие-то компоненты. Но без кода работать будут только простые вещи, которые решаются и так одной строкой. Т.е. просто избавить себя от рутины и совершения опечаток в коде.
Нет, стили в FMX это не аналог CSS, просто приведен как быстрый способ понять, что такое стили и что стили - это не "шкурки". В FMX просто применяется принцип разделения данных от представления. Работают иначе, возможности другие. Например, стили НЕ влияют на поведение контрола и НЕ виляют на его положение, они влияют лишь на его вид. В CSS/HTML всё в перемешку. Где-то там задано расположение, где-то там.
Ну и эта IDE и её возможности появились задолго до Qt Creator, в том числе дизайнер фреймворка FMX. Так что это не RAD Studio похожа на Qt Creator, а Qt Creator ооочень похож на RAD Studio
Используется частичная перерисовка. Например, если контрол изменился, он отправляет InvalidateRect(BoundsRect). И при перерисовке окна будет задета только эта часть. Тень и другие эффекты кешируются в bitmap. Между кадрами набирается кучка прямоугольников для отрисовки, объединяется в регион и перерисовывается.
Но если интересует производительность, то касаемо её есть пока проблемы. Проблемы связаны с тем, как рассчитывается "видимость" контрола. К сожалению, сейчас родительский контрол имеет приоритет при расчете, это значит, что если у нас в скроллбоксе находится, например, большой слой с контролами, то весь слой целиком будет перерисовываться внутри скрола, если даже всего часть контролов в слое видна. По этому стоит в скролл добавлять небольшие элементы (дробить).
Ещё есть просадка производительности при отрисовке Emoji в тексте, с чем связано - пока не выяснял. Но это зависит от графического бэкенда (их много).
Главная мысль была всё же именно в том, что выглядеть красиво могут приложения и без веба. Но я отвечу и на ваши вопросы.
готов посмотреть исходники этих проектов
А собственно в этом и есть скорость создания UI. Тут нет исходников, точнее есть разметка, которая получена в результате дизайна, но генерируемая автоматически. Т.е. в примере приложения Strato (это музыкальный плеер, который организует и воспроизводит музыку с вашего Google Drive, при чем не требует ввода пароля, а использует внешний пользовательский браузер для OAuth2), я не написал ни строчки кода связанного с GUI.
Кода нет
Ссылка на коммит этого приложения, UI которого выглядит как на скрине в прошлом комментарии.
нужно ли тратить время на изучение того, что может быть бесполезно для конечного пользователя?
Тратить время нужно на любой инструмент, в особенности на новый. Т.к. я владею языком, где этот фреймворк идет по умолчанию, мне не составило большого труда его изучить. Я не буду вам втюхивать Delphi, т.к. мой комментарий всё же был именно о конечном результате, а вы вряд ли будете рассматривать его использование. Но если в кратце, то здесь используется кроссплатформенный фреймворк FMX, который имеет дизайнер окна и дизайнер стиля (что-то вроде CSS). И алгоритм такой: 1. Создаем окно 2. Добавляем элемент (например кнопку) 3. Открываем дизайнер стилей и создаем представление этой кнопки (с помощью примитивов (фигуры, svg, path, картинки), шейдеры, анимации, триггеры или другие контролы) 4. Назначаем кнопке созданный стиль Готово. Всё это визуально, в реалтайме. В стиле могут быть другие контролы со своим стилем. Функционал контрола остается за самим контролом. Набор стилей может быть общим между окнами, между проектами и вообще может быть загружен/заменен/изменен динамически.
Ну GUI приложения без современного веба выгледят как приложения для windows xp в 2004м
Это заблуждение.
Приложение без веба. Кроссплатформенное. 1
Приложение без веба. Кроссплатформенное. 2
Приложение без веба. Кроссплатформенное. 3
Приложение без веба. Кроссплатформенное. 4
Приложение без веба. Кроссплатформенное. 5
Приложение без веба. Кроссплатформенное. 6
И это только мои примеры.
Здесь всё векторное, что означает, что качество картинки будет только улучшаться с увеличением DPI. Все примеры кроссплатформенные. В примерах нет никакого WebView или даже намека на HTML/CSS или QML. И всё это (визуал) создается буквально за день
Создания объектов на стеке нет, да, но это не мешает использовать record или на крайний случай object (не рекомендую).
Освобождение памяти в каких-то случаях тоже выполняется автоматом, но уж не помню, в каких
Освобождаются объекты только если они интерфейсные объекты, т.е. работают через RefCount.
Сильно ограничены возможности переопределения операций по сравнению с це++
Есть такая возможность. И не только переопределить, но и перегрузить.(док)
Про шаблоны действительно не стоит говорить, потому что шаблоны - это шаблоны, а дженерики - это дженерики. Шаблонов нет и не стоит их даже добавлять. А вот дженерики отлично вписались в синтаксис.
Реализация строк в Delphi такая, что я не задумываюсь он ней. И для всех строк использую string. В любых ситуациях, с любыми кодировками и т.д.
Не соглашусь, Pascal 70 года и Object Pascal (86 год) кардинально друг от друга отличаются, сильнее, чем C от C++. Не говоря уже о том, что Object Pascal основан на Clascal (Паскаль для Apple). Т.е. между ними даже отдельная итерация языка есть. Ну а Delphi ещё дальше ушел от Object Pascal. Настолько, что нет даже обратной совместимости. Т.е. старый код вполне может не компилироваться в новых версиях.
Delphi такой же молодой язык как и C#, как минимум моложе Питона (1995 и 1991 год соответственно). Также регулярно обновляется и также позволяет сборку под arm и другие процессоры.
Да собственно для всего. Всё что пишут на других языках пишется и на Delphi. Включая даже возможность создавать фронтенд (pas2js). Только помимо производительности кода мы имеем и полноценный дизайнер окон. Замечу, что и кроссплатформенный GUI софт (Win/Linux/Mac/Android/iOS) тоже можно создавать. Причем для мобильных платформ существует и отдельный фреймворк для нативного GUI.
Самая актуальная версия Делфи - это вышедшая в этом году 12.3. И выходит каждые пол года. Обновляют и язык и среду и фреймворки, которых из коробки теперь 2: старый добрый vcl и кроссплатформенный fmx.
Delphi никогда не был про визуальное программирование. В нем нет визуального программирования. Никогда нельзя было описать логику визуально и сейчас тоже нельзя. Да, есть редактор форм, есть визуальные биндинги, есть UML (устарело, выпилено и в вообще основном ридонли был), есть невизуальные компоненты, есть редактор стилей, но визуального программирования нет и никогда не было.
Delphi позволяет сократить спагетти код, который вы вынуждены сейчас писать в Питоне для GUI, хотя и для этой проблемы есть инструменты, например, Qt Designer для pyqt и других qt биндов. К слову, существуют бинды (официальные) для Питона и для совместной работы с Делфи редактором и фреймворками VCL и FMX.
Delphi - это про rapid разработку. И инструменты в нем именно для этого, а не для визуального программирования. Ты можешь создать и оформить окно быстро и наглядно, настроить какие-то компоненты. Но без кода работать будут только простые вещи, которые решаются и так одной строкой. Т.е. просто избавить себя от рутины и совершения опечаток в коде.
А в чем проблема? По какой причине не нужно писать именно на Паскаль?
HaoZip, под Винду очень удобен. И с rar работает и вообще полностью с него слизан
Без проблем засовывается, хоть через докер
Её и запустили без доработок по сути. Выпилили только код, который мог работать только на 16 бит
Для билдера тоже есть
Всё что я показал на скринах, сделано штатными средствами. Без каких-либо сторонних компонентов. И без переписывания чего-либо.
Среда разработки платная как и VS, и такая же бесплатная как и VS. Т.е. для коммерческой и не коммерческой разработки есть версии.
Delphi, FMX.
Нет, стили в FMX это не аналог CSS, просто приведен как быстрый способ понять, что такое стили и что стили - это не "шкурки". В FMX просто применяется принцип разделения данных от представления. Работают иначе, возможности другие. Например, стили НЕ влияют на поведение контрола и НЕ виляют на его положение, они влияют лишь на его вид. В CSS/HTML всё в перемешку. Где-то там задано расположение, где-то там.
Ну и эта IDE и её возможности появились задолго до Qt Creator, в том числе дизайнер фреймворка FMX. Так что это не RAD Studio похожа на Qt Creator, а Qt Creator ооочень похож на RAD Studio
И как я уже сказал, стили в FMX создаются тоже через дизайнер, а не кодом. Статью даже недавно писал. https://habr.com/ru/articles/833804/
Используется частичная перерисовка. Например, если контрол изменился, он отправляет
InvalidateRect(BoundsRect)
. И при перерисовке окна будет задета только эта часть. Тень и другие эффекты кешируются в bitmap. Между кадрами набирается кучка прямоугольников для отрисовки, объединяется в регион и перерисовывается.Но если интересует производительность, то касаемо её есть пока проблемы. Проблемы связаны с тем, как рассчитывается "видимость" контрола. К сожалению, сейчас родительский контрол имеет приоритет при расчете, это значит, что если у нас в скроллбоксе находится, например, большой слой с контролами, то весь слой целиком будет перерисовываться внутри скрола, если даже всего часть контролов в слое видна. По этому стоит в скролл добавлять небольшие элементы (дробить).
Ещё есть просадка производительности при отрисовке Emoji в тексте, с чем связано - пока не выяснял. Но это зависит от графического бэкенда (их много).
Главная мысль была всё же именно в том, что выглядеть красиво могут приложения и без веба. Но я отвечу и на ваши вопросы.
А собственно в этом и есть скорость создания UI. Тут нет исходников, точнее есть разметка, которая получена в результате дизайна, но генерируемая автоматически. Т.е. в примере приложения Strato (это музыкальный плеер, который организует и воспроизводит музыку с вашего Google Drive, при чем не требует ввода пароля, а использует внешний пользовательский браузер для OAuth2), я не написал ни строчки кода связанного с GUI.
Кода нет
Ссылка на коммит этого приложения, UI которого выглядит как на скрине в прошлом комментарии.
Тратить время нужно на любой инструмент, в особенности на новый. Т.к. я владею языком, где этот фреймворк идет по умолчанию, мне не составило большого труда его изучить. Я не буду вам втюхивать Delphi, т.к. мой комментарий всё же был именно о конечном результате, а вы вряд ли будете рассматривать его использование. Но если в кратце, то здесь используется кроссплатформенный фреймворк FMX, который имеет дизайнер окна и дизайнер стиля (что-то вроде CSS). И алгоритм такой:
1. Создаем окно
2. Добавляем элемент (например кнопку)
3. Открываем дизайнер стилей и создаем представление этой кнопки (с помощью примитивов (фигуры, svg, path, картинки), шейдеры, анимации, триггеры или другие контролы)
4. Назначаем кнопке созданный стиль
Готово. Всё это визуально, в реалтайме. В стиле могут быть другие контролы со своим стилем. Функционал контрола остается за самим контролом. Набор стилей может быть общим между окнами, между проектами и вообще может быть загружен/заменен/изменен динамически.
Ещё есть пример плавной смены стиля на другой.
Это заблуждение.
Приложение без веба. Кроссплатформенное. 1
Приложение без веба. Кроссплатформенное. 2
Приложение без веба. Кроссплатформенное. 3
Приложение без веба. Кроссплатформенное. 4
Приложение без веба. Кроссплатформенное. 5
Приложение без веба. Кроссплатформенное. 6
И это только мои примеры.
Здесь всё векторное, что означает, что качество картинки будет только улучшаться с увеличением DPI. Все примеры кроссплатформенные. В примерах нет никакого WebView или даже намека на HTML/CSS или QML. И всё это (визуал) создается буквально за день
Создания объектов на стеке нет, да, но это не мешает использовать record или на крайний случай object (не рекомендую).
Освобождаются объекты только если они интерфейсные объекты, т.е. работают через RefCount.
Есть такая возможность. И не только переопределить, но и перегрузить.(док)
Про шаблоны действительно не стоит говорить, потому что шаблоны - это шаблоны, а дженерики - это дженерики. Шаблонов нет и не стоит их даже добавлять. А вот дженерики отлично вписались в синтаксис.
Реализация строк в Delphi такая, что я не задумываюсь он ней. И для всех строк использую string. В любых ситуациях, с любыми кодировками и т.д.
По-моему язык развивается так как нужно. И Джавы в нем я не наблюдаю. Что именно по-вашему там не так?
Не соглашусь, Pascal 70 года и Object Pascal (86 год) кардинально друг от друга отличаются, сильнее, чем C от C++. Не говоря уже о том, что Object Pascal основан на Clascal (Паскаль для Apple). Т.е. между ними даже отдельная итерация языка есть. Ну а Delphi ещё дальше ушел от Object Pascal. Настолько, что нет даже обратной совместимости. Т.е. старый код вполне может не компилироваться в новых версиях.
Delphi такой же молодой язык как и C#, как минимум моложе Питона (1995 и 1991 год соответственно). Также регулярно обновляется и также позволяет сборку под arm и другие процессоры.
Да собственно для всего. Всё что пишут на других языках пишется и на Delphi. Включая даже возможность создавать фронтенд (pas2js). Только помимо производительности кода мы имеем и полноценный дизайнер окон. Замечу, что и кроссплатформенный GUI софт (Win/Linux/Mac/Android/iOS) тоже можно создавать. Причем для мобильных платформ существует и отдельный фреймворк для нативного GUI.
Что-то типа:
В те времена длины строки хватало, а сейчас длина до 2гб. И в редакторе кода можно в переменную вручную затолкать пару тысяч символов.
"Всегда передавались" - в значении "всегда могли передаваться". Потому что они могут передаваться по ссылке и сейчас.