Delphi в стиле Си

Тема в разделе "DELPHI", создана пользователем Intro, 15 май 2019.

  1. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Не вроде, а так и есть, процедура во обще не возвращает значения, а функция может вернуть. Прототип должен совпадать с Сишным вариантом на 100%.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    я щас думаю для монтажа видео пересесть с Kdenlive на Relolve, как более навороченную альтернативу... запустил под Линуксом, все работает норм, только бесплатная версия понимает prores кодеки, с обычными не работает... но это в принципе даже хорошо, нужно просто конвертить все видео в prores, а потом монтировать с меньшими тормозами, тк технически propres более оптимизированный под скорость кодек... можно сразу в prores писать (моя камера умеет так делать), но это не очень эффективно в плане места на св-карте...
     
  3. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.074
    ну, сравнивать их это а-ля notepad versus ms office :) если нужОнЪ motion tracking резолв самое то, есть ещё cinelerra. для самых сложных случаев, ваще, надобно разбивать весь видосик на отдельные фреймы.
     
  4. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Кстати, а как system.pas перекомпилировать? Кто знает?
     
  5. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    http://any-book.org/download/14679.html

    Туториал от Ms-Rem'a. Не факт, что заведётся без доработки для 64х-битных приложений, но для х32 работает без проблем.

    Если не секрет, зачем такие извращения, если на си ты получишь такой же размер (и даже меньше) из коробки? Ведь смысл дэльфи именно в удобной RTL и в удобстве, которые ты потеряешь, прилинковав пустые system.pas и sysinit.pas - на си писать станет даже удобнее и проще.
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    с этим канеш согласен... но паскаль, хоть и старый, хоть и ужасно некрасивый (программа состоит из begin-end'ов более чем на 100%), является более безопасным в сравнении с сишечкой (более строгая типизация, минимум неопределенного стандартом поведения, массивы и строки с длиной из коробки и тд)... так что потенциально можно предположить, что кодить без стандартных библиотек на нем имеет какой-то смысл (там для разработки оси, под какие-то левые железки, или каких-то шелл-кодов например)... я экспериментировал с фри паскалям в этом отношении, но он очень тяжело отучается от стандартной библиотеки, я в итоге забил и все запилил на плюсах... может стоит освежить это в памяти и попробовать еще разок, единственное меня дико коробит на паскале писать, уж очень синтаксически некрасивый язык...
     
  7. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    А мне наоборот очень нравится паскальный синтаксис. Очень сложно на нём писать некрасивый код. Читать сурсы - одно удовольствие.

    Про разработку операционок на паскале - имхо, изврат, ведь есть раст.

    Для меня паскаль идеален для фронтенда. Никакой Qt и близко не стоит по скорости разработки красивых формочек с анимациями на FireMonkey. Раньше только на паскале и писал - и системные вещи, и хуклибы, даже дизассемблер длин свой накидал. Так сказать, стопами Ms-Rem'а. Но операционки... Нет, при всей любви к дэльфи, я бы сейчас даже для юзермодных системных вещей его не взял, но писать проект на дэльфи + си - за милую душу.
    --- Сообщение объединено, 3 авг 2019 ---
    Кстати, именно это ты и потеряешь, прилинковав пустые system/sysinit. Никаких сложений строк плюсами, никаких SetLength для массивов. Получится чистый си, только с begin..end'ами. Удовольствие так себе, на троечку. Не говоря про сопутствующие проблемы с использованием сторонних библиотек, которые есть для си, но к которым придётся руками писать интерфейс для паскаля. Всякие структуры данных, всё придётся портировать или писать самому. Столько головной боли...
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Rel,

    > кодить без стандартных библиотек на нем имеет какой-то смысл (там для разработки оси

    Для разработки системы, вот прикол то. Нэйтив на паскале.. что ты там куришь ?
     
  9. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Справедливости ради, на fpc можно написать операционку, инлайн-асм там есть. Только зачем?..
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    HoShiMin,

    Ты наверно не понимаешь разницы, написать и написать без уязвимостей это совершенно разные вещи.
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    само собой, для этого тебе придется переопределить стандартный аллокатор... но я говорю не об этом:
    --- Сообщение объединено, 3 авг 2019 ---
    ну раст тоже на любителя знаешь ли... фанатам паскаля хватает паскаля: https://wiki.freepascal.org/Operating_Systems_written_in_FPC
    --- Сообщение объединено, 3 авг 2019 ---
    по сабжу: если нравится алголовский синтаксис, то надо брать Аду, очень хороший язык с очень хорошим компилем (GNAT имеется ввиду)... в Аде еще сложнее себе в ногу стрелять чем в Паскале и тем более в сишечке/плюсах...
     
  12. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Надо брать плюсы)
    --- Сообщение объединено, 3 авг 2019 ---
    На плюсах наделать уязвимостей можно гораздо большим числом способов с большей изощрённостью
     
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    HoShiMin,

    Вот только дельф используется исключительно школотой, которая про уязвимости даже понятия не имеет. Они не знают как всё устроено, архитектуру и правила, а тупо вызывают какие то интерфейсы из среды компилера. На выхлопе получается просто ппц. Это обезьяний" кодинг.
    --- Сообщение объединено, 3 авг 2019 ---
    Системная защита сдерживает такого рода поделки, но если её нет или отключена, то быть беде. Никаких правил, стандартов, ничего - тупо самовольные действия без понимания как это будет работать в ОС, достаточно что бы собралось без ошибок. В принципе можно даже дать определение самому коденгу - это работа с системой, понимание как будет работать код или это работа с ide.
     
  14. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Да. А при чём тут дэльфи? Это ведь проблема школьников, а не языка.
    --- Сообщение объединено, 3 авг 2019 ---
    И опять же, при чём здесь язык? Не обязательно дэльфи, подставь любой другой - говнокодить можно на чём угодно. Языки-то в чём виноваты?
     
  15. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    HoShiMin,

    Сама среда и компилер так говяно устроен, никто не найдёт соответствие в выхлопе этого говна исходному коду. Нет смысла спорить, дельф удел исключительно школьников. Докажи обратное.
    --- Сообщение объединено, 3 авг 2019 ---
    HoShiMin,

    > говнокодить можно на чём угодно. Языки-то в чём виноваты?

    Си например требует знание системы, описываемый обьект понятен, как он существует в системе. Для всяких дельфей/пхп и прочего говна системы нет, есть только правила описания обьекта в среде сборки. К примеру часто описатель путают с указателем, базой загрузки и дескриптором. Для компилера разницы нет, есть общие правила для манипуляций указателями.
    --- Сообщение объединено, 3 авг 2019 ---
    HoShiMin,

    Не смотря на то, что ты есчо очень зелёный", я тебе приведу реальный пример и цитату, которая отлично показывает суть:

    https://seclists.org/fulldisclosure/2013/Dec/130
     
    Последнее редактирование: 3 авг 2019
  16. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Нет, ну так дискуссии не строятся! Ты ведь начал гнать на дэльфи, значит, тебе первому и доказывать
    Совершенно не требует. На си может писать каждый школьник, он не требует ни специфических знаний, ни, тем более, понимания работы платформы, на которой запущена программа.
    Си и дэльфи отличаются только тем, что в сях {}, а в дэльфи begin..end. Вся работа с памятью и с указателями абсолютно одинакова и там, и там.
    Совершенно не согласен. Выхлоп прекрасно реверсится и соответствует тому, что ты написал. Когда писал на дэльфи низкоуровневые вещи и лазил по ассемблерным листингам, никаких недопониманий ни разу не возникало. Компилятор не создаёт ни странных или неочевидных конструкций, ни какого-то хардкора. Напротив, вполне упорядоченный листинг, который легко читать. И более того, в плюсах с /O3 и включенным инлайном ты рискуешь получить нечто головокружительное. В дэльфи же до перехода на LLVM оптимизатор был попроще и даже включенные оптимизации не превращали код в нелинейную кашу. Так что... Странная претензия. Как дэльфист в прошлом, никак не могу с этим согласиться.
    Честно говоря, не понял, куда смотреть и что именно ты хотел этой статьёй показать.
    Ну, показал им, что где-то что-то у них уязвимо. А какое отношение это имеет к языку, если твои претензии не понимают именно авторы кода, а не язык?
    В плане возможностей си и дэльфи ничем не отличаются. То, что ты можешь написать на си, ты точно так же, построчно, можешь вставить в дэльфи, заменить {} на begin..end и получится то же самое.

    Всё-таки, в чём претензии именно к языку? Не к людям, которые на языках пишут, а именно к языку, как к инструменту. Может, каких-то конкретных возможностей не хватает или какого-то синтаксического сахара, к которому ты привык в плюсах?
    --- Сообщение объединено, 3 авг 2019 ---
    Вот пример:
    Код (C):
    1.  
    2. #include <cstdio>
    3.  
    4. int main()
    5. {
    6.     int var = 123;
    7.     int* p = &var;
    8.     printf("%i\n", *p);
    9. }
    10.  
    Код (Pascal):
    1.  
    2. program Sample;
    3.  
    4. uses
    5.   System, SysUtils;
    6.  
    7. var
    8.   variable: Integer;
    9.   p: ^Integer;
    10. begin
    11.   variable := 123;
    12.   p := @variable;
    13.   WriteLn(IntToStr(p^));
    14. end.
    15.  
    Одно и то же. Школьники одинаково могут начать писать на обоих языках и одинаково работать с памятью. Отличий ноль. И где тут нужно понимать систему, на которой мы запускаемся?

    Систему надо знать только если пишешь системные вещи, и к языку это тоже отношения не имеет.
     
    Последнее редактирование: 3 авг 2019
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    кроме отладчика, который как бы прекрасно умеет находить соответствие между исходным и нативным кодом, это никому и не должно быть нужно... понимание семантики ЯВУ вполне достаточно...
    --- Сообщение объединено, 3 авг 2019 ---
    Инде, как истинный глубоко верующий человек, не в курсе, что доказывать утверждение должен утверждающий, а не тот, кто ставит утверждение под сомнение...
    --- Сообщение объединено, 3 авг 2019 ---
    в сравнении чисто с плюсами: в дельфи пока не завезли лямбды, констэкспр и другое ущербное плюсовое метапрограммирование... но зато из коробки есть модули, которые походу даж в с++20 до нас не доедет...
     
  18. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Давно уже завезли:
    Код (Delphi):
    1.  
    2. type
    3.   TCallback = reference to function(Arg: Integer; Str: string): Integer;
    4.  
    5. procedure SampleProc(Callback: TCallback = nil);
    6. begin
    7.   if Callback != nil then
    8.     WriteLn(Callback(123, 'Sample text'));
    9. end;
    10.  
    11. ...
    12.  
    13. begin
    14.     SampleProc(function(Arg: Integer; Str: string): Integer
    15.     begin
    16.         WriteLn(Arg, Str);
    17.         Result := 123456;
    18.     end);
    19. end;
    20.  
    Да, констэкспры хотелось бы, полезная фича, а метапрограммирование... Не так уж часто оно и нужно. В конце концов, сложный макрос можно развернуть в несколько инлайн-функций. Зато есть дженерики. И даже какая-никакая, но рефлексия (правда, ни разу ей не пользовался).
     
  19. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    HoShiMin,
    Может, каких-то конкретных возможностей не хватает или какого-то синтаксического сахара, к которому ты привык в плюсах?

    Думаю тут надо скомпилить что то с маллоком, меморимап, ну и на фрэймы стека посмотреть. Отладчиком. Если нет, то рэйс кондишны глянуть. Если Инди прав, то где-то перезатирание указателя можно реализовать. Только если это так то почему сразу не показать где? А сахар тут не причем .
     
  20. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Давно мечтаю в плюсах об аннотациях, как в джаве... :meeting:
    --- Сообщение объединено, 3 авг 2019 ---
    Но это будет справедливо и для плюсов, и вообще для любого языка, разве нет? Если речь, конечно, не о каком-то конкретном баге в компиляторе, который это позволяет. А если в компиляторе - достаточно написать в их аналог багзиллы и ждать фиксов.