Всем привет! Меня зовут Сергей!

В данной статье речь будет идти больше о FPC/Lazarus, но так же многое, вероятно, можно будет отнести и к Delphi. Это будет что-то вроде обзора возможностей Lazarus вперемешку с начальными уроками. Многого я тут не раскрою (по моему мнению) и надеюсь читатель не будет надеяться что я смогу полностью раскрыть все секреты программирования (не надо, не надо меня за эти слова бить) в одной статье. Я надеюсь что данная статья поможет новичкам, а так же даст некоторую информацию не совсем новичкам.

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

Возможно статью разобью на несколько частей. Это я уже буду смотреть на то, что я сумею изложить в данной статье и как много места она будет занимать.

Дальше просто пропускайте не нужную вам информацию. ))) И прошу простить если приходится листать далеко.

Оглавление

Немного о себе

Чтобы вы понимали, я не профессионал своего дела, но и опыта программирования у меня достаточно не мало. И в каких-то моментах я могу ошибаться.

Мои основные языки программирования (далее ЯП) это Ассемблер и Паскаль. Создавал программы, для своего общего образования на Java, C/C++, Perl и языках разметок. По своему занятию приходится читать текст разных ЯП и переводить/модифицировать их код на Паскаль. Даже изучал такой ЯП как Erlang, язык достаточно специфичный и не стал в него сильно углубляться.

На данный момент, я ведущий разработчик кроссплатформенной библиотеки ZenGL (не путайте, это паскалевская библиотека), по негласному соглашению с Андреем. До этого ей занимался Андрей Кемка, он её "забросил", а я случайно на неё наткнулся. В момент когда данная библиотека попала ко мне в руки все создаваемые программы можно было собрать только под Windows или Linux. Возможно устаревшими методами можно было собрать под старые: Android, iOS и Mac; но это было достаточно не просто.

В данный момент библиотека поддерживает платформы: Windows, Linux, MacOS и Android (наверняка ещё можно собрать под разные консоли, на которых стоят Windows или Linux).

Начинал я программировать ещё со Спектрума и даже сейчас не вспомню с какого. Понятно дело в данном случае моим первым ЯП был Бейсик Спектрума. Потом я столкнулся с Паскалем на Спектруме, там он мне не понравился и я его почти не запомнил. Пошёл учиться на радиотехника. Хотел на программиста, но как обычно места в программистах были уже заняты. Но со временем я даже не стал переводиться на другую специальность, потому что программирование у нас тоже было, а тут я ещё глубже смог углубиться в схемотехнику. Что как раз немного помогает (лично мне) понимать как всё происходит на низком уровне, на уровне даже ниже чем машинный код. ))) Большинству это не нужно.

В техникуме у нас был вроде Турбо Паскаль (хотя может и другие ЯП), но для меня это было слишком просто. Я занимался программированием у знакомого и изучал как Паскаль, так и Ассемблер, но вот только Ассемблер для Спектрума.

После учёбы - работа, потом ушёл в армию, потом вновь работа по специальности Электрика. Стал индивидуальным предпринимателем по электрике. И в недалёком прошлом завязал с электрикой ( ну почти завязал). Где-то в этом же периоде делал танки. Все же помнят Battle Tanks? Вот я и решил что-то подобное сделать. Опыта в создании игр было мало, но что-то получалось.

Но после очередной переделки основы, наткнулся на ZenGL. И увлёкся разработкой библиотеки. За период разработки получил достаточно не мало знаний, но они больше нужны на низком уровне и зачастую только один раз. Не нужно часто изобретать колесо, чтоб потом его просто использовать. Потому многие основы заложенные в ZenGL просто используются и не меняются очень многое время. Хотя правки всё равно приходится делать.

В общем на данное время я занимаюсь в основном программированием. А так же немного схемотехникой.

Почему я решил написать эту статью?

Достаточно недавно мне пришёл заказ на переделку каких-то частей сайта. Код был дан на Perl, а перевести его надо было на Pascal. Я бы наверно отказался, если бы не одно НО. Я и так очень долгое время отодвигал работу с сетью. Все наработки что я изучал были для статичных программ и к сети я не прикасался ни разу. И надо же было хоть когда-то начать.

И я решил что пора закончить откладывать и пора уже заняться.

За пару недель немного изучил HTML, сетевые запросы GET, POST. Ну и всякую мелочь. И уже в предвкушении думаю: "А может сайт создать на Паскале?!".

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

И я решил написать простенькую программу для работы с БД, после того как понял самое основное. Как для практики, так и для использования. У меня есть Game Stick Lite и у меня возникло давно желание "переделать его основу", точнее перелопатить весь список игр и впихнуть туда свои, и чтоб в Game Stick Lite всё нормально работало.

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

А в следующей статье, глядишь поделюсь готовой программой.

"Простые уроки"

Многим данные видео можно просто пропустить, они несут только основную информацию по работе с Lazarus. Многое объяснено до меня и у большинства с этим проблем обычно нет.

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

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

Что-то я здесь не буду ни расписывать, ни задевать. Очень многое по урокам расписано в книгах по Delphi а так же можете посмотреть уроки по Lazarus на ютубе (не мои). Пробежимся по тому о чём меня достаточно часто спрашивали и тем моментам, о которых я думаю стоит знать людям, которые будут использовать Lazarus.

Создание, открытие и сохранение проекта.

Работа с формой, компонентами. Изменение свойств компонент и тестирование кода.

Настройка IDE Lazarus и настройка проекта.

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

Расширенные примеры

Группы из кнопок SpeedButton

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

Извиняюсь за качество видео, записывал достаточно давно.

Так же в Lazarus есть возможность устанавливать множественные курсоры и работать с ними. Зажимаем Ctrl + Shift и левой кнопкой мыши выбираем место для очередного курсора в редакторе кода. В начале виде показываю как это работает.

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

Итог

Даже при том что многие сейчас не стремятся писать на Паскале, то рассматривая IDE Lazarus можно понять, что данная оболочка развивается и по сей день и имеет достаточно не малую функциональность. Позволяя настраивать как саму оболочку, так и её рабочее окружение.

FPC/Lazarus, Delphi и многие другие Паскали продолжают развиваться, какие-то больше, какие-то меньше. Люди продолжают использовать Паскаль в своих интересах и разработках. Паскаль позволяет делать проекты под разные платформы и при этом является компилируемым ЯП, чем не многие ЯП могут похвастаться (ни в коем случае это не занижение возможностей других ЯП!).

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

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

Я вас не призываю использовать Паскаль. Я лишь провёл маленький обзор на одну из его оболочек. А вы всегда в праве выбрать тот ЯП который вам больше всего подходит! )))


Доделаю проект, покажу что получилось в конечном итоге. Уж очень мне охота Game Stick Lite перелопатить. )))

Всем успехов!

Комментарии (62)


  1. Imaginarium
    02.08.2024 14:33
    +24

    Прочитав заголовок, надеялся в статье обнаружить описание особенностей языка с примерами в ООП, но этого нет. Надо было статью так назвать: "Lazarus IDE в 2024 году", и это было бы правильно.


    1. Seenkao Автор
      02.08.2024 14:33

      Я не очень люблю ООП и стараюсь его не использовать. Зачастую вклиниваю в ООП процедурный метод программирования, и потому, боюсь, мои примеры не очень полезны будут в этом плане.


      1. Imaginarium
        02.08.2024 14:33
        +4

        Ну и на здоровье -- я и говорю, проще название сменить.


  1. bodyawm
    02.08.2024 14:33
    +7

    И ObjPas и Delphi отличные языки. Недавно скачал понастольгировать Delphi 2010 и понял за что его люблю. Это максимальная экспрессивность!


  1. LuchS-lynx
    02.08.2024 14:33

    можно ли через Lazarus создавать/править файлы и оформление MS Office/Libre Office под Linux? Где можно об этом почитать с примерами?


    1. Seenkao Автор
      02.08.2024 14:33

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

      Люди занимались, но зачастую код теряется на просторах интернета.


    1. omxela
      02.08.2024 14:33
      +2

      Есть книжка: Корняков Василий "Программирование документов и приложений Ms Office в Delphi", БХВ-Петербург, 2005 (например).


    1. snowfox
      02.08.2024 14:33

      Есть пара ссылок, но я не знаю, в каком состоянии эти библиотеки.

      https://forum.lazarus.freepascal.org/index.php?topic=21868.0

      http://freepascal.ru/forum/viewtopic.php?f=5&t=11143


      1. Seenkao Автор
        02.08.2024 14:33

        Это одна и та же ссылка.


  1. NeoCode
    02.08.2024 14:33
    +2

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

    Однажды мне понадобилось провести какие-то эксперименты с самим языком, что-то с RTTI (я пишу некий труд, в котором сравниваю и анализирую фичи разных языков). И вот наткнулся на то, что там нужна версия fpc 3.3.1, а она почему-то еще не поставляется вместе с Lazarus. Увы, но везде сих пор используется 3.2.2.


    1. Seenkao Автор
      02.08.2024 14:33

      FPC 3.3.1 находится в разработке с очень давнего времени. Не знаю по какой причине их разделили, но возможно это какая-то промежуточная "тестовая" версия. Которую можно скачать кто хочет, но стабильности (вроде как) не гарантируют. Многие изменения уже были занесены в последнюю стабильную версию.

      Если сильно нужна версия FPC 3.3.1, то воспользуйтесь FPCUPDeluxe для установки этой версии. Хотя, сейчас наверно можно просто собрать FPC из командной строки. Я одну из версий FPC/Lazarus ради интереса и ставил используя командную строку. Вроде больших проблем не увидел.

      А Lazarus, умельцы, вроде как настраивали на другие ЯП. ))) Может просто в качестве редактора, точно не скажу.


    1. hurtavy
      02.08.2024 14:33
      +1

      Можно же установить с любой версией fpc, с помощью fpcupdeluxe


    1. Imaginarium
      02.08.2024 14:33

      я пишу некий труд, в котором сравниваю и анализирую фичи разных языков

      можно как-то подписаться на результат Ваших изысканий?


    1. ikle
      02.08.2024 14:33
      +2

      И синтаксис конечно на любителя, begin...end и некоторая многословность в синтаксических конструкциях (видимо Вирт пытался сделать язык более похожим на английский?).

      Вирт тут ни при чём: begin/end — это из Алгола, как, впрочем, и большая часть синтаксиса всех виртовских языков растёт именно из Алгола.


    1. Antlnet
      02.08.2024 14:33

      С RTTI функционал Lazarus достаточно урезан, в частности, основные методы TRttiContext. Если не ошибаюсь, перекрыты возможности искать тип по полному названию, как и альтернатива в виде прохода по всем типам тоже не реализована (есть просто коммент в исходном коде, что надежда умирает последней), как это сделано в Delphi. Это когда-нибудь будет исправлено, вы не в курсе?


  1. ABRogov
    02.08.2024 14:33
    +12

    Делфи, как много в этом звуке... я даже лицензию купил за 1,5куска. Из всего опробванного самое оптимальное по результату, когда нужен просто десктопный ехешник. Все эти богомерзкие куте даже рядом не стояли.


  1. dyadyaSerezha
    02.08.2024 14:33
    +5

    Будучи сам в далеком прошлом фанатом Borland Delphi, все же спрошу: в статье не написано главное - зачем читателю изучать современный Паскаль? Много предложений работы по нему? Или предложений мало, но программистов ещё меньше и поэтому они всегда нарасхват и с длинным рублем или даже, не побоюсь этого слова, юанем? Зачем?


    1. express
      02.08.2024 14:33
      +1

      Основное отличие современного паскаля мне видится в возможности разработки мобильных приложений и добавки разных упрощенных конструкций (если раньше надо было, скажем, inttostr(a) или booltostr(a), то теперь можно не париться и использовать просто a.ToString.

      Насколько паскаль востребован в плане трудоустройства не скажу, так как не профессиональный программист, но в сисадминской практике мне Delphi помогает в быстрой автоматизации всякой рутины: как пример - выбрал из списка комп и пользователя, ткнул 2 кнопки и удаленка со сгенерированным паролем по RDP готова. За годы накопилась куча проектов - справочники, авторассылка временных ваучеров доступа к wifi и т. п. Т. е. можно быстро наваять практически любое приложение со скромными аппетитами, кроме, пожалуй, драйверов (и то, наверное, их тоже можно) и при этом без предустановки тонны всяких фреймворков.

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


      1. barbaris76
        02.08.2024 14:33

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

        Пришлось всё переписывать на скриптах (


      1. dyadyaSerezha
        02.08.2024 14:33
        +1

        Для автоматизации рутины сисадмина/девопса на порядок лучше Python или PowerShell, если для Windows. У них кол-во библиотек раз в сто больше, чем у паскаля.


        1. express
          02.08.2024 14:33
          +2

          Может библиотек для питона и больше, но вот ни разу не испытал недостатка на дельфи. И как на питоне сделать нормальный оконный интерфейс? Из того что я видел были только фреймворки разной степени сырости.

          Я не брезгую писать cmd-скрипты для чего-то простого, но если удобнее работать в оконном интерфейсе я сделаю приложение. Можно конечно сделать что-то вроде "введите имя компьютера, а потом введите пользователя и нажмите enter", но мое решение мне кажется намного нагляднее и менее времезатратно.

          Hidden text


          1. dyadyaSerezha
            02.08.2024 14:33

            1) Питон, да, имеет несколько библиотек для дектоп-UI, но я их не пробовал даже. Также есть несколько библиотек для web-UI и web-приложений, где исполняемый код и браузер у клиента разделены сетью/интернетом. Но

            2) в подавляющее большинстве случаев никакого UI не надо, потому что все скрипты вызываются автоматически. Называется CI/CD, автоматическое управление инфраструктурой и прочее.

            3) Сколько предложений по работе с десктопным-UI видно сейчас? Думаю, в пределах одного процента. Ну, кажется, это всё, что нужно знать. Кстати, я сам большой спец именно по десктопному UI, но признаю этот печальный факт про 1% и делаю выводы.

            4) в приведенном примере: пользователи и компьютеры - очень много вертикального пустого пространства, в результате длинный вертикальный скрол. Текст для копирования - очень узкое окно с пустым местом справа, в результате ненужный четверной скрол по поризонтали в угоду ^красивости^.А можно ещё и word wrap сделать, чтобы без скрола вообще.


            1. Seenkao Автор
              02.08.2024 14:33

              Я бы с вами может и поспорил и примеры привёл и в диалогах поучаствовал...

              Но думаю у вас есть своё субъективное мнение и остальных вы просто не хотите "слышать".


            1. express
              02.08.2024 14:33

              >2) в подавляющее большинстве случаев никакого UI не надо

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

              4) в приведенном примере

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


              1. dyadyaSerezha
                02.08.2024 14:33

                Если все так хорошо, то зачем там вообще эти скролы? Уберите их. Нет? Тогда прав я.

                Насчёт того, откуда скрипт вызывается - либо из UI более высокого уровня, либо автоматически средствами проверки и анализа статуса системы, vcs и прочего.


    1. Seenkao Автор
      02.08.2024 14:33

      Как минимум для своего образования. Если человек хочет выбрать какой-то ЯП, то Паскаль далеко не худший выбор. Но это не значит что надо бежать изучать Паскаль и кричать что надо изучать именно Паскаль.

      Всё то же самое что и с остальными ЯП.

      Хотите знать, я зарабатываю используя Паскаль.


      1. dyadyaSerezha
        02.08.2024 14:33
        +1

        Рад за вас и за Паскаль, но дело не в вас, а в кол-ве предложений на рынке. Неужели не видите разницы? А изучать ещё один, похожий на другие, но очень мало распространённый язык не вижу смысла.


        1. Seenkao Автор
          02.08.2024 14:33

          Читайте, пожалуйста, что вам пишут, а не выдумывайте какие-то свои выводы.


          1. dyadyaSerezha
            02.08.2024 14:33

            Никто, ни один человек не сравнил кол-во предложений на рынке и зарплаты в этих предложениях.


            1. HemulGM
              02.08.2024 14:33
              +3

              Слушай, это делалось уже много раз. И никто не спорит, что вакансий на делфи меньше, чем, например, на с#. Что тут сравнивать ещё? Зп? Зп одинаково, а медиана по ЗП даже выше временами.

              У меня бот регулярно выводит статистику

              Вакансий на HH: 
              Delphi:       221  (-3)      ~105k (25-240)
              Pascal:       78   (-1)      ~60k  (30-200)
              Python:       3757 (-11)     ~80k  (17-250)
              C#:           2190 (+7)      ~70k  (0-300)
              C++:          2656 (+1)      ~120k (19-350)
              Swift:        445  (-9)      ~150k (15-540)
              Java:         3490 (-73)     ~60k  (0-150)
              Visual Basic: 96   (+5)      ~100k (25-200)
              Go:           1243 (-1)      ~150k (0-350)
              Ruby:         142  (-2)      ~130k (15-400)
              Kotlin:       1057 (-8)      ~100k (0-350)
              Rust:         124  (0)       ~150k (40-350)
              Fortran:      3    (0)       ~0k   (0-0)
              Dart:         152  (-3)      ~120k (20-300)
              
              Flutter:      252  (-4)      ~100k (0-300)
              FireMonkey:   1    (-1)      ~80k  (80-80)
              Electron:     57   (-7)      ~150k (50-330)
              Lazarus:      11   (0)       ~80k  (32-140)
              React Native: 223  (-4)      ~120k (17-350)
              1С:           6479 (-10)     ~80k  (25-350)

              Вакансий на делфи почти в 10 раз меньше, чем на с#, но всего в 2 раза меньше, чем на Свифт, почти в два раза больше, чем на раст, дарт, руби и столько же как на реакт.

              Вилка не сильно отличается от других, а медиана выше многих.


              1. dyadyaSerezha
                02.08.2024 14:33

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


                1. HemulGM
                  02.08.2024 14:33
                  +3

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

                  Swift, Rust, Dart, React - тоже не актуальны, вы знали? Цифры так говорят


                  1. dyadyaSerezha
                    02.08.2024 14:33

                    Откуда тогда нули в "от" взялись?

                    Всё перечисленные языки и фреймворки молодые сильно прибавили за время существования, то есть, есть динамика


    1. HemulGM
      02.08.2024 14:33
      +1

      Ну, во-первых, если у клиента есть потребность в решении, то никто не запрещает тебе написать его на Delphi. Клиент быстро получит решение и будет доволен.

      Во-вторых, много компаний которые не только используют Delphi, потому что кто-то когда-то им его создал и нужно допиливать, но и потому что создают новые решения на современном Delphi. Несмотря на все тенденции в языках, софт на Delphi создается очень быстро и требует меньше внимания в будущем, потому что нет никаких зависимостей. Я до сих пор могу на Win11 запустить софт на Delphi 20ти летней давности и он ни слова не обронит и будет без проблем работать.

      Где-то 10 лет назад, я написал свой первый коммерчески-успешный продукт для одного заказчика. С тех пор, он обращался ко мне лишь несколько раз, первые два раза - это были баги в расчетах, которые нужно было поправить, и два раза были обращения на добавление новых фич. До сих пор этот софт у них работает. А программа была не простая. Там и бд и сложные расчеты и 3D моделирование. Это была программа для расчета огромных ящиков по ГОСТу с изменяющейся моделью в реальном времени, базой заказчиков и историей их заказов. Программа создавалась ещё для XP, но они сами без проблем установили её на Win10, а сейчас может уже и на Win11. Программа обошлась им где-то в 300к + 100к на две новые фичи, а пользуются они ею уже 10 лет. Насколько это выгодно? Особенно, если бы это было какое-то решение на Web. А я потратил на эту программу где-то 3 месяца (параллельно с основной работой) + неделя.

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

      Также, на работе я поспорил с тех. лидом, что напишу мобильное приложение для просмотра 3D панорам быстрее, чем наши разработчики на Unity. И написал. В итоге, именно моё решение сейчас находится в некоторых магазинах Леруа Мерлен.


      1. dyadyaSerezha
        02.08.2024 14:33

        Много доводов, не имеющих отношения к языкам как таковым.


        1. HemulGM
          02.08.2024 14:33

          Это почему? Сам по себе язык мало что определяет. Мы говорим именно об инструменте. Вы сами написали про "Borland Delphi", сейчас это "RAD Studio" - инструмент, который позволяет создавать кроссплатформенные решения, красивые и современные GUI и что угодно по функционалу не менее удобно, чем в других инструментах.

          Сам язык Delphi на месте, со времен Borland, не стоял, а развивался и развивается по сей день. Сейчас в бете находится новая минорная версия RAD Studio 12.1. Развивают как язык (добавляя в том числе новые конструкции синтаксиса языка), так и IDE и рантайм библиотеку и штатные фреймворки (их там теперь два: старый добрый VCL и кроссплатформенный - FMX).

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

          То, что вакансий на том же hh по Delphi меньше, чем на популярные языки - всем известно. Особой проблемой это не является. Я в своё время побывал в разных частях страны и без особых проблем находил себе работу на Delphi и нигде я не был вынужден заниматься только "легаси". Конечно, во многих компаниях есть долгоживущие проекты, это разве плохо? Нет. Плохо, когда ты вынужден каждые несколько лет переписывать всё с нуля, потому что то уже устарело и не работает.


    1. VisualTech
      02.08.2024 14:33
      +2

      Я бы ответил на этот вопрос так, хотя ответ будет лежать через призму собственного опыта, который уже устарел. Когда то давно, а я из категории old school, из тех старых романтиков, которые думали (когда мне было лет 16) что Бил Гейтс сам MS DOS написал (винды ещё тогда не было), а Питер Нортон сам написал утилиты Нортона. И я когда то хотел создать нечто, чтобы стать как эти "великие люди". И само собой мы вели с "коллегами" флеймовые войны, какой язык круче. Я был приверженцем Си и Си++, не сказал бы что я гнобил паскаль, но уже в то время я считал его устаревшим. А однажды мой наставник (его уже и в живых давно нет), сказал, настоящий программист должен свой язык написать. И это засело у меня в голове, я ответил: "Точно, так и надо сделать". Все самое интересное началось когда я вернулся из армии, вместо MS-DOS появилась какая то Винда 95тая и надо было что-то с этим делать. А т.к. была востребованность в базах данных, однажды студенты мне подсказали, что есть такой продукт как Borland C++ Builder. Продукт показался мне абсолютно фантастическим, в одиночку можно было заворачивать проекты невероятных масштабов. В какой-то момент мне понадобились компоненты, решил писать сам. И тут я обнаружил, что все компоненты написаны в Delphi, на C++ Builder их не кто не пишет. Начал осваивать Delphi... И чем дальше погружался в процесс, тем чаще ловил себя на мысли, что в Паскале удобнее и понятнее.. В конце концов на C++ я уже не вернулся, мои стереотипы о Си и Паскале перевернулись. Прошло много лет, поменялись тенденции, всё движется в web. Но для меня ни чего не изменилось, могу только сказать что написал своя язык, понадобилось 20-25 лет и только после приобретения книги Вирта "Построение компиляторов", дело сдвинулось, до этого просто не хватало информации, произошло это в 2014 г. За это время Паскаль в виде Delphi и FPC оброс всевозможными библиотеками и для мня опять же, мнение не изменилось, с паскалем - один в поле воин.


      1. dyadyaSerezha
        02.08.2024 14:33

        Как раз Делфи более прогрессивный, чем С/С++, потому что в нем есть интерфейсная часть, которая компилируется в отдельную сущность и убирает необходимость в давным давно устаревших h-файлах. Но дело именно в том, что "один в поле войн" в корпоративной разработке (и в любых больших проектах) вообще не актуально. Всем нужны грамотные групповые игроки. А свой пет-проект можно писать хоть на чем.


  1. VisualTech
    02.08.2024 14:33
    +3

    Кто бы что не говорил, а на FPC можно изготовить почти всё что угодно. Я автоматизирую бизнес, использую в работе собственную платформу Дизель-Паскаль, изначально написанную в Delphi, затем портированную на FPC/Lazarus. В основе системы - собственный интерпретатор компилирующего типа с 2х объектно-ориентированных языков с подвязанной к системе библиотеке компонентов LCL. Это позволяет запускать приложения Дизеля на разных платформах без перекомпиляции (x86-64 Windwos, Linux, Aarch64 Linux), а наличие всевозможных компонентов для FPC, позволяет реализовать на FPC почти всё что душе угодно. Я сам использую:

    - доступ к FireBird, Postgres через компоненты IBX, ZEOS,

    -для построения отчетов LazReport (правда пришлось допилить для QR кодов и DataMatrix).

    -электронные таблицы - fpSrpeadSheet, позволяет выводить отчеты в Excel, ooCalc и читать данные из этих форматов, причем наличия установленного какого либо офисного пакета вообще не требуется.

    -обмен данными по http, ftp, эл.почта и т.д. через библиотеку Synaplse. А т.ж. черз тот же Synapse по tcp протоколу с разными устройствами.

    - web сервисы через fpWeb (можно и на synapse сделать), обмениваюсь данными через web сервисы с 1С, раздаю отчеты по http.

    -замечательные парсеры xml и json

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

    Приложение Дизель-Паскаль с базой FireBird, клиент на aarch-64 + ALT Linux.
    Приложение Дизель-Паскаль с базой FireBird, клиент на aarch-64 + ALT Linux.


    1. HemulGM
      02.08.2024 14:33
      +2

      Delphi уже давно не прибит гвоздями к Windows, а только среда разработки RAD Studio. И софт можно создавать куда презентабельнее, чем это позволяет LCL.


      1. VisualTech
        02.08.2024 14:33
        +1

        Я рад за Delphi, я так долго ждал кросс-платформенности, так и не дождался, надеялся на Kylix но его закопали. Но среда то всё равно прибита к win, к тому же в Delphi много ограничений на использование интерфейса дизайнера, не говоря уж о платности самой RAD Studio, а в Lazarus, я вообще могу любые его компоненты использовать, например, в какой-то момент, я отказался от собственного инспектора объектов, и просто использую тот что поставляется с Lazarus.


        1. HemulGM
          02.08.2024 14:33
          +2

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

          Например, если я захочу, чтобы у меня в поле Edit была кнопка - я просто вставлю туда кнопку. А если хочу, что несколько Edit были такими, я создам стиль для Edit и добавлю в него кнопку, а потом применю этот стиль к тем Edit которым захочу.
          Если я захочу иметь кнопку с Split частью, т.е. кнопку разделенную на две кнопки - я просто создам такой стиль и буду иметь возможность сколько угодно таких кнопок иметь и всё это без вообще строк кода. Если я хочу иметь список из сложных элементов, я могу сделать это десятком способов, могу запихать фреймы и каждый элемент будет фреймом, могу привязать датасет к списку и создать стиль для элементов этого списка и выводить любую информацию в любые элементы стиля.

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

          Всё что здесь отображено - это всё одни и те же штатные контролы, имеющие разные разные представления

          Всё что предоставляет мне RAD Studio с головой хватает для создания вообще любых интерфейсов. Я уже не один раз создавал приложение на основе проекта Figma, созданного для веб сервиса.


          1. VisualTech
            02.08.2024 14:33
            +1

            Да,красиво, удобно, особенно с кнопками в Edit. Но по своему опыту могу сказать, что самое главное, чтобы программа имела свое лицо и была узнаваемой. Как бы красиво это не было, я уже обратно на Delphi точно не вернусь, да и покупать дорого а воровать не хочется. Ну и лицензионные ограничения, чтобы использовать интерфейс дизайнера форм Delphi, это не так просто всё. И сейчас, приложения для бизнеса я создаю в Дизель-Паскаль. Он достаточно компактен, на любом рабочем месте, будь то Windows, Linux, aarch, x86, в случае какой-то засады, я могу открыть приложение в дизайнере и использовать отладчик.


            1. HemulGM
              02.08.2024 14:33

              Покупать не дорого, если уже имеешь доход, а если дохода нет, то и среда разработки для тебя бесплатная. Есть версия Community Edition, по возможностям приравнивается к Pro версии. Позволяет использовать Delphi бесплатно, если доход не превышает $5k в год.


            1. HemulGM
              02.08.2024 14:33

              Плюсом ко всем красотам нужно добавить то, что при любом DPI экрана, картинка будет масштабироваться пропорционально, не теряя качества и без расползания разметки (если стиль векторный, конечно же, как у меня тут).


              1. VisualTech
                02.08.2024 14:33

                Вот это да, вот это весомый плюс.


          1. dyadyaSerezha
            02.08.2024 14:33

            Всё что предоставляет мне RAD Studio с головой хватает для создания вообще любых интерфейсов.

            И web-интерфейсов тоже?


            1. HemulGM
              02.08.2024 14:33

              Web-like интерфейсов - да.


              1. dyadyaSerezha
                02.08.2024 14:33

                Не понимаю, это как?


                1. HemulGM
                  02.08.2024 14:33

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

                  "Любых интерфейсов" - это значит интерфейсов любой сложности. Хоть в виде 3Д сцены интерфейс делай


                  1. dyadyaSerezha
                    02.08.2024 14:33

                    Что такое как в веб?


                    1. HemulGM
                      02.08.2024 14:33

                      "Как веб" - это значит адаптивный, использующий принятые в вебе подходы и имеющий такой же привлекательный вид.


                      1. dyadyaSerezha
                        02.08.2024 14:33

                        Не уверен, что понимаю. Но насколько я знаю, многие (все?) адаптивные подходы были придуманы в десктопе. Как и привлекательность.


  1. TrueRomanus
    02.08.2024 14:33

    Самая большая проблема Delphi/Lazarus в том что для создания интерфейса необходимо использовать визуальный редактор и нет возможности набирать визуальную часть руками т.е. в виде подхода code-first. Я когда в свое время с большим бекграундом Pascal/Delphi перешел в Web и на другие desktop платформы понял что визуальное представление скорее мешает чем помогает в разработке. Все более современные на тот момент платформы разработки уже перешли на вариант когда ты описываешь визуальный интерфейс в виде HTML/XML/CSS/JSON/YAML/.. декларативного кода. В Delphi/Lazarus тоже есть такой вариант в виде dfm/lfm/fmx файлов но средства для адекватного редактирования этих файлов в среде разработки нет. На мой взгляд добавление такого средства или добавления декларативного языка помогло бы языку стать более современным средством разработки.


    1. Count_s
      02.08.2024 14:33
      +2

      Ерунду говорите. Никаких проблем построить интерфейс в рантайме ни там, ни там - нет.


      1. TrueRomanus
        02.08.2024 14:33

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

        В случае допустим XAML я скину следующее:

        <StackPanel>
                <muxc:PipsPager x:Name="FlipViewPipsPager"
                    HorizontalAlignment="Center"
                    Margin="0, 12, 0, 0"
                    NumberOfPages="10"
                    SelectedPageIndex="3" />
        </StackPanel>

        В случае QML я скину следующее:

        Rectangle {
            width: parent.width - 80
            height: 180
            anchors.centerIn: parent
            color: applicationThemeViewModel.pageUpperPanel
            radius: 8
        }

        В случае HTML я скину следующее:

        <span>
          <font color="red">ALERT!!!!</font>
        </span>

        Теперь проверните такой трюк с Delphi/Lazarus/RAD Studio... Сделаете скриншот Object Inspector? Сделаете скриншот Structure? Сделаете скриншот Form Designer? Или всего сразу?

        Тоже самое касается документации в которой нет кода, там сплошные скриншоты вышеупомянутых окошек. Это относиться к таким моментам что нельзя открыть на гите и понять что у тебя там на форме без RAD Studio (нельзя сделать фикс в блокноте или любом другом текстовом редакторе за пределами RAD Studio) и много других казалось бы маленьких моментов из-за которых удобство убивается. Еще раз я не говорю что язык плохой, среда плохая и в целом инструмент плохой и все это не развивается, я говорю что конкретно этот аспект остался таким каким был еще со времен Delphi 5 (когда я впервые начал на нем разрабатывать) и не менялся чуть более чем полностью. Подход "редактируем дизайн только в дизайнере" это уже устаревший подход. Сейчас программисты для дизайна используют декларативные языки а если прям есть настоящие дизайнеры в команде то для них есть специальный отдельный продукт где да все редактируется в визуальных дизайнерах, такое есть и в Visual Studio(Blend) и в Qt(Design Studio) и много где еще.


        1. HemulGM
          02.08.2024 14:33

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


        1. HemulGM
          02.08.2024 14:33
          +1

          object Button1: TButton
            StaysPressed = True
            DisableFocusEffect = True
            Images = ImageList24
            ImageIndex = 5
            Position.X = 128
            Position.Y = 54
            Size.Width = 101
            Size.Height = 32
            Text = 'Label'
            TextSettings.HorzAlign = Leading
            TextSettings.Trimming = None
            object Label103: TLabel
              Align = Client
              StyleLookup = 'labelstyle_badge_container'
              TextSettings.WordWrap = False
              Text = '1'
            end
          end

          Вот это можешь скопировать и нажать Ctrl+V на форме или любом контроле

          Получаем

          И в любой момент ты можешь просто взять и посмотреть код твоей формы. Изменять, удалять и создавать новые элементы. Можешь просто взять и заменить целиком класс (лишние свойства удалятся). Я так постоянно делаю, когда занимаюсь дизайном стилей. Нужен мне фон и его эффекты в одном контроле, но фон нужен не в виде Circle, а в виде RoundRect, скопировал в блокнот, заменил TCircle на TRoundRect, забрал из блокнота и вставил куда нужно.

          Но с нуля форму писать текстом нет никакого смысла. Гуглить каждый класс контрола, писать вручную все его свойства. Накой черт этим заниматься, если можно просто выбрать из списка, увидеть все доступные свойства и изменить на свой вкус? И при этом я не имею никаких ограничений, который ты выдумываешь. Дизайнер лишь сам за тебя пишет код. Только быстрее и точнее.


          1. TrueRomanus
            02.08.2024 14:33

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

            Уж простите но как это не вяжется с

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

            Т.е. ничего создавать и изменять Вы не сможете без дизайнера. И более того все значения всех свойств Вы тоже не знаете что сводит смысл в каком-либо редактировании этого текста на нет (ну кроме каких-то минимальных вещей).

            И при этом я не имею никаких ограничений, который ты выдумываешь.

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

            Вот это можешь скопировать и нажать Ctrl+V на форме или любом контроле

            Images = ImageList24

            Что это такое? и что я получу скопировав это? У меня нет этого компонента:)

            Position.X = 128
            Position.Y = 54
            Size.Width = 101
            Size.Height = 32

            Моя форма может быть меньше/больше переданных размеров то что тогда?

            object Button1: TButton

            Что если на моей форме уже есть Button1?


            1. HemulGM
              02.08.2024 14:33
              +2

              Что не вяжется?

              Редактировать форму ты можешь текстом.

              В полной мере ты можешь сделать все через текст, потому что текст является конечным результатом, а не дизайнер. Программа в конечном итоге использует именно текст. Который ты можешь редактировать, даже не открывая дизайнер. С подсветкой синтаксиса и всем прочим.

              Здесь все понятно?

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

              В остальном никаких отличий от ваших "преимуществ" нет. У вас есть лишь недостаток - отсутствие визуального дизайнера интерфейса. А тут есть и дизайнер и возможность его описывать текстом.

              Нет такого компонента - он про игнорируется.

              То, что у тебя форма меньше - не играет никакой роли. Он вставится и будет по тем координатам. Не нравится измени. Абсолютные координаты - это не единственный способ позиционирования.

              Если у тебя уже есть Button1, он станет Button2 или другая другая цифра в сочетании с названием класса.

              Все эти, выдуманные вами, проблемы есть и в ваших примерах выше.

              Повторю ещё раз. Если у вас только декларативный вариант интерфейса, то в делфи тот же декларативный + есть отдельный инструмент делать это визуально.


  1. piton_nsk
    02.08.2024 14:33

    Начинал я программировать ещё со Спектрума

    Наш человек.

    Я бы посоветовал переходить на шарпы, тем более что автор дельфей и шарпов один)


    1. dyadyaSerezha
      02.08.2024 14:33

      Тем более, что в .NET есть фреймворк для создания универсальных приложений под разные платформы/OС.