LINUX.ORG.RU

fpc/pascal текущее состояние версий

 , , , ,


0

4

добрый день, товарищи-колдуны!

на текущий день состояние с версиями - не совсем понятно (мне).
судя по ссылкам - работа идет:
github
gilab

на данный момент:

3.2.2 release
3.2.4 rc1/rc2
3.2.3
3.3.1

внимание вопросы:
вопрос1: кто в теме, пояснить что к чему?
вопрос2: кто-что использует, текущие/для разработки fpc/глюки-особенности итд
спасибо

p.s.
понятное дело, что текущая рабочая версия fpc-3.2.2 (по рекомендация офсайта).
естественно, тема связана непосредственно с Lazarus-IDE
хотелось-бы услышать других «колдунов» по поводу «темы топика».

add сопутствующие темы
fpc/AI
March 28, 2026

ubuntu9.10/build fpc/lazarus
2010.x.x / Сборка FPC+Lazarus из своих исходников в Ubuntu 9.10

FPC 3.3.1
January 17, 2024

Getting started building FPC
September 14, 2024

ответ от друзей:
lazarus.freepascal.org

★★★★★

Последнее исправление: sunjob (всего исправлений: 11)
Ответ на: комментарий от firkax

прочитайте хотя-бы одну страницу, а уже потом высказвайтесь... :о)

sunjob ★★★★★
() автор топика
Ответ на: комментарий от seiken

RAII нет, ну и хрен с ним,

Во Free Pascal’е у классов есть и конструктор и автоматически вызываемый деструктор.

Объекты уничтожаются вручную (в finally блоке), или автоматически, если содержатся в контейнере навроде TObjectList или TComponentList. GUI-объекты (panel, label, combobox, button и другие) уничтожаются автоматически.

считаем, что все исключения - ошибочные ситуации, требующие ручного вмешательства пользователя, или не требующие, но утечку ресурсов толерируем (ГУЙ можно всегда перезапустить)

А пользователям такое понравится? Во Free Pascal’е есть try/except для обработки ошибок и try/finally для освобождения ресурсов. Есть ещё finalization раздел у модуля.

anonymous
()
Ответ на: комментарий от sunjob

Про ИИ для ускорения выпуска FPC.

В начале лета, не помню точно, в email-списке разработчики Lazarus’а выразили недовольство разработчикам FPC затягиванием выпуска новых версий. (Lazarus и FPC делают разные люди и не согласуют между собой работу никак)

Разработчики FPC сказали что проверяют нет ли ошибок. На что разработчики Lazarus сказали «сколько можно проверять уже два года проверяете. Или вы выпускаете 3.2.4, или мы делаем форк FPC».

Разработчики FPC испугались и выпустили 3.2.4 release candidate, однако на этом дело и остановилось.

Дело в том, что FPC попал в известную ловушку общественных open source проектов: пока программу мало кто использует, она разрабатывается быстро, но как только программа становится популярной, то разработка замедляется до нуля, потому что разработчики боятся сделать ошибку. Если вдруг будет ошибка, а много кто использует программу, то у всех программы поломаются. Поэтому разработчики просто боятся делать выпуск и сидят.

В версии 3.3 уже давно анонимные функции и ссылки на функции, и нормально работает, но версия 3.4 похоже не будет выпущена никогда. Потому что боятся.

anonymous
()
Ответ на: комментарий от sabacs

Нет. Но можно организовать, вроде бы

Destroy - это деструктор

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

uses
  SysUtils;

type
  TMyClass = class
  private
    InternalStuff: TObject;
  public
    constructor Create;
    destructor Destroy; override;
  end;

constructor TMyClass.Create;
begin
  inherited Create; // Call the ancestor constructor at the beginning
  InternalStuff := TObject.Create;
  Writeln('TMyClass.Create');
end;

destructor TMyClass.Destroy;
begin
  Writeln('TMyClass.Destroy');
  FreeAndNil(InternalStuff); // will call InternalStuff.Destroy
  inherited Destroy; // Call the ancestor destructor at the end
end;

var
  C: TMyClass;
begin
  C := TMyClass.Create;
  try
    // use C
  finally
    FreeAndNil(C); // will call C.Destroy
  end;
end.
anonymous
()
Ответ на: комментарий от sabacs

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

Но когда инстанс уже сконструирован, освобождать в общем случае его надо руками.

seiken ★★★★★
()
Ответ на: комментарий от anonymous

Ну это понятно, это примерно где-то рядом такой же костыль, как в питоне с менеджерами ресурсов и «with».

Если что, я не жалуюсь.

seiken ★★★★★
()
Ответ на: комментарий от seiken

тут читал в инете, видимо имеется в виду, если в конструкторе генерится исключение, деструктор вызывается автоматом

Да это так, но я то имел в виду что-то типа RAII.

sabacs
()
Ответ на: комментарий от anonymous

Есть ещё finalization раздел у модуля

а «сначало» идет инициализация. т.е. эти две секции работают в паре: инициализируем а потом утилизируем то, что создали в «начале».

sunjob ★★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от anonymous

в статье, по ссылке, об этом и говориться.
только одна из причин не «боязнь» выпуска, а обычная нехватка рессурсов, людей, времени, выгорание, итд, упоминается так-же особенность/методы/рулежка «выпускающего редактора»...
(у меня сложилось «такая ситуация»)

sunjob ★★★★★
() автор топика
Ответ на: комментарий от sunjob

Да. Всё же, по моим наблюдениям, нехватка manpower вовсе не в разработке. Например, не было никаких оснований задерживать bugfix 3.2.4 на 2 года. Разработчики говорят что они долго перепроверяли, как будет работать на разных платформах, не портит ли совместимость с Delphi. А это и есть боязнь какой-то неожиданной ошибки.

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

Совсем по-другому устроена разработка в Lazarus. Там у них выпуски по графику, примерно раз в год новая версия. Сначала она глюкавая, постепенно отлаживают. Зато относительно быстро развивается, поддерживает Electron, Android. А разработчиков в Lazarus даже ещё меньше чем во Free Pascal Compiler.

anonymous
()
Ответ на: комментарий от anonymous

долго перепроверяли, как будет работать на разных платформах, не портит ли совместимость с Delphi

ну да, это тоже было... упустил из виду :о)

sunjob ★★★★★
() автор топика

Если кому-то интересна тема компиляции Lazarus, то я вот что могу сказать:

Зачем вообще надо компилировать Lazarus? Это когда через GitLab сообщил разработчикам об обнаруженной ошибке, они ответили «Написали patch, проверьте», то тогда надо скачать с GitLab trunk исх. текста Lazarus’а и проверить.

Надо распаковать архив куда-нибудь, создать папку для настроек Lazarus’а. В Linux можно создать папку в ~/.config/lazarus, например ~/.config/lazarus/test1

В Windows можно создать в AppData, или на одном уровне с папкой с исходным текстом Lazarus.

В Linux перейти в директорию с исходным текстом Lazarus и дать команду make clean bigide

Предварительно должен быть установлена какая-нибудь версия Lazarus’а из дистрибутива (или скачать уже собранную).

В Windows для компиляции Lazarus’а лучше создать сценарий (какая-нибудь версия уже должна быть установлена в c:\lazarus:

SET LazarusDir=C:\lazarus
SET PATH=%LazarusDir%\fpc\3.2.2\bin\x86_64-win64;%PATH%

make.exe clean bigide

В Linux можно скомпилировать для разных библиотек управляющий элементов (gtk2, gtk3, qt5, qt6). Библиотека указывается в переменной LCL_PLATFORM

Например: LCL_PLATFORM=gtk2 make clean bigide - создаст IDE для GTK 2.


Теперь о запуске Lazarus IDE.

Если папка с исх. текстом Lazarus называется lazarus-main, то запускается вами скомпилированная версия так: lazarus-main/lazarus --pcp=~/.config/lazarus/conf1

  • это если вы создали папку для этой версии Lazarus’а в качестве ~/.config/lazarus/conf1.

Если же в Lazarus’е необходимо установить какие-то пакеты в которых есть компоненты, появляющиеся в палитре компонентов IDE, то Lazarus IDE при установке таких пакетов автоматически перекомпилируется и новая версия появляется в bin папки, которая используется для хранения настроек.

Если вы указали папку для настроек ~/.config/lazarus/conf1, то новый Lazarus будет в ~/.config/lazarus/conf1/bin/lazarus

И запускать надо будет ~/.config/lazarus/conf1/bin/lazarus --pcp=~/.config/lazarus/conf1

anonymous
()
Ответ на: комментарий от Shadow

на rust кодит быстрее и понятнее для человеков

Как-будто мамкины вайбкодеры разбирают лапшу которую им наколбасила ИИшница. Вангану что 80% вообще не знают раст. Чтобы код был понятный пишется просто правильный AGENTS.md, язык можно брать абсолютно любой.

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

SET LazarusDir=C:\lazarus
--pcp=~/.config/lazarus/conf1

намешали все в одну кастрюльку (не помешало-бы подрихтовать текст, с соотв. указанием где винда, где линух)

sunjob ★★★★★
() автор топика
Ответ на: комментарий от no-such-file

Чтобы код был понятный пишется просто правильный AGENTS.md, язык можно брать абсолютно любой.

Карпаты, перелогиньтесь! (он постоянно отвешивает телеги типа «разрабатывают суперкоммерческий функциональный продукт одним правильным промптом»)

Shadow ★★★★★
()
Ответ на: комментарий от novus

background-image: url(«/home/user/1.jpg»); background-size: cover;

оспади, и в лазарусе уже css! хоть бы под капотом у этого не электрон был, только мне приглянулось!

pihter ★★★★★
()
Ответ на: комментарий от anonymous

автоматически вызываемый деструктор

чииииииво? Вроде, я как то натыкался на какую-то экспериментальную фигню по этому вопросу, но полноценных авто-деструкторов при выходе объекта из видимости, как в плюсах, насколько мне известно – нет. Надо руками звать.

pihter ★★★★★
()
Ответ на: комментарий от pihter

заяс! да ты читай внимательно, нить не теряй?!
там разговор идет про «новый навороченный компонент» - TyControls!
к стати, я на глаз заметил, что лазарь раз в 5-6 дольше собирает бинарник с данным компонентом, возможно, из-за css!

sunjob ★★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 4)
Ответ на: комментарий от sabacs

ну что-же, получается для Record - реализовано что-то похожее на «очистку», ура! :о)
только, имхо, нужно реализовывать:
1. прозрачно (ну или, хотя-бы, рулить ключами/модификаторами)
2. весь стек объектов/захват памяти
иначе будет эта постоянная зубная боль - «тут играем, тут не играем, тут рыбу заворачивали» (R)

p.s.

что-то у них там отвалилось

да, вики отвалились

sunjob ★★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от sunjob

Очевидно что финализаторы для record существовали с момента введения в язык управляемых типов, иначе бы было нельзя их использовать в качестве полей записей. Просто сейчас этот api стал публичным.

sabacs
()
Ответ на: комментарий от sabacs

ну да... не сильно-то задумывались, использовали себе и наслаждались! :о)

sunjob ★★★★★
() автор топика
Ответ на: комментарий от sunjob

Так а я про него и говорю, с чего ты взял что я нить потерял? Енот :) интересная штука, надо будет глянуть. Да и ксс меня не пугает, просто обломно будет если этот новый гуи, который вы обсуждали, на деле окажется электронном с паскаль-биндингами

pihter ★★★★★
()
Ответ на: комментарий от sunjob

ну что-же, получается для Record - реализовано что-то похожее на «очистку», ура!

Я как-то ковырял вопрос и искин меня научил в автовызов деструктора для любого потмка tobject но оно там вроде было не официальное и экспериментальное и выглядело страшно, но работало как в raii

pihter ★★★★★
()
Ответ на: комментарий от Shadow

одним правильным промптом

Вполне возможно. Только чтобы найти «один правильный промпт» нужно очень много попыток. Но для начала агенту лучше объяснить что такое «понятный код», желательно на примерах.

no-such-file ★★★★★
()
Ответ на: комментарий от pihter

ну... лектрон засунуть туда это надо постараться.
а вот то, что у меня подтармазнулось «сразу усе» - это факт! :о)

sunjob ★★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария