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

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

Исправим.

Вы пользуйтесь вместо 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 лайк

как насчёт добавить функцию для преобразования целых чисел к boolean: boolean(5) которая будет выдавать true если число не чётное(если последний бит = 1) и целым числам функции IsEven и IsOdd

begin
  var n:=5;
  Writeln(((n shr 1) shl 1)<>n)
end.

Я говорю не про то как это можно сделать, а про то чтоб это было в стандартных библиотеках паскаля, boolean хоть и основано на целом числе(при чём почему то 32- а не 8-битном) - довольно плохо сочетается с целыми числами… n shr 1 shl 1 <> n довольно громоздкая запись, а в стандатных типах полно того что полезно только чтоб сделать код короче.

Вообще функция boolean мне нужна была чтоб не записывать b := i=1?true:false, а про IsEven и IsOdd я подумал из за BigInteger у которого есть IsEven и, как мне казалось, пока я не проверил, IsOdd

Насколько я понял, IsEven есть только у integer, IsOdd - у integer и BigInteger

Как-то немного коробит выражение “мне нужна” - ведь PascalABC.NET все же не лично под Ваши хотелки сделан. Вы не представляете, сколько “мне нужно” в этом паскале, некоторую часть желаемого я написал и постарался объяснить, почему это может быть полезно многим, приводил примеры. И часть из этой части желаемого была добавлена, потому что разработчики сочли такое добавление полезным и не раздувающим язык сверх меры. А Ваше “мне нужна” в такой форме выглядит чересчур потребительски-эгоистично.

Чет забомбило.

Во всех современных языках мира числа преобразовываются к bool иначе: если ==0, то false, во всех остальных случаях true. Добавить тот же синтаксис, иную семантику, и программисты всея Руси будут вспоминать PABC.NET не иначе как “брррр”.

А такая сверхспецифичная функция проверки четности числа никоим образом не должна касаться стандартной библиотеки языка. Особенно в таком исполнении.

Нет.

Простите, промышленных.