Автор Тема: Навеяло "популярностью языков". Почему я вернулся в Дел  (Прочитано 8413 раз)

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
С Дельфи не работал с, приблизительно, 2002-2003 годов.

Сначала ушёл в С/С++ на QNX. Потом как-то постоянно в сях на встроенных системах или на FreeBSD.

Потом "всплыла" задача визуализации полётных данных и видео/звука...

К тому времени уже был опыт использования Си-шарпа под виндой.
Всё бы хорошо, но "прыгания" между семантиками низкоуровневых операций и тех типовых операций, под которые затачивался дотНЕТ и си-шарп, требовали очень крупных (и, часто - неприятных и даже болезненных) интеллектуальных усилий.
А применение библиотек и решений третьих фирм выявило проблему зависимости от качества их реализаций и обеспечения совместимости.
Короче, хотелось оставаться в одном и том же средстве разработки и иметь возможность комфортного и безболезненного "прыгания" по уровням представлений моделей в своих программах.

С учётом ещё и надвигающейся многоплатформенности реализаций (пошли разговоры со стороны заказчика о Линуксе), были выбраны Qt, Дельфи (с учётом обещаний от Эмбаркадеро) и Лазарь.
Наверное, можно было бы выбрать и Qt, но там мы не смогли в полной мере разобраться как нормально производить статическую линковку как самой библиотеки, так и приложений, использующих её. Временной фактор поджимал, "полезли нюансы непонятные", а нужного размера бубна для более качественного камлания не нашлось...

Посему остался Дельфи.

После стольких лет это был как глоток свежего воздуха, ей-богу!
Было полное впечатление, что язык, библиотека и среда просто помогают "додумавать" нужные и подходящие решения! Прямо мистика какая-то!
Проект частью переписывался с Си-шарпа, частью разрабатывались новые подсистемы и модули.
Огромное количество кода просто сократилось! В Дельфи оказалось более адекватно можно выразить многие низкоуровневые вещи и, за счёт нативного кода и отсутствия сборки мусора, всё работало в разы или на порядки быстрее. Более всего, конечно (повторюсь) понравилось более естественная запись выражений того, что делалось на низком уровне. У меня этого уровня в проекте МНОГО. Качество генерируемого кода - отменное. Из-за запрещения использования железа для ускорения графических и видеофункций, всё должно обрабатываться программно. Когда осталось время, одну из частей (оверлапинг "вживую" видеосигналов с двух камер с динамически генерируемой и изменяемой маской) переписал на встроенном ассемблере (вот, кстати, ещё одна из самых классных и удачно реализованных фич в Дельфи!). Прирост скорости составил где-то 3-7%. Вернул как было - там и так запас был совершенно удовлетворительный...

Лазарь – тоже ничего. Многоплатформенность – уже «искаропки». Но есть ещё ошибки в компиляторе, да и среда – не столь стабильна. У уж отладка с помощью gdb под виндой – вообще отдельная пестня! Кроме того, различаются реализации паскаля (можно поставить ключики-опции компилятору, но различия полностью не исчезают, да, к тому же, реализация совершенно не полная даже в режиме совместимости с дельфи).
Не смотря на это, я думаю, что следующим за Дельфи будет Лазарь. По большей части – из-за многоплатформенности, ну и – из-за бесплатности. Ценовая политика Эмбаркадеро – просто умиляет и поражает своей какой-то уж очень своеобразной логичностью (в частности с точки зрения позиционирования продукта и желанием его сделать более распространённым).

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
А на какую именно версию Дельф перешли? На одну из тех, что появились после Дельфы 8 (.NET)?
И GUI программы на чём делали -- VCL или эта новая ГорящаяОбезьяна?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
А на какую именно версию Дельф перешли? На одну из тех, что появились после Дельфы 8 (.NET)?
И GUI программы на чём делали -- VCL или эта новая ГорящаяОбезьяна?

Судя по описанному, и по перспективам перехода на лазарус - таки VCL.

В принципе, тут мог бы быть еще один вариант (но увы, не кроссплатформенный) - C++ & WinForms. Вынь-формы они по структуре свей весьма VCL напоминают, а C++ он и с железом может. Правда в этом случае пришлось бы иметь дело с диким мутантом под названием C++/CLI, что весьма противно.

Я для своих проектиков, где требуется какой-то гуй (но нативный нафиг не нужен, зато мне нужен максимальный контроль над происходящем) хочу попробовать комбинацию pdcurses+SDL2+C++. Это в основном задачи компьютерного зрения и телеметрии с робота.
Y = λf.(λx.f (x x)) (λx.f (x x))

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
А на какую именно версию Дельф перешли? На одну из тех, что появились после Дельфы 8 (.NET)?
И GUI программы на чём делали -- VCL или эта новая ГорящаяОбезьяна?
XE3
XE5, судя по отзывам тех, кто уже "пощупал", ещё лучше (+кроссплатформенна).
VCL
На ГОбезьяну, судя по отзывам тех же людей и собственным экспериментам, во-первых, ещё рано переходить(годика через полтора-два...), во-вторых, по моему субъективизму - оно МЕДЛЕННЕЕ! "Сам удивляюсь!"(с)
Плюс, всё по той же причине ограничения по времени, нужно было БЫСТРО перестроиться с си-шарпа, на что-то гарантированно надёжное и хоть как-то известное по архитектуре и НЕ ИМЕЮЩЕЕ сборщика мусора.

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Плюс, всё по той же причине ограничения по времени, нужно было БЫСТРО перестроиться с си-шарпа, на что-то гарантированно надёжное и хоть как-то известное по архитектуре и НЕ ИМЕЮЩЕЕ сборщика мусора.
Так ведь у C# есть Си-шное подмножество. Надо использовать unsafe struct аллоцируемые с помощью System.Runtime.InteropServices.Marshal.AllocHGlobal (FreeHGlobal) и всё летает со скоростью света. Не пробовали?

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
Плюс, всё по той же причине ограничения по времени, нужно было БЫСТРО перестроиться с си-шарпа, на что-то гарантированно надёжное и хоть как-то известное по архитектуре и НЕ ИМЕЮЩЕЕ сборщика мусора.
Так ведь у C# есть Си-шное подмножество. Надо использовать unsafe struct аллоцируемые с помощью System.Runtime.InteropServices.Marshal.AllocHGlobal (FreeHGlobal) и всё летает со скоростью света. Не пробовали?

А оно мне надо, весь этот аттрибутированный маразм? :)
Да и, извините, помимо МОЕГО кода, в .NET-овском рантайме ещё всякие системные и библиотечные "приведения" и "драконы" летают и гадят с высоты. Прямо, как в том анекдоте: "Дохтур, я-то теперь знаю, что я - не зёрнышко, а петух - знает?" :)

Сергей, мне НЕ НАДО СКРЫВАТЬ низкоуровневость за псевдобезопасной "заботой обо мне". У меня, как раз часто в проектах "мешанина" из кода с разной семантической наполненностью - НОРМА, а не исключение. Не в винде, так в контроллерах. Хотя, борясь за скорость и в винде приходится "откатываться" от правильности и классики.

К тому же, попытайтесь средствами заатрибутированных структур в си-шарпе работать с реализацией протоколов через кучу интерфейсов (да, тех же сетевых - тот же свой обмен над UDP) сделать... У вас куча "лишнего" кода будет для "логической перетрансляции" между этими структурами и "чистым" си-шарповским кодом.

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
К тому же, попытайтесь средствами заатрибутированных структур в си-шарпе работать с реализацией протоколов через кучу интерфейсов (да, тех же сетевых - тот же свой обмен над UDP) сделать... У вас куча "лишнего" кода будет для "логической перетрансляции" между этими структурами и "чистым" си-шарповским кодом.

И это мы ещё реализации многопотоковости "всурьёз" не коснулись!... ;)

Для замкнутого мирка "очень высокого уровня" - всё прекрасней не бывает. Да мне-то от этого - не очень весело! У меня задачи совершенно другого уровня.
Естественно, что я сейчас и инструментарий стараюсь подходящий использовать.
Да, попытались "покопать-покрутить" СИ-шарп...
"Покрутили".
Нет, не то.
Вернулись к Си, Си++ и асму.  (И - Дельфи.)
Сейчас, вот, ещё (в связи с последними забавными и неожиданными, для меня, событиями), ещё и, скорее всего, Форт попробую. Там работа будет интересней - железо будет именно под форт заточенное - посмотрю, как это будет сравнимо, по удобству разработки и скорости работы, с дженерал-пурпоуз железяками с "натянутым" на них Фортом... :)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Сейчас, вот, ещё (в связи с последними забавными и неожиданными, для меня, событиями), ещё и, скорее всего, Форт попробую. Там работа будет интересней - железо будет именно под форт заточенное - посмотрю, как это будет сравнимо, по удобству разработки и скорости работы, с дженерал-пурпоуз железяками с "натянутым" на них Фортом... :)

А что за железо, если не секрет? Ну и какого рода задачи там решаются?

И в чем выражается форто-ориентированность?

PS. А некоторые вон, для пущей скорости некоторые задачи сразу на FPGA делают :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
А оно мне надо, весь этот аттрибутированный маразм?
Чего?

Я вот что имел в виду:
public unsafe struct IM
{
public IM* prev;
public IM* next;
public IM* top;
public IM* bottom;
public Raw from;
public Raw to;
public Raw data;
public Raw srcIP;
public Raw dstIP;
public double creationSeconds;
public uint id;
public uint time;
public int codepage;
public Direction direction;

public void Destructor ()
{
this.from.Free();
this.to.Free();
this.data.Free();
this.srcIP.Free();
this.dstIP.Free();
}

public static IM* New (Arena arena)
{
IM* p = (IM*)arena.Allocate(sizeof(IM));
*p = default(IM);
return p;
}

public static void Free (IM* p)
{
if (p != null)
{
p->Destructor();
Arena.Free(p);
}
}
}
 

Ансэйфное подмножество C# есть практически тот же Си, но синтаксис только чуток погуманнее.

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
Я вот что имел в виду:
public unsafe struct IM
{
...
}
 

Ансэйфное подмножество C# есть практически тот же Си, но синтаксис только чуток погуманнее.

Спасибо. Я - как бы в курсе.
Но этой гуманности мы нахлебались - по самое нихачу...
Мы уж как-нить - на плюсах с дельфями. :)

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Но этой гуманности мы нахлебались - по самое нихачу...
Это эмоциональный ответ из которого ничего не понятно. В чём конкретно для вас оказалась беда ансэйфного сишарпа в техническом плане?

Вот мне лично в ансэйфном C# не хватает возможности сделать оператор копирования структур приватным, и иногда, но очень редко, хочется чтоб структуры можно было наследовать - иметь для них виртуальные процедуры, или хотя бы иметь ансэйфный указатель на процедуру, по которому эту процедуру можно было бы сразу вызвать без преобразования его в делегат. Но, в принципе, и без этого жить можно.

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
В чём конкретно для вас оказалась беда ансэйфного сишарпа в техническом плане?
В том, что низкоуровневые вещи в си-шарпе - не "граждане первого сорта".
Попытайтесь, например, написать трансляцию с одной машины (к которой подсоединена веб-камера), видео на другую машину и там его вывести в каком-либо контроле с той же скоростью (без перерывов и задержек). И пусть даже машины будут сетевыми кабелями напрямую соединены, без свичей и роутеров...
Пользуйтесь только штатными системными ("из коробки") библиотеками и только теми языковыми средствами, которые предоставляет си-шарп.
Пример хоть немного и надуманный, но позволяет охватить всю тематику проблем.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Посему остался Дельфи.
А не рассматривали Аду? GNAT кросплатформенный, и GUI на основе GTK можно делать вроде бы...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Попытайтесь, например, написать...
Короче, на мой вопрос о том что конкретно вас не устроило в ансэйфном подмножестве C# вы предложили мне самому попытаться это угадать. Ну ладно, проехали.

Пользуйтесь только штатными системными ("из коробки") библиотеками
Для чего такое ограничение?

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
Короче, на мой вопрос о том что конкретно вас не устроило в ансэйфном подмножестве C# вы предложили мне самому попытаться это угадать. Ну ладно, проехали.
Конечно проехали!
Уже два года, как.
Как страшный сон. :)
Оно мне надо всё это сейчас из своей долговременной памяти вытаскивать?
Осталось только впечатление и воспоминание, что всё было хорошо, пока в пределах "оградки" пасёшься, а, как только, что-то нетривиальное или вне предложенных шаблонов, начинаешь делать - получашь "сказку странствий" с музыкой обкурившегося Шнитке.

Пользуйтесь только штатными системными ("из коробки") библиотеками
Для чего такое ограничение?[/quote]
Чем больше в Армии дубов, тем крепче наша оборона.
Я сейчас плююсь по поводу замечаний военных об интерфейсе.
Например, хотят не закладок на главной форме приложения, а - набор кнопочек на "стартовом диалоговом окне", по нажатию которых должны показываться другие диалоговые окна...
... вопсчем, 50 лет работы отрасли на ниве исканий в эргономике и построении гуёв - товарищу подполковнику под фалду шинели коту под хвост...
Там ещё много моментов смешных есть. Аж - до Корвалола обсмеяться можно.