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


#265

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


Библиотека численных методов для PascalABC.NET
#266

Как насчёт того чтоб сделать несколько идентификаторов по умолчанию для {$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#, а ведь довольно полезная директива


Библиотека численных методов для PascalABC.NET
#267

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

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

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

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


Библиотека численных методов для PascalABC.NET
#268

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


Библиотека численных методов для PascalABC.NET
#269

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


Библиотека численных методов для PascalABC.NET
Библиотека численных методов для PascalABC.NET
#270

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


#271

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


#272

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


#273

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


#274

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


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

#276

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

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


#277

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

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


#278

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

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

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


#279

Нет.


#280

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


#281

Да ну?


#282

Вроде JediKnight писал о другом: не о том, что “числа преобразовываются к bool” неявно, а о том, что преобразовываются иначе. И в C# функция Convert.ToBoolean работает вполне типично.


#283

просто перечитайте его пост, который я вначале отцитировал.


#284

Вот это имеется в виду?

Вроде пост не редактировался. Про неявное преобразование тоже не сказано.