1 (изменено: Freeman, 08.06.2023 в 21:46)

Тема: Спор об оформлении кода

А это недоразумение так и останется KolibriChar?

Как ты собираешься подключать сторонний код?
вот, допустим, такой код
будет работать и с AnsiChar, и с WideChar
но этот код будет "дружить" с модулем KolibriOS только
в случае AnsiChar

program TestChar;

{$APPTYPE CONSOLE}

//type
//  Char = WideChar;
//  Char = AnsiChar;

var
  C: Char;
  Arr: array[Char] of Char;

begin
  for C := Low(Arr) to High(Arr) do
  begin
    Write(ord(C), #10);
  end;
  ReadLn;
end.

или вот тут может быть проблема

var
  C: Char;
  KC: KolibriChar;
..................  
  KC := C; <------ тут будет incompatible types, когда Char = WideChar

 
  если же переделывать код под KolibriChar,
  то он перестанет работат там, где Char = WideChar
  А вот если KolibriChar переделать на KolibriOS.Char,
  то всё будет ОК.
  И я ещё раз специально повторю, что это вовсе не означает, что
  придётся всегда писать KolibriOS.Char, писать нужно будет
  как обычно — Char, чтобы у всех(и с AnsiChar, и с WideChar) работало.
 
Ты предлагаешь делать отдельно Ansi-версию для KolibriOS?
Сейчас вряд ли во времена юникода кто-то будет писать код именно для Ansi,
то есть, используя символьный тип AnsiChar вместо типа Char.
Вместо того чтобы переделывать весь код, достаточно просто переопределить
generic-тип Char(на то он и generic).
И другой вариант врядли можно найти, так как правильный код использует Char,
подразумевая, что этот Char может быть как AnsiChar, так и WideChar.
Так что, правильный путь объявить в модуле KolibriOS

type
  Char = AnsiChar;

и это будет работать везде, если код написан правильно.

а также из-за longword-ов, да и вообще нелепых названий

PCILongWord
Открой любую доку по PCI, и никаких longword-ов ты там не найдёшь
Там будут Dword-ы.

InitConsole, но зато HeapInit и при этом CreateThread  — это что вообще? Я объяснял уже логику названий(хотя и есть сомнительные моменты), но сейчас логики стало ещё меньше, чем было до.

ну и вот здесь, скажем,
если раньше код был просто не доработан, то теперь он стал не верным.
И раньше, и сейчас было "не совсем правильно".
Но разве чем-то, то что стало сейчас, лучше?

ах да кодстайл

открываешь допустим classes и там

  if Sorted then Error(@SSortedListError, 0);
  if (Index < 0) or (Index >= FCount) then Error(@SListIndexError, Index);

или sysutils

    case DateOrder of
      doMDY: begin Y := N3; YearLen := L3; M := N1; D := N2; end;
      doDMY: begin Y := N3; YearLen := L3; M := N2; D := N1; end;
      doYMD: begin Y := N1; YearLen := L1; M := N2; D := N3; end;
    end;

а ещё можешь открыть getmem.inc

    if (bd.addr <= b.addr) and (bd.addr + bd.size >= b.addr + b.size) then begin
      if bd.addr = b.addr then begin
        Inc(bd.addr, b.size);
        Dec(bd.size, b.size);
        if bd.size = 0 then
          DeleteBlock(bd);
      end else if bd.addr + bd.size = b.addr + b.size then
        Dec(bd.size, b.size)
      else begin
        n.addr := b.addr + b.size;
        n.size := bd.addr + bd.size - n.addr;
        bd.size := b.addr - bd.addr;
        if not AddBlockAfter(bd, n) then begin
          result := False;
          exit;
        end;
      end;
      result := True;
      exit;
    end;

и я абсолютно согласен! Нужно писать так, чтобы читать было понятно конкретно ЭТОТ код здесь и сейчас.
А вовсе не для того, чтобы соответствовать чьим-то там надуманным "правилам"

Обсуждение в тему https://www.sql.ru/forum/470248-0/forma … dnogo-koda


Ну вот, поэтому пул реквесты приняты и не будут, а следовательно и делать их смысла нет.
Код выкладываю на форум, если он полезен — используйте, делайте коммиты, если нет — не делайте.

Я не для эмбаркадеры код пишу, чтобы подстраиваться под их правила!

2 (изменено: Freeman, 08.06.2023 в 21:47)

Re: Спор об оформлении кода

0CodErr пишет:

А это недоразумение так и останется KolibriChar?

KolibriChar остается. Сторонний код или должен быть уже портирован под современные версии Delphi самими разработчиками, или будет компилироваться без изменений в тех версиях Delphi, для которых он предназначен. Код для KolibriOS должен писаться с использованием KolibriChar, ради совместимости со всеми версиями Delphi у потенциальных пользователей SDK. У меня уже есть dcc32.exe от Delphi XE5, буду работать над совместимостью на реальном примере. Сейчас System им не компилируется, хочет много дополнительных типов и процедур. Со временем мы должны достичь компилируемости актуальной версией Delphi Community Edition, чтобы быть лицензионно чистыми до конца. Пока вопрос покупки поддерживаемых версий Delphi оставлен на совести пользователей SDK.

0CodErr пишет:

PCILongWord
Открой любую доку по PCI, и никаких longword-ов ты там не найдёшь
Там будут Dword-ы.
InitConsole, но зато HeapInit и при этом CreateThread  — это что вообще? Я объяснял уже логику названий(хотя и есть сомнительные моменты), но сейчас логики стало ещё меньше, чем было до.

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

InitConsole остается. Это уже наша прикладная обертка CRT, а не оригинальная процедура console.obj. С твоей логикой и printf надо вернуть вместо Write/WriteLn, и остальное.

По остальным функциям будет смотреть, повторюсь. Пусть будут примеры. Глядя на их код, станет понятно, как лучше.

0CodErr пишет:

ну и вот здесь, скажем,
если раньше код был просто не доработан, то теперь он стал не верным.
И раньше, и сейчас было "не совсем правильно".
Но разве чем-то, то что стало сейчас, лучше?

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

0CodErr пишет:
    case DateOrder of
      doMDY: begin Y := N3; YearLen := L3; M := N1; D := N2; end;
      doDMY: begin Y := N3; YearLen := L3; M := N2; D := N1; end;
      doYMD: begin Y := N1; YearLen := L1; M := N2; D := N3; end;
    end;

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