A A A A Автор Тема: Изучаю Паскаль. Присоединяйтесь.  (Прочитано 58342 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн yacc

  • *****
  • Сообщений: 558
  • Благодарностей: 11
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #1020 : 07 Фев 2026 [14:33:44] »
Этим всем только на ардуине и заниматься.
ОнСтеп собирается на ардуине. На нем же измеритель засветки и зоны Бортле или астротрекер. Более сложное на малинке.
Дельфи ни там ни там нет

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 286
  • Благодарностей: 37
    • Сообщения от Павел Васильев
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #1021 : 07 Фев 2026 [14:37:59] »
И у вас этого нет в вашем репозитории, в особенности для Raspberry PI или Ардуино
У нас несколько иные задачи, но тоже астрономические, на всё и вся мы не замахиваемся, система в развитии и если кто-то ещё не выучил Паскаль, а знает только С/С++ или даже просто Python, то тоже может подключиться. Дел хватит всем. Поэтому выбор пал на Delphi, в RAD Studio уже есть поддержка стандарта языка C++23 и есть компоненты Delphi4Python, а в Лазарусе, к сожалению, поддержки языка Cи вообще никакой нет, даже внешнего си LLVM компилятора. Так что он отстаёт, импорт пакетов и проектов из Object Pascal в среде есть, но по факту пока только времён Delphi 7й версии. 
Астромодель нооэволюции Млечного Пути https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн yacc

  • *****
  • Сообщений: 558
  • Благодарностей: 11
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #1022 : 07 Фев 2026 [14:41:20] »
в RAD Studio уже есть поддержка стандарта языка C++23
Увы, повторное использование кода даже в рамках С/С++ 2003 у вас не выходит пока.

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 286
  • Благодарностей: 37
    • Сообщения от Павел Васильев
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #1023 : 07 Фев 2026 [14:51:54] »
повторное использование кода даже в рамках С/С++ 2003 у вас не выходит пока.
Видимо у вас какая-то старая версия, вот у вас и не выходит. У нас, например, все с++ проекты "Астрономия на персональном компьютере" плюс дополнения, отлично компилируются и классическим classic борландовским компилятором и Modern 64 LLVM, не понятно что вам ещё надо для плодотворной работы, если вы умеете кодить на плюсах, а не на Паскале.
Астромодель нооэволюции Млечного Пути https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн yacc

  • *****
  • Сообщений: 558
  • Благодарностей: 11
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #1024 : 07 Фев 2026 [15:31:59] »
Видимо у вас какая-то старая версия, вот у вас и не выходит.

Не выходит оно - у ВАС. Просто вы, походу, не понимаете что такое "повторное использование кода".
Мне легко это показать на примере, который вы же и приводили и который лежит у вас в репозитории:

А именно вот этот:
Цитата
// листинг 1
   TFormHipparcos* FormHipparcos;
    FormHipparcos = new TFormHipparcos(this);
    try {
      FormHipparcos->ShowModal();
    } __finally
    {
        FormHipparcos->Free();
    }

этот код - чисто абракадабровский, ибо в стандарте языка нет __finally

Портируемая версия, которая делает аналогично, выглядит так, если делать ее правильно
Цитата
// листинг 2
TFormHipparcos* FormHipparcos = 0;  // инициализация указателя обязательна для аккуратного кода!
try
{
   FormHipparcos = new TFormHipparcos(this); // new вызываем внутри try
   FormHipparcos->ShowModal();
   FormHipparcos->Free();
}
catch ( std::bad_alloc& )
{
   throw;  // нет тут очистки ибо new не отработал
}
catch ( ... ) // очистка только если new и конструктор прошел правильно
{
   FormHipparcos->Free();
   throw;
}

Как видно - там стоит thow - это функциональный аналог того, что написано у вас - блок try не ловит исключения в вашем коде, поэтому тут мы их и перебрасываем коль поймали.

А повторное использование кода - это то, что аналогичный сценарий, как в листинге 1 у вас используется в нескольких обработчиках: код идентичен с точностью до типов.

В конце 90-х на С++  я бы тупо использовал препроцессор:
Цитата
// листинг 3
#define DO_FORM (T,pThis) T* ptrT = 0; \
   try                    \
   {                            \
      ptrT = new T(pThis);     \
      ptrT->ShowModal();       \
      ptrT->Free();            \
   }                            \
   catch ( std::bad_alloc& )    \
   {                            \
      throw;                   \
   }                            \
   catch ( ... )                \
   {                            \
      ptrT->Free();            \
      throw;                   \
   }

и тогда обработчики форм выглядели бы так:
Цитата
// листинг 4
SomeForm::SomeHandler ( SomeParams )
{
   DO_FORM (FormHipparcos,this)
}
// ... сколько угодно типовых обработчиков
SomeForm::SomeHandlerN ( SomeParams )
{
   DO_FORM (FormClassN,this)
}

все! в обработчике одна строчка и повторное использование кода. Копи-пастом я бы не занимался.

Можно возразить, что это нехорошо для С++, макросы использовать.  Но уже средства C++ 2003 позволяют сделать шаблонный класс чтобы сделать вот так:
Цитата
// листинг 5
SomeForm::SomeHandler ( SomeParams )
{
   TFormProcessor<SomeForm,FormHipparcos>(this).Do();
}
// ... сколько угодно типовых обработчиков
SomeForm::SomeHandlerN ( SomeParams )
{
       TFormProcessor<SomeForm,FormClassN>(this).Do();
}

Одна строчка!

Ну или хотя бы так
Цитата
// листинг 6
SomeForm::SomeHandler ( SomeParams )
{
   TFormProcessor<SomeForm,FormHipparcos> aProcessor(this);
   aProcessor.Do()
}

Дельфи имеет дженерики ? - да, имеет.
Он позволят сделать повторное использование кода в стиле листинг 6 - да, позволяет.
Вы это используете ? - нет, вы копи-пастите.

И к слову - про try _finally что у вас: в реале блок try в целом не ловит никаких исключений и _finally работает перед закрытием приложения - так как только на его уровне есть перехват исключений. Вы мне можете возразить "у меня ничего не падает"
Ну так с "у меня ничего не падает" без потри общности можно написать для хобби проекта еще проще, а именно вот так

Цитата
// листинг 7
SomeForm::SomeHandler ( SomeParams )
{
   TFormHipparcos* FormHipparcos = new TFormHipparcos(this);
   FormHipparcos->ShowModal();
   FormHipparcos->Free();
}

и скорее всего у вас ровно также "ничего падать не будет"   :)

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 286
  • Благодарностей: 37
    • Сообщения от Павел Васильев
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #1025 : 07 Фев 2026 [17:02:58] »
Как видно - там стоит thow - это функциональный аналог того, что написано у вас - блок try не ловит исключения в вашем коде,
Ловит вполне себе в случае чего, на практике проверено. И вообще вы отправьте свои возражения Эмбакадебре, это их код и тамошние сишники и не догадываются, что в Хьюстоне проблемы. Но возможно вы правы в каком-то другом случае так и надо, но у них здесь вызов формы их либы VCL, поэтому им лучше знать как безопаснее её вызывать и создавать, вероятно в исходниках есть дополнительные указания на это, не проверял. Но народ не жалуется, вы первый.
Астромодель нооэволюции Млечного Пути https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн yacc

  • *****
  • Сообщений: 558
  • Благодарностей: 11
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #1026 : 07 Фев 2026 [17:15:53] »
Ловит вполне себе в случае чего
Ловит он его на уровне приложения - в WinMain, а не в обработчике - там нет вообще ни одного catch
Поэтому в целом можно вообще не писать никаких try для хобби-проекта ( листинг 7 ) - все равно сгенерированный автоматически обработчик в WinMain это поймает.

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 286
  • Благодарностей: 37
    • Сообщения от Павел Васильев
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #1027 : 07 Фев 2026 [17:47:12] »
Ловит он его на уровне приложения - в WinMain, а не в обработчике - там нет вообще ни одного catch
Спасибо за подсказку, если что так и сделаем, но я знаете ли больше привых интерфейсы программ на Паскеле создавать. Гораздо убобнее и быстрее, и трудозатраты меньше.
Астромодель нооэволюции Млечного Пути https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн LeftUser

  • *****
  • Сообщений: 34 995
  • Благодарностей: 1104
  • Кирилл ㋛
    • Сообщения от LeftUser
    • Часы
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #1028 : 10 Фев 2026 [11:56:03] »
интерфейсы программ на Паскеле создавать
На Дельфи хотели сказать. Хотя C# для этих целей подходит куда больше. Могу сравнить. И на том и на другом зарабатывал, а не любительски что-то пописывал. Последние 20 с лишним лет в основном на С++, и ГУИ тоже, для него есть хорошая купленная библиотечка https://bcgsoft.com/ Питерские ребята давно её пишут.

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 286
  • Благодарностей: 37
    • Сообщения от Павел Васильев
Re: Изучаю Паскаль. Присоединяйтесь.
« Ответ #1029 : 11 Фев 2026 [07:30:24] »
На Дельфи хотели сказать. Хотя C# для этих целей подходит куда больше.
Куда уж больше? Откройте в Delphi из коробки палитру компонентов и вы увидите, что в ней их и так чересчур много. Любители всяких интерфкейсных изысков и рюшечек ставят ещё больше пакетов с тысячами доп компонентов. Потом при появлении новой версии IDE только переустановкой и занимаются, забыв про программирование. А если ваши Питерские перестанут поддерживать купленную вами библиотеку? Мигрировать на Pascal придётся. Здесь всё есть в достатке. Зачем лишние сложности? Я вот для своих пакетов компонентов 3D графики проверяю поддержку только последней версии RAD Studio, остальные инструкции компиляторам, начиная с Delphi 7 и С++Builder 6 удалил из исходников. Кому надо найдут старые архивы на sourceforge.net. Но уже лет 5 отмечается практически полная совместимость снизу вверх в GUI по компонентам. Трудоёмкость поддержки новых релизов сократилась примерно в 10 раз. И зачем мне С#? Когда и в Delphi можно всё сделать более понятно, быстрее и читабельней.

Астромодель нооэволюции Млечного Пути https://gitverse.ru/astrogeoscenter/astrobloq