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

Кто ж через ярлыки запускает. Гораздо быстрее ввести Alt-F2 (или Windows+R) и набрать p или ещё несколько букв и нажать энтер. И какой тогда будет путь?

Не знаю как на других версиях Windows, у меня на 10 ещё надо настроить ярлык, указав какую папку ставить текущей при запуске.


Вы бы ещё через cmd заходили. Набирать что то на клавиатуре быстрее чем тыкнуть 2 раза?
Да и если надо сохранить программу в конкретном месте - надо в нужной папке тыкать меню “Создать”, а стандартное сохранение это для временных файлов.

Правда, я себе уже давно сделал эту кнопку, покопавшись в реестре:
image
Тогда же предлагал разработчикам добавить её, но вроде они спустили на тормозах…
Но и без неё, можно создавать текстовый файл и сразу переименовывать.

Даже в России есть немало людей, кому приходиться регулярно использовать более 2-х языков/алфавитов одновременно, не говоря уже об СНГ и прочих странах, особенно из бывш. СССР. Кроме того, в нынешние времена глобализации это просто норма – стандартный ввод/вывод в UTF-8.

Странно, у меня даже на древней не российской (пан-европейской) версии XP в системной консоли UTF-8 нормально работает (при использовании шрифта Lucida Console). У вас русская локализованная семерка? А что установлено в кач-ве системной локали (в XP это называлось язык для поддержки не-Unicode программ) – русский язык или англ.? А в региональных настройках что?

в системной консоли UTF-8 нормально работает (при использовании шрифта Lucida Console).

А это точно UTF-8, а не UTF-16? У вас локальная кодировка 65001?

Речь о совместимости с древними виндусами, а не о комфорте для немалых людей.

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

Проверил, с люсидой и у меня нормально. Но сути это не меняет, по умолчанию у хр и семёрок точечный шрифт. Вы же не будете спорить с тем, что случайный школьник, заметив сбитую кодировку в выводе, не догадается о том, что нужно сменить шрифт (на менее читабельный)? Раз уж даже я об этом не знал.

В юникоде, и в частности, в UTF-8 псевдографика есть и её там больше чем в любой другой кодировке.

2 лайка

Могу лишь пожелать удачи, если вы собираетесь выводить в консоль юникодную псевдографику которой нет в 866.

И ещё раз, помимо кривого вывода в консоль юникода на семёрке, у меня 0 претензий.

Я имел в виду работу в режиме System.Console.OutputEncoding := Encoding.UTF8. Системная локаль у меня русская на англ. винде. В консоли XP/Win7 перед выводом все транскодируется автоматом в UTF-16LE/BMP внутри, но только при выборе юникод-шрифта, как я понимаю. Иначе все выводится в дефолтной однобайтовой ANSI, соотв. установленной локали (или транскодирует из OEM для DOS-приложений, напр. OEM-866 → Win-1251 для русского).

ToDo в комментариях не подсвечивается в последней (собранной мною) версии.

Там изменён регистр - TODO - только большими. Этот раздел нужен регистрозависимый. Можно сделать именно ToDo - тогда TODO не будет подсвечиваться

Символ бесконечности в окне вывода отображается неправильно:

image image

Код для последних двух картинок:
// Источник: http://forum.mmcs.sfedu.ru/t/pomoshh-novichkam/263/2724
/// Корень степени n из x.
function Root(x, n: real) := x ** (1 / n);

begin
  var a, b: real;
  var not0 := Arr(real.NegativeInfinity, real.MinValue, -3.0, -2.0, -1.0, -real.Epsilon, real.Epsilon, 1.0, 2.0, 3.0, real.MaxValue, real.PositiveInfinity);
  var Чётные := Arr(-10, -8, -6, -4, -2, 2, 4, 6, 8, 10);
  var Нечётные := Arr(-9, -7, -5, -3, -1, 1, 3, 5, 7, 9);
  foreach var k in not0 do
    foreach var p in Чётные do
      foreach var n in Нечётные do
      begin
        a := Root(-(0 ** k), n);
        b := -Root(0 ** (k * p), n * p);
        if (a <> b) then
          Println(a, b, n, p, k);
      end;
end.

Картинка не та, см. URL.

Может, ссылки переместить влево, а книги — ко книгам?

{$zerobasedstrings} не влияет на string.Substring.

И не должна. Влияет только на индексацию

Отредактировал старое сообщение.

Пункты контекстного меню вкладок: “Новая вкладка справа” и “Закрыть вкладки справа”.

Можно добавить не частные на ваш взгляд подпрограммы из этого списка:

/// Возводит дробь в целую степень
function Power(x: Fraction; y: BigInteger): Fraction;
begin
  if (y > 1) then
  begin
    var z := x;
    while (y > 1) do
    begin
      x *= z;
      y -= 1
    end;
  end
  else if (y = 0) then
    x := Frc(1)
  else if (y < 0) then
  begin
    x := x.Inv;
    var z := x.denominator;
    while (y < -1) do
    begin
      x.denominator *= z;
      y += 1
    end;
  end;
  Result := x;
end;
// Источник: http://forum.mmcs.sfedu.ru/t/pomoshh-novichkam/263/141
{$reference System.Data.dll}
/// Вычисляет строку, не принимает функции
function eval(s: string) := System.Data.DataTable.Create.Compute(s, nil);
// Источник: http://forum.mmcs.sfedu.ru/t/pomoshh-novichkam/263/2526
/// Форматирует x в формат с фиксированной точкой
function FixedPoint(x: real) := x.ToString('f99').TrimEnd('0').TrimEnd('.');

Эта строчка влияет не только на модуль, где прописана - а на все файлы, к которым он подключён.
Это не замедлит .exe, потому что .dll догружаются по мере использования, но содержимое этой .dll всё равно будет видно отовсюду.
Лучше так, лишний раз, не делать.

Может, добавить в процедуру Print параметр по умолчанию WriteLastPDD : boolean := false?

Приветствую читающих! Не знаю, предлагали ли это до меня, но было бы удобно, если б переключение между файлами .pas на ленте имело какие-нибудь хоткеи а-ля браузер (ctrl+PGD/PGU, закрыть - CTRL+W и.т.п)

Ctrl+Tab

1 лайк

@ibond На этой строчке теперь падает компиляция на WinXP:

Cейчас .pcu читаются, даже если были созданы с другими настройками компилятор. Кроме того, что в таком случае существование .pcu может повлиять на результат выполнения программы - это может даже приводить к падению компилятор.

К примеру:
Во время тестирования POCGL - его модули компилирует в отдельной папке, включая максимальный дебаг (через /Debug:1 и /Define:ForceMaxDebug). Затем все тесты и примеры компилируются, многие выполняются. Затем папка с дебаговыми .pcu удаляется.
Но .pcu мелких модулей из примеров и тестов, к примеру этого, остаются. И всё ещё ссылаются на дебаговые .pcu, поэтому компилятор падает при их чтении.

Я имею свои соображения как это исправить, но не уверен можно ли лучше, поэтому хочу услышать больше мнений - особенно ваше @ibond, ибо вы занимаетесь .pcu .
И + интересно, могут ли мои идеи пересечься (помешать/помочь) IDE#230:


Есть всего 3 опции, которые важны в данном случае:

  1. /Debug
  2. /Define
  3. /SearchDir

Первые 2 стоит сохранять в заголовок .pcu, и если .pcu компилировали не с теми же настройками - отменить его чтение (так же как если версия самого .pcu файла не совпадает с версией, сохранённой сейчас в текущей версии компилятора).

Третью - можно проверять умнее, заодно исправляя проблему, указанную выше:
Для каждого модуля-зависимости, записанного в .pcu файле, выполнить обычный алгоритм поиска модуля, то есть GetUnitFileName. Если результатом не будет тот же зависимый .pcu, что записан в заголовке читаемого .pcu файла - отменить его чтение.

Таким образом даже с другими настройками /SearchDir - .pcu файлы будут оставаться валидными, пока их зависимости выбраны из тех же папок, что выбрал бы компилятор, если бы .pcu не существовал.
В то же время с теми же настройками, но при отсутствии ранее использованного .pcu файла-зависимости - компилятор не упадёт, а будет или выдавать соответственно “модуль не найден”, или использовать этот же модуль, но из другой папки.

Ну и последнее - на стандартные модули, включая во время _GenerateAllSetups.bat, ни в коем случае не должны накладываться эти проверки. Они живут своей жизнью.