Сообщение Re: Что нового сейчас есть в Delphi? от 22.07.2024 4:17
Изменено 22.07.2024 6:28 swame
Re: Что нового сейчас есть в Delphi?
Здравствуйте, Khimik, Вы писали:
K>Давно пишу на Delphi XE8, и тут обнаружилась неприятная проблема – баг компилятора из-за которого программа иногда не компилируется (ошибка F2084 Internal error: C2359). Хорошо бы перейти на Delphi поновее, или может быть Lazarus. Хочу спросить, какие фичи есть в новых версиях, и нет ли в них частности такого:
Хотя это и Internal Error, это скорее всего связано или с тем что не Delphi не может переварить или твой код, или код используемых компонентов.
Маловероятно что переход на новую версию решит проблему, с ней надо разбираться.
НО Delphi не может показать место где это происходит. Обычно такие места можно найти методом исключения и по косвенным признакам.
Единственный баг дельфи который ходит из версии к версии и портит нашей команде кровь — это зависание текстового поиска на больших проектах.
K>1) Очень не хватает возможности назвать то, на что ссылается блок with. Т.е. нужно обозначение вроде this или it, аналогичное self для класса. Это не только моя мысль, я видел такой запрос в инете, так что можно надеяться идея дошла до разработчиков;
Избавиться от with уже предлагали, я за.
То что ты хочешь похоже на присвоение во временную локальную переменную указателя на ту часть структуры, на которую хочешь ссылаться.
Это хороший подход, который был всегда.
В новых версиях можно объявлять такую переменную по месту.
Но я за объявление такой переменной по старинке в блоке var, читаемость лучше, нагрузка на компилятор меньше.
K>2) Хорошо что в XE появились процедуры и функции к рекордам, т.е. инкапсуляция для рекордов, а нельзя ли ещё наследование (понятно что нельзя полиморфизм, а инкапсуляция и наследование вполне);
K>3) Хотелось бы иметь быстрые классы без лишней вспомогательной информации. Я имею в виду, что классы включают в себя таблицу виртуальных методов, информацию о классе вроде его названия и пр., поэтому не очень хочется превращать в класс разную мелочь (трата ресурсов компьютера). Может быть, то что я предлагаю можно реализовать только за счёт отказа от полиморфизма, ну пусть хотя бы так. В принципе сейчас можно для этого заменять классы указателями на рекорды, но опять же не хватает наследования;
Если действительно нужно экономить память,
то скорее всего мы имеем дело с большими массивами однородных объектов
и я сейчас придерживаюсь другой парадигмы:
проектирую класс не для айтема, а для коллекции айтемов, к айтемам обращаюсь по индексу, данные в коллекции организуются кастомно,
в зависимости от размеров полей и предполагаемой частоты их заполнения.
Называется паттерн Flyweight (Легковес).
Да более трудоемко писать, но во многих случаях можно сэкономить памяти на порядок — два.
Наследование в таком подходе тоже можно реализовать.
K>4) Как там в новых Delphi с Firemonkey и поддержкой Linux, Mac, Android?
Собираем сейчас относительно несложные для нас GUI приложения на несколько сот модулей под Linux на FMXLinux,
он есть в магазине приложений. Одно и тоже приложение у нас собирается и под VCL (Windows) и под FMX (Windows, Linux), код формочек одинаковый, ресурсы формочек разные, дефайнов получается немного.
K>Они хотя бы скомпилировали Delphi на FMX?
Кому это нужно?
Нету вроде даже 64-битного компилятора под винду (который собирает как 64 битное приложение).
А есть ли вообще хорошие производительные текстовые редакторы под FMX?
K>5) Метапрограммирование, макросы – есть сейчас что-то такое?
Не очень себе представляю зачем это сейчас нужно в Delphi и это нельзя решить другими способами, но может ошибаюсь, кто знает приведите пример.
K>6) Я давно предлагаю поэтапную компиляцию: сначала превратить исходник в более быстрый (размноженный), например в котором инлайновые функции заинлайнились и их удобнее отлаживать. Вряд ли это кто-то сделал, но вдруг...
При твоем подходе к "оптимизации" инлайны это мертвому припарка.
K>Давно пишу на Delphi XE8, и тут обнаружилась неприятная проблема – баг компилятора из-за которого программа иногда не компилируется (ошибка F2084 Internal error: C2359). Хорошо бы перейти на Delphi поновее, или может быть Lazarus. Хочу спросить, какие фичи есть в новых версиях, и нет ли в них частности такого:
Хотя это и Internal Error, это скорее всего связано или с тем что не Delphi не может переварить или твой код, или код используемых компонентов.
Маловероятно что переход на новую версию решит проблему, с ней надо разбираться.
НО Delphi не может показать место где это происходит. Обычно такие места можно найти методом исключения и по косвенным признакам.
Единственный баг дельфи который ходит из версии к версии и портит нашей команде кровь — это зависание текстового поиска на больших проектах.
K>1) Очень не хватает возможности назвать то, на что ссылается блок with. Т.е. нужно обозначение вроде this или it, аналогичное self для класса. Это не только моя мысль, я видел такой запрос в инете, так что можно надеяться идея дошла до разработчиков;
Избавиться от with уже предлагали, я за.
То что ты хочешь похоже на присвоение во временную локальную переменную указателя на ту часть структуры, на которую хочешь ссылаться.
Это хороший подход, который был всегда.
В новых версиях можно объявлять такую переменную по месту.
Но я за объявление такой переменной по старинке в блоке var, читаемость лучше, нагрузка на компилятор меньше.
K>2) Хорошо что в XE появились процедуры и функции к рекордам, т.е. инкапсуляция для рекордов, а нельзя ли ещё наследование (понятно что нельзя полиморфизм, а инкапсуляция и наследование вполне);
K>3) Хотелось бы иметь быстрые классы без лишней вспомогательной информации. Я имею в виду, что классы включают в себя таблицу виртуальных методов, информацию о классе вроде его названия и пр., поэтому не очень хочется превращать в класс разную мелочь (трата ресурсов компьютера). Может быть, то что я предлагаю можно реализовать только за счёт отказа от полиморфизма, ну пусть хотя бы так. В принципе сейчас можно для этого заменять классы указателями на рекорды, но опять же не хватает наследования;
Если действительно нужно экономить память,
то скорее всего мы имеем дело с большими массивами однородных объектов
и я сейчас придерживаюсь другой парадигмы:
проектирую класс не для айтема, а для коллекции айтемов, к айтемам обращаюсь по индексу, данные в коллекции организуются кастомно,
в зависимости от размеров полей и предполагаемой частоты их заполнения.
Называется паттерн Flyweight (Легковес).
Да более трудоемко писать, но во многих случаях можно сэкономить памяти на порядок — два.
Наследование в таком подходе тоже можно реализовать.
K>4) Как там в новых Delphi с Firemonkey и поддержкой Linux, Mac, Android?
Собираем сейчас относительно несложные для нас GUI приложения на несколько сот модулей под Linux на FMXLinux,
он есть в магазине приложений. Одно и тоже приложение у нас собирается и под VCL (Windows) и под FMX (Windows, Linux), код формочек одинаковый, ресурсы формочек разные, дефайнов получается немного.
K>Они хотя бы скомпилировали Delphi на FMX?
Кому это нужно?
Нету вроде даже 64-битного компилятора под винду (который собирает как 64 битное приложение).
А есть ли вообще хорошие производительные текстовые редакторы под FMX?
K>5) Метапрограммирование, макросы – есть сейчас что-то такое?
Не очень себе представляю зачем это сейчас нужно в Delphi и это нельзя решить другими способами, но может ошибаюсь, кто знает приведите пример.
K>6) Я давно предлагаю поэтапную компиляцию: сначала превратить исходник в более быстрый (размноженный), например в котором инлайновые функции заинлайнились и их удобнее отлаживать. Вряд ли это кто-то сделал, но вдруг...
При твоем подходе к "оптимизации" инлайны это мертвому припарка.
Re: Что нового сейчас есть в Delphi?
Здравствуйте, Khimik, Вы писали:
K>Давно пишу на Delphi XE8, и тут обнаружилась неприятная проблема – баг компилятора из-за которого программа иногда не компилируется (ошибка F2084 Internal error: C2359). Хорошо бы перейти на Delphi поновее, или может быть Lazarus. Хочу спросить, какие фичи есть в новых версиях, и нет ли в них частности такого:
Хотя это и Internal Error, это скорее всего связано или с тем что не Delphi не может переварить или твой код, или код используемых компонентов.
Маловероятно что переход на новую версию решит проблему, с ней надо разбираться.
Просто Delphi не может показать место где это происходит. Обычно такие места можно найти методом исключения и по косвенным признакам.
Единственный баг дельфи который ходит из версии к версии и портит нашей команде кровь — это зависание текстового поиска на больших проектах.
K>1) Очень не хватает возможности назвать то, на что ссылается блок with. Т.е. нужно обозначение вроде this или it, аналогичное self для класса. Это не только моя мысль, я видел такой запрос в инете, так что можно надеяться идея дошла до разработчиков;
Избавиться от with уже предлагали, я за.
То что ты хочешь похоже на присвоение во временную локальную переменную указателя на ту часть структуры, на которую хочешь ссылаться.
Это хороший подход, который был всегда.
В новых версиях можно объявлять такую переменную по месту.
Но я за объявление такой переменной по старинке в блоке var, читаемость лучше, нагрузка на компилятор меньше.
K>2) Хорошо что в XE появились процедуры и функции к рекордам, т.е. инкапсуляция для рекордов, а нельзя ли ещё наследование (понятно что нельзя полиморфизм, а инкапсуляция и наследование вполне);
K>3) Хотелось бы иметь быстрые классы без лишней вспомогательной информации. Я имею в виду, что классы включают в себя таблицу виртуальных методов, информацию о классе вроде его названия и пр., поэтому не очень хочется превращать в класс разную мелочь (трата ресурсов компьютера). Может быть, то что я предлагаю можно реализовать только за счёт отказа от полиморфизма, ну пусть хотя бы так. В принципе сейчас можно для этого заменять классы указателями на рекорды, но опять же не хватает наследования;
Если действительно нужно экономить память,
то скорее всего мы имеем дело с большими массивами однородных объектов
и я сейчас придерживаюсь другой парадигмы:
проектирую класс не для айтема, а для коллекции айтемов, к айтемам обращаюсь по индексу, данные в коллекции организуются кастомно,
в зависимости от размеров полей и предполагаемой частоты их заполнения.
Называется паттерн Flyweight (Легковес).
Да более трудоемко писать, но во многих случаях можно сэкономить памяти на порядок — два.
Наследование в таком подходе тоже можно реализовать.
K>4) Как там в новых Delphi с Firemonkey и поддержкой Linux, Mac, Android?
Собираем сейчас относительно несложные для нас GUI приложения на несколько сот модулей под Linux на FMXLinux,
он есть в магазине приложений. Одно и тоже приложение у нас собирается и под VCL (Windows) и под FMX (Windows, Linux), код формочек одинаковый, ресурсы формочек разные, дефайнов получается немного.
K>Они хотя бы скомпилировали Delphi на FMX?
Кому это нужно?
Нету вроде даже 64-битного компилятора под винду (который собирает как 64 битное приложение).
А есть ли вообще хорошие производительные текстовые редакторы под FMX?
K>5) Метапрограммирование, макросы – есть сейчас что-то такое?
Не очень себе представляю зачем это сейчас нужно в Delphi и это нельзя решить другими способами, но может ошибаюсь, кто знает приведите пример.
K>6) Я давно предлагаю поэтапную компиляцию: сначала превратить исходник в более быстрый (размноженный), например в котором инлайновые функции заинлайнились и их удобнее отлаживать. Вряд ли это кто-то сделал, но вдруг...
При твоем подходе к "оптимизации" инлайны это мертвому припарка.
K>Давно пишу на Delphi XE8, и тут обнаружилась неприятная проблема – баг компилятора из-за которого программа иногда не компилируется (ошибка F2084 Internal error: C2359). Хорошо бы перейти на Delphi поновее, или может быть Lazarus. Хочу спросить, какие фичи есть в новых версиях, и нет ли в них частности такого:
Хотя это и Internal Error, это скорее всего связано или с тем что не Delphi не может переварить или твой код, или код используемых компонентов.
Маловероятно что переход на новую версию решит проблему, с ней надо разбираться.
Просто Delphi не может показать место где это происходит. Обычно такие места можно найти методом исключения и по косвенным признакам.
Единственный баг дельфи который ходит из версии к версии и портит нашей команде кровь — это зависание текстового поиска на больших проектах.
K>1) Очень не хватает возможности назвать то, на что ссылается блок with. Т.е. нужно обозначение вроде this или it, аналогичное self для класса. Это не только моя мысль, я видел такой запрос в инете, так что можно надеяться идея дошла до разработчиков;
Избавиться от with уже предлагали, я за.
То что ты хочешь похоже на присвоение во временную локальную переменную указателя на ту часть структуры, на которую хочешь ссылаться.
Это хороший подход, который был всегда.
В новых версиях можно объявлять такую переменную по месту.
Но я за объявление такой переменной по старинке в блоке var, читаемость лучше, нагрузка на компилятор меньше.
K>2) Хорошо что в XE появились процедуры и функции к рекордам, т.е. инкапсуляция для рекордов, а нельзя ли ещё наследование (понятно что нельзя полиморфизм, а инкапсуляция и наследование вполне);
K>3) Хотелось бы иметь быстрые классы без лишней вспомогательной информации. Я имею в виду, что классы включают в себя таблицу виртуальных методов, информацию о классе вроде его названия и пр., поэтому не очень хочется превращать в класс разную мелочь (трата ресурсов компьютера). Может быть, то что я предлагаю можно реализовать только за счёт отказа от полиморфизма, ну пусть хотя бы так. В принципе сейчас можно для этого заменять классы указателями на рекорды, но опять же не хватает наследования;
Если действительно нужно экономить память,
то скорее всего мы имеем дело с большими массивами однородных объектов
и я сейчас придерживаюсь другой парадигмы:
проектирую класс не для айтема, а для коллекции айтемов, к айтемам обращаюсь по индексу, данные в коллекции организуются кастомно,
в зависимости от размеров полей и предполагаемой частоты их заполнения.
Называется паттерн Flyweight (Легковес).
Да более трудоемко писать, но во многих случаях можно сэкономить памяти на порядок — два.
Наследование в таком подходе тоже можно реализовать.
K>4) Как там в новых Delphi с Firemonkey и поддержкой Linux, Mac, Android?
Собираем сейчас относительно несложные для нас GUI приложения на несколько сот модулей под Linux на FMXLinux,
он есть в магазине приложений. Одно и тоже приложение у нас собирается и под VCL (Windows) и под FMX (Windows, Linux), код формочек одинаковый, ресурсы формочек разные, дефайнов получается немного.
K>Они хотя бы скомпилировали Delphi на FMX?
Кому это нужно?
Нету вроде даже 64-битного компилятора под винду (который собирает как 64 битное приложение).
А есть ли вообще хорошие производительные текстовые редакторы под FMX?
K>5) Метапрограммирование, макросы – есть сейчас что-то такое?
Не очень себе представляю зачем это сейчас нужно в Delphi и это нельзя решить другими способами, но может ошибаюсь, кто знает приведите пример.
K>6) Я давно предлагаю поэтапную компиляцию: сначала превратить исходник в более быстрый (размноженный), например в котором инлайновые функции заинлайнились и их удобнее отлаживать. Вряд ли это кто-то сделал, но вдруг...
При твоем подходе к "оптимизации" инлайны это мертвому припарка.