Pull to refresh

Comments 77

Вы занимаетесь разработкой Lazarus/являетесь активным контрибьютером? На вашей хабрастранице не так много информации
Да, уже более 5-ти лет активно участвую в разаботке Lazarus и 4 года в разработке FPC. Я также добавил некоторую информацию в свой профиль.
Delphi ж вроде умеет выбрасывать не используемый код при линковке, а лазарус нет.
Лазарус — это среда. Линкер FPC, афайк, умел это делать. Однако же, обращение вида «if X is TMyVeryUnusableClass» делает весь оный класс фактически используемым.
Дельфи умеет выкидывать неиспользуемые методы класса
Вполне возможно провести такую оптимизацию: проверяем используется ли класс где-либо кроме блоков if SomeClassInstance is TSomeClass и если нет, то заменяем блок на if False с последующим выкидыванием. Но проблема с IS это лишь пример — в коде LCL бэкэндов можно найти и другие варианты использования классов LCL фронтэнда, которые также не дают выкинуть их из пустого приложения с формой.
Вы не ищете легких путей, как я посмотрю…
Если у вас есть идея лучше как бы мог этот делать компилятор, то скажите — вдруг она будет проще в реализации :)
Я ж говорю, неиспользуемые методы класса выкинуть (и все чем пользовался он тоже переоценить). Тогда от неиспользуемого класса останется лишь имя и почти пустая rtti, и результат похудеет.
Так делать нельзя, так как возможен вызов методов и обращение к свойствам через RTTI.
Уверен, что все это можно отследить.
Обращение к RTTI идет же через строки. Можно выкидывать методы, для которых  RTTI не формируется. Но вообще оптимизация — не моя тема (в FPC этим в разное время занимались Florian Klämpfl, Jonas Maebe и Сергей Горелкин), и я сходу не готов придумывать что и как можно оптимизировать.
Я ж понимаю, счетчик ссылок на идентификаторы в компиляторе и линкере есть?
Виртуальный конструктор компонентов может сбить с толку, но на самом деле тут тоже проблемы нет — дельфи оставляет сам класс доступным, если на него ссылается класс формы или процедура RegisterClass и разбирается уже с его методами…

Если конструкторы у класса обычные, то если они ни разу не вызваны, класс можно выкинуть целиком.

Если судьбу ссылки на класс можно проследить, можно не записывать использование методам, которые по ней не использованы и классам, которые ей не присваивались…
Вы несколько упрощаете ситуацию. Можно ведь без хранения ссылки на ксласс вызывать его методы (хоть методы класса, хоть методы экземпляра) вроде: SomeVar := TSomeClass.GetSomeValue. Так что всеже все несколько сложнее.
На имя ссылка есть? Есть. Можно следить использование переменной, и выбрать один из трех вариантов: не используется — тогда не считать, используется — тогда считать, и передается туда, где следить дальше невозможно — тогда тоже на всякий случай посчитать…
Если вы сейчас говорите про класс вцелом, то конечно неиспользуемые классы выкидываются в FPC.

Если вы говорите про исключение метода класса, то я вас не понимаю.

В любом случае, вы можете попробовать реализовать свои идеи на кодовой базе  FPC и если они окажутся удачными, они обязательно будут включены в проект.
Может, и займусь когда… интересных дел очень много, а важных ещё больше…
Но конечно, несколько упрощаю. Все варианты неиспользуемости сразу не отследить, но все же расти есть куда.
Поставил, попробовал.
Что сразу очень сильно напрягло и фактически сделало невозможным серьезное использование Lazarus:
— нельзя выбрать контрол и кликом на форме поставить его в указанное место.
Можно это сделать только через двойной клик на контроле.
— попытка сменить размеры контрола на форме — мышиный курсор не превращается в перекрестье стрелок при наведении на «горячую точку смены размера».
Точнее он на мгновение «моргает» и снова становится стрелочкой. Однако, как оказывается, можно уже менять размер, то есть форма курсора обманывает.

Дальше смотреть не стал, честно говоря, сильно удивлен такими серьезными недоделками. Без их исправления всерьез заниматься дизайном форм невозможно. Баг 1 не дает возможность быстро ставить контрол в нужное место. Баг 2 в 100 раз увеличивает время подгонки размеров контролов.

Windows 7 64b Base Edition, 2 монитора Full HD через одну карту.

Насчет времени компиляции и пр. — более-менее быстро компилирует. Хотя с Delphi не сравнить, конечно, тот, вообще, мухой.
>>— нельзя выбрать контрол и кликом на форме поставить его в указанное место.
Здесь вы не правы.
Мне не удается, могу screencapture записать для подтверждения.
Было бы полезно, если бы вы отправили эту информацию в наш трекер ошибок. Могу пока только сообщить что на моей Windows 7 32bit все прекрасно работает.
При создании issue непонятны некоторые поля.

Platform,OS и OS version. Чем отличаются?

Product Build. В about ничего похожего, где взять?

В любом случае, создал два issue.

22824
22825
Platform, OS, OS Version — Например 32bit Windows, 7 или 64 bit Ubuntu 12.10.

Product Build — нужен если вы используете сборку из svn — надо заполнить номер ревизии. Если у вас 1.0, то ничего дополнительного заполнять не надо.

По поводу ошибок:
0022824 — не является ошибкой — вы выделили компонент не в палитре компонент, а в окне поиска компонент.
0022825 — скорее всего ошибка среды, которую мы будем исправлять (хотя у меня и не наблюдается)
Вот замечание, которое я хотел добавить в 22824. Сейчас вообще не могу создать новый issue :( — пустая страница.

I disagree on this.

1. Delphi has Ctrl-Alt-P shortcut for Tool palette. So any Delphi user following my steps feels like «WTF? I cannot put a selected control on form». Because in Delphi there is no separate search window for components.

2. Double-clicking control in «component search window» still puts (!) control on form. «WTF? Why double-click works while selecting and single-clicking doesn't?»

3. The funniest thing happens if one presses ENTER on selected component in a search window. Lazarus puts control on form and also selectes component in palette toolbar. Now single-click on form and this puts another component on it. WTF??

This weird behaviour can be easily improved.

1. Single-click on component in search window tool should select component on palette toolbar (so single-left-click on form puts component on form as it should).

2. ENTER works exactly like single-click (do not put component on form on ENTER).
Кратко: при клике компонента в окне поиска надо выбирать его в palette toolbar. Это решит проблему.
Ну и при нажатии Enter в окне поиска надо ставит компонент на форму и отменять выбор компонента в palette toolbar, чтобы последующие клики на форме не ставили второй экземпляр компонента.
Вот подобное окно в Delphi 7: image

Оно не работает так как вы хотели бы.
Какая версия Delphi, не подскажете?
В Delphi 2007 и Delphi XE не вижу такого окна. Как его открыть?

Да, вообщем, даже если оно и есть.

Ctrl-Alt-P открывает Tool Palette с возможностью поиска по названию. Выбранный при поиске компонент ставится на форму кликом. Это поведение стандартно для Delphi и нужно перенести в Lazarus.

В lazarus вроде есть настройка «Delphi-подобный»? Касается она только синтаксиса языка? Если нет, то при выборе этой настройки надо выбрать и это поведение. Это разумно будет.

В Lazarus оно открывает окно поиска компонентов. Lazarus не пытается на 100% повторить среду Delphi.
Все равно поведение сбивает с толку. Даже без учета знания того, как это работает в Delphi.

Нашел компонент, выбрал — не могу поставить кликом, почему?
Нажал ENTER, кликнул на форме — поставилось 2 компонента, почему?

Наткнулся еще на один баг, связанный с IPC. Но не могу добавить issue — пустая страница при выборе пункта «Report Issue»

Написал же что речь про Delphi 7
Да, действительно, не заметил) Лучше, наверное, ориентироваться на более современную версию.
Сейчас две актуальных версии — XE3 и 7. Обе актуальные.
XE3 — допустим, а 7-то почему? Не лучше взять 2007?
Ну, не знаю. В Delphi 7 8 лет, сейчас уже два года в 2007. Из неприятного разве что подсказка, но обычно лезу в интернет, так что не напрягает.

Наткнулись на два системных бага, оба более-менее обходятся.

А так-то особых проблем нет.
На основной работе D7 для старых проектов и D2007 для менее старых. Есть и XE, но перевод на unicode старых проектов не сделан, да и зачем делать там где он не нужен вообще? Большинство же новых проектов уже под web — там без Delphi.

На дополнительной работе занимаюсь разработкой компонент и там D7 — обязательно. Будешь делать в версии старше — формы замучишься корректировать под младшие версии. Да и код написаный на D7 всегда работает до D2007 (и, за редким исключением, в 2009-XE2).
Отчего не перейти от D7 к D2007 для старых проектов?

D7 is solid like a rock! Если Вы понимаете, о чем я говорю, конечно.

ЗЫ Блин… Так просится фраза: «Вы себе даже не представляете...» Григорий, надеюсь, шо сюда не доберутся люди. Гляньте ко мне в профайл. Все проекты хостились на D7. И только Юникод заставил, cцyko, сменить ориентацию. Я клянусь вам, шо если бы таки не он, то хер бы с маслом увидели Борланды\КодЖиры\ымбаркадеры, а не денег бедных шахтёроф…
Вот бы это там на месте ещё бы понятно оказывалось… хинт хотя всплывал, или пример прямо в Caption-е к полю…
Главное чтобы из вашего отчета об ошибке было понятно как и на чем ее воспроизводиь. А на счет указанных полей — ими практически никто не пользуется, так как все обычно в тексте указывают свою платформу, операционную систему и прочее.
Хмм, не могу добавить замечания в мой же issue: он — read-only! WTF?
Проверьте — внизу должно быть поле для добавления комментария.
Add Note?

Ввожу, нажимаю кнопку «Add note», получаю:

APPLICATION ERROR #1103
The action cannot be performed because issue '22824' is read-only
Увы, такая беда есть с отчетами помеченными как «resolved». Вообще mantis давно пора обновить, но он у нас содержит собственные изменения, которые сильно быстро не перенесешь.
Не очень понятно минусование этого комментария. Я наблюдаю это баги и они для меня являются критическими. Что не так?
Утверждения «Без их исправления всерьез заниматься дизайном форм невозможно.» и " Баг 2 в 100 раз увеличивает время подгонки размеров контролов." не полностью верны.

Это потому, что «Однако, как оказывается, можно уже менять размер, то есть форма курсора обманывает.». Баг 2 — это некритичный глюк, и работе мешать он не может. Пару раз убедились, что наведя мышь можно тащить независимо от формы курсора — и таскаете себе, не тратя время…
«Mac OS X: 10.4, LCL только 32bit, не-LCL могут быть 64bit». Да уж, впечатляет.

Я так понимаю, камень в мой огород. Привел цитату точь-в-точь из официального источника. Ясен пень, мне жлобу под Маки компилировать не приходилось. Посыпаю голову активированным углём ;)
Если вы разработчик Lazarus, хочу сказать вам спасибо за ваш труд.
Отличная система вышла, некоторое время разрабатывал на ней серверный софт под Linux.
Жаль только indy не особо стабилен…
Интересно: а почему Indy, почему не SynapseLib?
Функционал лучше в разы.
Полнее ООП.
Спасибо. Команда Indi сама занимается поддержкой своей библиотеки. Не могу никак прокомментировать ее стабильность, так как ни разу не пользовался.
Это понятно.
Про indy это просто констатация факта.
Камень ни в коем случае не в ваш огород.
Не советую связываться с Indy.

Если интересно, напишу подробности.
Интересно и подробности и что пользовать вместо.
Насчет вместо — в результате все самописное, на что заменить — не знаю.

Проблема с Indy была очень неприятная — Indy не позволял управлять временем подключения.
Несмотря на наличие свойства ConnectTimeout, задав которое якобы можно ограничить время, проведенное в connect.

Indy просто игнорировал это свойство и мог «провисеть» в вызове сколько угодно. Я посмотрел код и убедился, что именно так и есть. Это факт и код, который я увидел сильно убавили мое доверие к Indy. На мой взгляд, это то, что называют overdesigned.
а оно под fpc так же без исходников, и подправить сложнее чем своё написать?
Это нетривиальная правка, она архитектурная.

Я бы тоже рекомендовал Synapse, все достаточно прозрачно и никаких глюков на нем не заметил в Lazarus
Меня каждый раз напрягают диалоги настроек — совершенно неинтуитивны для дельфиста-виндузятника.
Они ссылаются на особенности консольных программ, на их ключи, названы черезмерно лаконично и загадочно.
Так я и не понял, лазарус под OS X выше 10.4 запускается? Потому что на sourceforge для загрузки предоставлен файл lazarus-1.0-powerpc-macosx.dmg.
Спасибо, поставил на попробовать
Из первого, что бросилось в глаза — отсутствие пункта меню «настройки» на привычном месте (в меню самого приложения). Нашел только через пункт меню сервис -> параметры. Само окно настроек какое-то поплывшее
В общем довольно приятное первое впечатление. Но шрифт monaco по умолчанию для кода — это конечно очень по-дельфийски, но глаз не радует
Увы, научить этот диалог подбирать ширину стандартными средствами невозможно. Прийдется вам его первый раз расширить. По поводу меню не на родном месте — да проблема известная и она присутствует в списке ошибок, но ее решение требует расширения свойств  TMenu и TMenuItem. При работе над cocoa бэкэндом обязательно будет решено.
TLayoutControl нужен вместо вороха отдельных компонентов типа TLabel, TPanel, TGroupBox, TPageControl, TSplitter и TScrollBox. И очень давно нужен…
В Lazarus есть очень продвинутый Anchor editor, но в данном случае даже он не поможет, так как на форму втсавляются фреймы, которые создаются по мере необходимости — выбрали узел в дереве — если фрейм был создан, то показываем, иначе создаем и показываем. Т.е. заранее без создания всех фреймов минимальную ширину не узнать, а увеличивать размер формы во время работы — не очень красиво :)
Наоборот, лучше уж ширина изменяется динамически. Во многих стандартных программах и их настройках высота меняется динамически, в зависимости от контента и никого это не смущает
Постараемся к версии 1.2 эту проблему решить.
Очень красиво. Как минимум, красивее макинтоша с названием меток на поля…
Скриншота же, ох уж этот Swype…
Намучился я ставить компоненты, попробовал поставить CodeTyphon (этакая сборка lazarus), и там всё замечательно. Уже всё стоит и в полном комплекте.
Only those users with full accounts are able to leave comments. Log in, please.