Замечания и предложения

А нельзя снова new integer?

Может и можно, но это как-то некрасиво, если нужно делать много раз. Например, в программе тестирования, когда многократно требуются наборы массивов с разными размерами и содержимым. Я помню, конечно, про автоматическую сборку мусора, но хорошо ли так активно его плодить?

Т.е. если Вы, как Разработчик, поощряете подобный стиль программирования, буду его использовать:

begin
  var a:=new integer[3,3] ((1,2,3), (4,5,6), (7,8,9));
  a.Println(2); Writeln;
  a:=new integer[2,4] ((1,2,3,4),(5,6,7,8));
  a.Println(2); Writeln;
  a:=new integer[3,2] ((1,2),(3,4),(5,6));
  a.Println(2)
end.

А с другой стороны, ведь когда пишется что-то типа [quote=“RAlex, post:253, topic:143”] a:=MatrGen(2,4,(i,j)->Arr(1,2,3,4,5,6,7,8)[4*i+j]); [/quote]

все равно фактически происходит то же самое: создается новый массив и старая ссылка на прежний массив утрачивается, попадая в объятия к сборщику мусора.

Да, именно так. Я рекомендую инициализировать повторно. Активная сборка мусора - это нормально

Всё дело в том, кто ставит систему на ПК, любой нормальный системщик никогда не поставит чистую Винду, он всегда отключит всё гавно из неё и поставит нормальный софт с драйверами.

При создании возвращающей массив функции, при условии, что все манипуляции с результатом проводились с использованием других процедур, компилятором выводится предупреждение, что якобы возвращаемое значение не определено. Если я все правильно понял, то этот недочет нужно исправить.

Появилось очередное изменение, посмотрел на GitHub, думал, что-то интересное, а вышло что забавное: @ibond сделал “украинскую локализацию”. Видимо из-за запрета на Украине русского языка)) Надо ли ждать в дальнейшем казах тили, беларускую мову, а также, несомненно, катакану?

Мы пока думаем, надо ли оставлять украинскую локализацию в инсталляте или сделать внешний пак и разместить на сайте. А то как-то странно выглядит: украинский, русский и английский. Если бы было много, тогда понятно.

А история украинской локализации проста. Её сделал один украинский преподаватель и прислал нам. http://computer-science.in.ua/2017/07/16/ukrajinizacija-pascalabc-net/

Ещё в разные времена мне предлагали сделать локализацию на немецком и казахском, но к сожалению, кроме намерений я ничего не получил.

Так это только инсталлятор… я-то подумал, что локализация полной будет. Подсказки, сообщения об ошибках…

Исправим.

Вы пользуйтесь вместо Split методом s.ToWords

Там полная локализация. Инсталлятор как раз не локализован. Да и зачем его локализовывать

или сделать внешний пак и разместить на сайте.

зачем? она уже добавлена.

если в папке оставить от модуля только psu файл то компилятор принимает всё написанное но анализатор кода перестаёт подсказывать при вводе, возможно стоит исправить

Как насчёт того чтоб сделать несколько идентификаторов по умолчанию для {$ifdef} и {$ifndef}? (ну и у меня ещё not и and используются в {$ifdef }, в последнем примере, которые сложно адекватно заменить) Например:

{$ifndef EnvironmentLaunched}
System.Console.Clear;
{$endif}

чтоб в exe файл записывало эту строчку если программа не была запущена через простое F9.

Возьмём пример из CRT:

function RedirectIOUnitUsed: boolean;
var
  t: &Type;
begin
  t := System.Reflection.Assembly.GetExecutingAssembly.GetType('__RedirectIOMode.__RedirectIOMode');
  Result := t <> nil;
end;

и далее

  if (not RedirectIOUnitUsed) {and IsConsoleApplication} then
//здесь ошибка, IsConsoleApplication у нас никогда не инициализируется

//это комментарий из самого CRT, ещё 1 причина добавлять идентификаторы, IsConsoleApplication
//может меняться с помощью {$apptype }, а на сколько я понимаю директивы компилятору так устроены
//что переменной передать значение заданное директивой очень неудобно

Это if становится частью готовой программы и проверяет при запуске каждый раз, можно сказать что это не значительно, но я отвечу что это просто не красиво… Так было бы на много лучше:

procedure __InitModule;
begin
  //можно тут и из C++ взять его ! и &&, тогда можно без пробелов написать, а новички всё равно директивы компилятору не будут использовать
  {$ifdef not EnvironmentLaunched and IsConsoleApplication}

  Console.CursorSize := 15;    
  BlankString := ' '*(Console.BufferWidth - 1);

  {$else}

  Console.WriteLine('Программу с подключенным модулем CRT нельзя запускать по F9.');
  Console.WriteLine('Запустите программу, используя Shift-F9');
  Halt;

  {$endif}
end;

Ну и разумеется спектр применения большой, не только делать код более красивым

P.S. Как недавно было сказано в теме “Помощь новичкам” использовать отладку с CRT нельзя как раз из за этого Halt в инициализации. Возможно стоит заменить на такое:

  Console.WriteLine('Программу с подключенным модулем CRT нежелательно запускать по F9,');
  Console.WriteLine('такие процедуры как clrscr будут вызывать исключение(ошибку времени выполнения).');
  Console.WriteLine('Нажмите Enter чтобы продолжить или завершите программу и запустите с Shift+F9');
  Readln;

P.P.S. Не нашёл замены #pragma из C#, а ведь довольно полезная директива

@Admin Стоило бы обновить информацию на страницах Скачать и Download, т.к. размеры несколько выросли в последних билдах:

Pabc.NET Full / Std / Mini = 68,2 / 9,6 / 7,3 MB

А в разделе Что нового и What’s new, помимо свежих данных по объемам дистрибутивов, хорошо бы [сразу] добавлять ссылки на примеры, демонстрирующие каждую новую фичу, указанную в списке (ссылки либо внутрь онлайн-справки, либо хотя бы на соответствующий тикет в GitHub).

P.S. Как включить окно дизассемблера?

Можете пожалуйста добавить функцию для типов с закреплённым размером которая позволяет взять отдельно байт или бит? Или хотя бы для целых чисел

Если брать i-й от начала байт/бит - какая разница, какого типа данное, если тип базовый?

А зачем? Сами напишите

можно через shl и shr но это лишние действия, можно ли как то проще для компьютора? и как для остальных типов выделять какой то бит?

Нет, проще нельзя

1 лайк

А как проще, если у интеловского процессора нет иных команд для работы с битами, кроме or, xor, not, shl, shr ?

1 лайк