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)
Ответ на: комментарий от rmammoth

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

if value <> 0 then begin { блин, а что ж там у нас в этой value и какого оно вообще типа?

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

tryGetValue

Get здесь намекает, что это функция.

var value: integer; { куча кода, где value не используется }

Области видимости задать нельзя?

grem ★★★★★
()

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

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

Да, есть:

Автор: Lazarus Team
Описание или аннотация: Useful units for Lazarus packages.
Лицензия: Modified LGPL-2
Имя файла:  /usr/local/share/lazarus-1.6.4/components/lazutils/lazutils.lpk
Текущее состояние: установлен, базовый, не может быть удалён, RunAndDesignTime

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

В Delphi berlin 10.1 starter он, кажется, не однооконный :( Но может и я его не включал

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

Иногда лучше, имхо, иметь дело с диалектом - сразу знаешь, что перед тобой.

Для проектов уровня хелловорда — возможно. И к чему тогда относятся сентенции насчет компиляторо-зависимых расширений C++, которые, к слову, расширяют стандарт а не заменяют его?

Нормальные люди дают значащие имена переменным;

Не всегда приходится иметь дело только со своим кодом.

в современных ide уже давно можно быстро перейти к определению переменной, функции и чего угодно

еще лучше, когда переходить не надо.

Вообще, странно, что кто-то всерьез анализирует стиль именования в куске кода, написанном для примера на коленке и дает свои умные рекомендации :D

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

что от этих достоинств уже избавляются в современных диалектах.

Не избавляются. Добавляют.

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

И к чему тогда относятся сентенции насчет компиляторо-зависимых расширений C++, которые, к слову, расширяют стандарт а не заменяют его?

Сентенции скорее к реализациям. Был где-то пример, в котором в объявлении цикла for запихивалось выражение, которое в gcc вычислялось один раз, а в msvs вычислялось на каждом шаге.

еще лучше, когда переходить не надо.

ну да, все всегда помнят все прототипы (хорошо, если есть автодополнение).

Не всегда приходится иметь дело только со своим кодом.

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

написанном для примера на коленке

оно и видно.

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

Меняют синтаксис путём избавления от старых конструкций? Нет! Добавляют новые.

Слово «избавляются» здесь неуместно.

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

Меняют синтаксис путём избавления от старых конструкций? Нет! Добавляют новые. Слово «избавляются» здесь неуместно.

Не буду тебя мучить отсылками к предыдущим постам, судя по всему, бесполезно. Вкратце, некто называл «достоинствами» Pascal'я отсутствие в нём ряда возможностей. Я написал, что от этих достоинств избавляются в диалектах, вводя в них соответствующие фичи. Так понятнее?

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

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

Pascal многословен и невыразителен, безотносительно к стилю кодирования. Кстати, как думаешь, отчего бы это многие новые возможности в диалектах слизаны из С/С++ практически 1:1?

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

никто от этих возможностей не избавляется, так понятно?

ты можешь регулировать подсистемы программы, давая разработчикам плагинов вольность {$mode objgfpc}, {$mode delphi}, или даже вручную перечислять разрешаемые конструкции {$H+}, etc. А ядру ограничить вольность: {$mode tp}. Так еще понятнее?

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

возможности в диалектах слизаны из С/С++ практически 1:1?

слизаны те, что практически безопасны. Опасные конструкции, вроде присваивания в if'ах, (которые отсекают в ревью), тернарный оператор, запятая опущены. И правильно делают. Лучшее нужно копировать, недостатки нет.

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

ты можешь регулировать подсистемы программы, давая разработчикам плагинов вольность {$mode objgfpc}, {$mode delphi}, или даже вручную перечислять разрешаемые конструкции {$H+}, etc. А ядру ограничить вольность: {$mode tp}. Так еще понятнее?

Кое-кому не помогает даже если разжевать... Не бери в голову, зато наверно, силушкой не обделен.

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

Pascal многословен и невыразителен, безотносительно к стилю кодирования.

Ага, конечно. Это не твои примеры кривые, это язык плохой.

Это не ты недавно писал «Не всегда приходится иметь дело только со своим кодом.»? И как, много радости у тебя вызывают «огромадные» конструкции вида int **(*f)(int**,int**(*)(int **,int **)); сжатые в одну строчку вместо человеческого использования typedef?

отчего бы это многие новые возможности в диалектах слизаны из С/С++ практически 1:1?

В C/C++ они впервые появились и ниоткуда не слизаны 1 к 1.

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

В C/C++ они впервые появились и ниоткуда не слизаны 1 к 1.

Речь шла о диалектах Pascal, разумеется.

И как, много радости у тебя вызывают «огромадные» конструкции вида int **(*f)(int**,int**(*)(int **,int **)); сжатые в одну строчку вместо человеческого использования typedef?

При желании и код на pascal можно с не меньшим успехом превратить в нечитаемую абракадабру. От этого его многословность и невыразительность никак не зависит и никуда не денется. Я вроде писал, что осведомлен о недостатках С/С++, не ломись в открытую дверь.

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

Не бери в голову, зато наверно, силушкой не обделен.

да такой же как и ты, интернет-варриор.

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

да такой же как и ты, интернет-варриор.

Вот и славненько, вот и хорошо, и не надо нервничать

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

Речь шла о диалектах Pascal, разумеется.

PascalABC.NET? Они, как мне показалось, хотят написать реализацию C#/VB.NET, но чтобы был Pascal.

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

PascalABC.NET? Они, как мне показалось, хотят написать реализацию C#/VB.NET, но чтобы был Pascal

Судя по Lazarus 1.6.4 (комментарий), не только в него впихивают честно украденное из C/C++

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

включается отдельной директивой компилятора - сделано специально для тех, кто без этих операторов страдает

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

припоминаю что было два пакета: AnchorDocking, и Sparta. Пробуй.

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

включается отдельной директивой компилятора - сделано специально для тех, кто без этих операторов страдает

Ты мне напомнил про эпичнейшую фичу в TurboPascal — различный порядок вычисления логических выражений в зависимости от ключа компилятора. Прекрасный способ выстрелить себе в ногу! Вижу, времена меняются, но странные решения разработчиков Pascal — вещь неистребимая. Что ж, зато стабильность налицо...

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

тернарный оператор, запятая опущены

Вот тернарная операция - это реально удобная вещь, жаль, что её не заимствовали.

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

И это называется «менять порядок вычислений»

А как это еще назвать? http://www.5byte.ru/tp7pub/0013.php :

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

Для тех кто в танке: допустим A, B, C, ..., Z — функции, возвращающие булево значение. Тогда при вычислении выражения A and B and C and ... and Z в «коротком» режиме они будут вызываться в указанной последовательности, пока не вызовутся все или пока очередной вызов не вернет false, а в «длинном» — будут вызваны все функции, причем в неопределенном порядке. И всё это переключается ключиком компилятора, красота да и только.

Я вижу, тут все знатные знатоки знаний о паскале собрались :D

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

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

Да можно вообще в hex-редакторе программировать, пару часов практики и ты уже пишешь опкоды по манам, но легче жить от этого не становиться

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

Я вижу, тут все знатные знатоки знаний о паскале собрались :D

Да, причём справедливости ради - с обеих сторон.

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

Не суди строго. Каждый троллит как умеет.

Яви же нам свое умение, о великий умелец.

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

 — стандартизация «де-факто» против вменяемых стандартов у С/С++ не есть хорошо и приводит к наличию версий и диалектов

А в чём проблема составлять программы не по стандарту? Неужели диалекты Pascal не поддерживают международный стандарт ISO 7185:1990?

 — begin end как ограничители блоков кода дольше набираются и хуже читаются в сложных конструкциях

Ни разу не проблема. Эти «скобки» расставляет IDE, а люди хорошо воспринимают то, что они в себе заключают.

 — отсутствие операторов изменения типа

Явное приведение типов в языках со статической типизацией это преимущество.

++ — *= /= += -= и т.п. вынуждают писать лишний код value = value * 10; частично выручают inc и dec.

Это преимущество простоты и явности, а не замусоренности действий.

 — нет аналога тернарному ?: , что тоже вынуждает писать лишние if then begin end else begin end

Отлично - меньше «гороха» в глазах.

 — нет аналога оператору следования "," — редко, но бывает нужно

Например?

 — отсутствие у оператора присваивания возвращаемого значения не дает писать цепочечные присваивания и использовать результат присваивания в выражениях типа if((value = tryGetValue()) != 0) { /* do something with value */ }

А что мешает сделать присваивание вне условного выражения?

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

Сахар.

 — отсутствие break и continue в базовом варианте сильно усложняло логику циклов, впрочем, поправлено в диалектах

Зато есть goto и label.

 — цикл for в стиле С/C++ куда гибче и не завязан исключительно на целочисленное итерирование, как for to/downto в Pascal

Аналог - while.

 — разделение на процедуры и функции совершенно излишне, представление о процедуре как функции без возвращаемого значения вполне себе адекватно описывает все различия

У процедур и функций семантика разная. Процедуры - это подпрограммы, выполняющие определённый процесс. Функции - это вычислительные сущности, возвращающие результат в вызывающий код.

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

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

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

А в чём проблема составлять программы не по стандарту?

В том, что они привязаны к конкретной версии и диалекту языка, неужели непонятно?

Неужели диалекты Pascal не поддерживают международный стандарт ISO 7185:1990?

Последняя цифирка в названии стандарта ни на что не намекает? Если нет, в том же Lazarus'е напиши что-то с GUI, используя исключительно оный стандарт. Расскажешь про успехи.

— отсутствие операторов изменения типа

(facepalm) я не про тайпкасты писал, перечитай еще раз

Это преимущество простоты и явности, а не замусоренности действий.

Странно, с чего бы тогда эти операторы таки реализовали в диалектах Pascal?

Отлично - меньше «гороха» в глазах.

Вот тернарная операция - это реально удобная вещь, жаль, что её не заимствовали.

Без комментариев

А что мешает сделать присваивание вне условного выражения?

Не буду повторяться, читай тред

Зато есть goto и label.

Есть еще макаронный код, слышал? И опять таки, с чего бы такую ненужность как break и continue таки включили в диалекты Pascal?

У процедур и функций семантика разная. Процедуры - это подпрограммы, выполняющие определённый процесс. Функции - это вычислительные сущности, возвращающие результат в вызывающий код.

Это было бы так, зайди речь о Хаскелле, скажем. В Pascal единственное отличие процедур от функций — отсутствие возвращаемых значений, семантика вызова функции может быть весьма обширнее только лишь вычисления некоторого значения.

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

KRoN73> Сейчас с этим, кстати, вообще очень плохо. Это раньше можно было включить свой Спектрум и сразу же, через пару секунд писать готовое выражение. Или запустить qbasic.exe. Сегодня же куда ни плюнь, нужно, как минимум, какие-нибудь #include/use/require в шапку вбивать. И помнить, какие методы где хранятся.

Берётся какой-нибудь простой язык программирования по подобию бейсика, и вперёд. Можно даже сам бейсик взять. Он никуда не делся. Даже в репозитории Debian есть несколько вариаций.

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

Одно другому не мешает. Насколько я знаю, Qt можно в Lazarus использовать.

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

Потому, что у Pascal и Python ниши сильно отличаются.

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

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

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

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

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

if (x <> 0) and (y/x > 100) then ...

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

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

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

стандартизация «де-факто» против вменяемых стандартов у С/С++ не есть хорошо и приводит к наличию версий и диалектов

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

begin end как ограничители блоков кода дольше набираются и хуже читаются в сложных конструкциях

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

отсутствие операторов изменения типа ++ — *= /= += -= и т.п.

В расширениях FPC (и не только его) давно есть += как безопасные конструкции (мы же не о Turbo Pascal 5.5 говорим и более древних мамонтах?). С ++ в C/C++ проблем хватает - слишком легко составить выражение с неочевидным порядком исполнения.

нет аналога тернарному ?:

Прямого аналога нет, хотя каких-то проблем не доставляет - есть IfThen() для простых выражений или if () then else для более сложных. Насколько пострадала бы читаемость кода от введения такого оператора надо серьёзно думать.

нет аналога оператору следования
отсутствие у оператора присваивания возвращаемого значения не дает писать цепочечные присваивания

Хороший способ выстрелить себе в ногу. А уж сколько ошибок в C-подобных языках из-за случайно поставленного = вместо == в условиях и не сосчитать, что компиляторы такие конструкции воспринимают как потенциальную ошибку.

про возвращаемое значение функций уже писали

вкусовщина, но для любителей в FPC есть аналогичная возможность

отсутствие break и continue в базовом варианте сильно усложняло логику циклов, впрочем, поправлено в диалектах

Причём диалектами надо считать TP7.0 и более поздние - присутствуют во всех актуальных реализациях и «стандарте де-факто»

цикл for в стиле С/C++ куда гибче

В C/C++ for() - хитровыкрученный аналог while, из которого можно сделать цикл с крайне запутанной логикой. Не нужно.

разделение на процедуры и функции совершенно излишне

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

Все конструкции паскаля ориентированы на легкость чтения кода. В основном перечисленные претензии относятся к отсутствию в языке конструкций, повышающих компактность кода за счёт читаемости и/или очевидности исполнения. Говорят, что и на Perl можно написать читаемую программу, но встречаются-то в основном обфусцированные уродцы. Ну и то что некоторые конструкции «не такие» - вопрос исключительно привычки

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

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

Во времена Turbo Pascal'я хорошим тоном считалось добавлять в шапку модуля используемые директивы компиляции (все через ^O O или вручную для влияющих на исполнение). «Полное» исполнение вообще считается экзотикой (по умолчанию - короткое) и включалось локально по надобности. В приведённом примере - опасная конструкция при полных вычислениях вне зависимости от порядка вычисления подвыражений.

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

Есть. Только что опробовал на Lazarus 1.6.2/Win64 «Пакет»-«Открыть файл пакета»-components/anchordocking/design/anchordockingdsgn.lpk Compile,Install, согласиться на пересборку Lazarus ;), после перезапуска будет однооконный интерфейс. Пишут что с ним или отдельно можно ещё sparta\dockedformeditor\sparta_dockedformeditor.lpk установить

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

Будет работать. Что мы упустим при этом? Ничего. Единственная проблема в том, что если y/x даёт ноль, то может не вываливаться, а потом вывалится. Так в любом языке при изменении уровня оптимизации по скорости тоже подобные вещи пролазят, потому что лишние вызовы и инструкции нужно удалять.

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