LINUX.ORG.RU

Lazarus 1.6.4

 , ,


2

3

Вышла новая версия свободной кроссплатформенной среды разработки на языке Object Pascal. Данная версия собрана при помощи Free Pascal версии 3.0.2 (предыдущая использовала 3.0.0).

Данный релиз является корректирующим.

Lazarus по функциональности сопоставим с некогда популярной проприетарной средой разработки Delphi, однако является кроссплатформенным (поддерживает Windows, GNU/Linux, FreeBSD и macOS).

>>> Подробности



Проверено: Shaman007 ()
Последнее исправление: sudopacman (всего исправлений: 2)

Ответ на: комментарий от Vudod

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

В C/C++ код

if(x != 0 && y/x > 100) { /* some code */ }

никогда не приведет к делению на 0. Независимо от опций компиляции, оптимизаций и т.д. Разве что при баге в компиляторе, но на то он и баг.

Что мы упустим при этом?

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

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

вкусовщина

Уважаемый, вы внимательно читали тред? Я писал, что все изложенное — сугубо ИМХО, и подчеркивал, что спорить о вкусах вещь малополезная. Нет, обязательно какой-нибудь персонаж упрется в субъективность оценки. Да, вкусовщина. Да, мне нравится кремовый торт, а кому-то бараньи ребрышки. Дальше что? Ну предложите свой метод полностью объективной оценки языков программирования и дерзайте, сравнивайте.

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

Ну запустил, ну обычная IDE, что не так то?

IDE предполагает ее использование, а не «ну запустил». Понятно, что это говно запускается. Но это единственный тест, который проводят разработчики перед выпуском новой версии.
Вы поработайте с этой IDE, попробуйте смастерить в нем хотя бы hello world.

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

Говорят, что и на Perl можно написать читаемую программу, но встречаются-то в основном обфусцированные уродцы.

Ровно как и на паскале. Только для этого даже обфусцировать необязательно.

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

Вы поработайте с этой IDE, попробуйте смастерить в нем хотя бы hello world.

Я в этой IDE работаю, демон для linux (ARM) на работе пилю. Строк хз сколько, но модулей 20 уже есть. И по этому вообще, не понимаю ваших голословных обвинений.

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

Должен заметить - говно этот лазарус.

Delphi ещё хуже.

Допускаю, что это так. Но тут речь о lazarus.

Что Delphi, что Lazarus - это мощный инструмент для RAD, т.е. при наличии мозгов можно не тратить время на оверхед, а быстро собрать из мегаблоков проект.

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

IDE предполагает ее использование, а не «ну запустил». Понятно, что это говно запускается. Но это единственный тест, который проводят разработчики перед выпуском новой версии.
Вы поработайте с этой IDE, попробуйте смастерить в нем хотя бы hello world.

Тут уж вы, батенька, погорячились. Как раз хелловорды в Лазаре писать вполне себе. Вот, ради интереса поставил — окошко с надписью создать совершенно плёвое дело.

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

Тут много вариантов. Например,
- Обрамить вычисление гардом с принудительной установкой/возвратом состояния {$B-}.
- Выставить гард с выдачей ошибки при неправильной опции.
- Тривиально выставить опцию по месту.
В любом случае, у вас есть и инструмент, и средства контроля для достижения и одного, и другого желаемого поведения, причём в том числе и даже вперемешку, если такое зачем-то потребовалось.

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

Это другой вариант.
То, что было, это аналог static:

const a: Integer = 5;

procedure X;
const b: Integer = 6;
begin
end;

a и b инициализируются единожды при старте программы, сохраняют значения между вызовами.
В варианте с
var a: Integer = 5;
инициализация выполняется при каждом вхождении переменной в область видимости. Опцией можно задать другую семантику для инициализированных констант, затребовав их размещение в памяти только для чтения.

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

Плюс, никто не отнимет не зависящий от опции вариант:

if x<>0 then if y/x>100 then
  ...;

или с действием на случай x=0:

if x<>0 then
  if y/x>100 then ...
  else
else ...;

или

if x=0 then ...
else if y/x>100 then ...;

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

Плюс, никто не отнимет не зависящий от опции вариант:

И почему это выглядит как говнокод?

NextGenenration ★★
()

ClearOS :-)

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

Плюс, никто не отнимет не зависящий от опции вариант:

И этот код не оскорбляет чувство прекрасного в тебе?

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

Я в этой IDE работаю, демон для linux (ARM) на работе пилю. Строк хз сколько, но модулей 20 уже есть. И по этому вообще, не понимаю ваших голословных обвинений.

То есть и с редактором проблем у вас нет? :)

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

демон для linux (ARM) на работе пилю

Пилите, хорошее занятие... Главное - чтобы эта работа вам нравилась... :-)

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

Что Delphi, что Lazarus - это мощный инструмент для RAD, т.е. при наличии мозгов можно не тратить время на оверхед, а быстро собрать из мегаблоков проект.

Именно из-за этого около 90% проектов на дельфи и выглядят как говно, и работают как говно.
Я помню только несколько проектов на Delphi, которые заслуживают внимания и не падают на каждый чих. Но эти приложения не используют VCL (или как там этот монстр назывался?) и работают исключительно под windows.

А при наличии мозгов лучше не использовать ни дельфи, ни тем более лажарус.

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

Значит там плохой оптимизатор. Представьте инструкцию вида:

if (ln(x) > ln(y)) and h then
begin
{}
end;
Если верить вам, аналог такого кода C/C++ программист должен оптимизировать вручную, переставляя выражения.

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

демон для linux (ARM) на работе пилю

Пилите, хорошее занятие... Главное - чтобы эта работа вам нравилась... :-)

Вы промахнулись. Это AntonyRF что-то там пишет на паскале для арм. Вон некоторые и на жабаскрипте для ардуины пишут. И тоже очень довольны.

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

C/C++

Программирую лишь на BASIC и Pascal... :-)

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

Вантуз или еще сантехник впридачу к вантузу ? :-)

Даже не представляю, что стало причиной для формирования такого вопроса.

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

Бесплатные консультации по e-mail: apmd@mail.ru. Пишите!!! Ждем писем!!! :-)

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

на каждый чих

Будьте здоровы!!! :-)

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

А вы в шахматы (Knights) играете? :-)

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

То есть и с редактором проблем у вас нет? :)

А кому сейчас легко? :-)

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

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

Хм, кто-то выше по треду убеждал меня, что использование «длинного» вычисления логических выражений в паскале — нонсенс, от лукавого и никогда не бывает. Мне почему-то сдается, что при использовании «короткого» вычисления этот код точно так же не оптимизируется в паскале? Или паскаль волен нарушать семантику и не смотреть на ключи?

Да и выгода от такой «оптимизации» не стоит выделки и мороки с ключиками. Может это и имело смысл в 90-е...

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

участников --- забанить.

Всех - в баню!!! Или - в сауну... По выбору... :-)

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

что там лазарус? работает?

Заново развернул исходники, требуемые средой, но теперь уже пропатченные из порта

cd /usr/ports/lang/fpc/ && make extract && make patch
, скопировал содержимое каталога work порта в удобное место. Заодно и пересобрал lazarus с включенной опцией GDB. Теперь всё работает.

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

При первом запуске ide показывает что нужно для работы, вот там и GDB показывало, и LCL. Глядишь пригодится тебе лазарус, там еще опции компиляции проекта покрути (думаю ты опытный, разберешься), если делать GUI то можно исполняемый файл уменьшить в размере (вдруг нужно тебе).

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

Проект с одной формой с кнопкой и обработчиком нажатия на кнопку (только модуль формы, который автоматом построился и чуть отредактировал вручную):

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Привет, Мир!');
end;

end.
Результирующий бинарник получился 28,5 МБ. У Delphi, помнится, на это уходило 350 кБ.

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

Согласен! у Лазаруса это слабое место. Я помню что делал вот по таким советам, результат на чистой форме (вообще ничего кроме формы) было 19 мб, стало 2.3 мб

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

Статическая линковка для получения полностью автономного бинарника и там и тут.

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

Ну так в винде есть же winapi на котором можно сделать почти все, и родной гуй. И он стабилен и обратно совместим. А у линукса нет, зоопарк разных костылей. Так что больший размер бинарника - что тут удивительного?

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

Спасибо. Помогло! С агрессивной оптимизацией и отключением отладочных символов размер бинарника уменьшился до 2,6 МБ.

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

да, у меня правда ничего тяжелого нет на нем, мне интересно посмотреть на размер «крупных» проектов

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

Там нет RAD в виде «поставил кнопку и обращайся к ней». Там есть ускоренное создание форм, но кодовую обвязку всё равно придётся писать. А это сильно замедляет простую работу и вводит потенциальный барьер, который не-программистам сложно преодолеть

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

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

На таком уровне и сейчас можно запустить питон и писать 2+2. Вот с графикой да, стало сильно сложнее.

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

Интересно, подвижки в продолжении Pascal, в других языках-наследниках (Modula, Component Pascal), сейчас какие-нибудь наблюдаются? Или все признаны тупиковыми ветками, а Ada ушла в специализацию?

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

Ну, «признаны» — это сильно сказано. Но в unix-мире заглохли почти все, это да. Я тут по следам этого треда вспомнил про Модулу-3, был несколько лет назад вполне развивающийся, вроде бы даже промышленного качества, компилятор. Полез смотреть — последний релиз был в 2010-м. :(

Иногда мне кажется, что между Виртовскими языками и unix-подобными системами есть какая-то фундаментальная несовместимость.

А в каком-то смысле, конечно, развивается. Сходи, например, на форум oberoncore (если не пугает своя, особая атмосфера тех мест).

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

На Windows компоненты библиотеки Delphi VCL «оборачивали» виджеты Microsoft MFC, если не ошибаюсь. Но из-за обилия виртуальных методов, весь код виртуальных методов и используемых статических методов класса TForm, всех классов-предков и пользовательского класса-наследника, например, включался в результирующий файл. Из-за перегруженных виртуальных методов оптимизатор не мог выкинуть никогда не используемый код, так как определить на этапе компиляции это невозможно - код виртуальных методов связывается на этапе выполнения. И это правило порождает громоздкий исполняемый файл. Зато компиляция и сборка происходят значительно быстрее аналогичного кода на C++, где по возможности используется статическое связывание и не приветствуются служебные вычисления порядка вызовов методов на этапе выполнения.

Для предотвращения разбухания результирующих бинарников от кода виртуальных методов, который ни разу не вызывается, для Delphi была придумана библиотека KOL, позволяющая «ужать» аппетиты формочек с кнопочками и менюшками в десятки раз.

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

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

Да и выгода от такой «оптимизации» не стоит выделки и мороки с ключиками.

Никакой мороки нет. Выгода важна в коде системного уровня. А если вы пишете очередной сайт, то, конечно, это не важно, потому что там куча источников тормозов покруче. Но там ни Паскаль, ни C/C++ не используются.

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

а теперь сделай strip бинарника чтобы убрать отладочную инфу.

ptah_alexs ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.