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


#1307

Исправили


#1308

Это что? Дельфизм какой то?

begin
  var i1: integer := 5;
  var i2: integer = 5; // так тоже работает
end.

#1309

Это по программе перехода к C# :smile:


#1310

По-хорошему, если бы синтаксис разрешал объявлять в произвольном месте кода константы, я бы не стал возражать :smile:

А то сейчас компилятор ругается в стиле “Встречено ‘const’, а ожидался оператор”. У нас получается, что есть рекомендация объявлять переменные в месте, максимально близком к месту их первого использования, а на константы это почему-то не распространяется, хотя константа - суть инициализированная переменная, доступная только на чтение.


#1311

Не ожидал конечно от вас хотелку услышать)) Но да, о внутриблочных константах и я давно мечтаю и пару раз говорил…


#1312

Ну почему же, хотелок у меня было весьма много и почти все они, кстати, удовлетворены. Возможно потому, что они учитывали интерес массового пользователя, а не были связаны с “экзотическими извращениями”.

И да, я не имел в виду внутриблочных констант, все куда незатейливее. Я лишь хотел сказать, что неплохо распространить право упоминать константу не только в разделе констант (как и переменные - в разделе описания переменных), но и в любом месте по тексту программы.


#1313

Это:

begin
  const x = 5;
end.

И называются внутриблочные, ибо они внутри блока begin-end. А других вариантов где

может находится - нету. Они или в блоке или вне, то есть там же где новомодный и старомодный var-ы соответственно.


#1314

Спасибо, я знаю, что такое внутриблочные объекты. И еще раз, третий, пишу о том, что на внутриблочные не претендую, а было бы хорошо иметь возможность описать константу не в разделе const, а в текстуально удобном месте. Примерно вот так:

const
  rho1 = 7.874; // Fe
  rho2 = 11.3415;// Pb

function P(rho, V, g: real) := rho * V * g;

begin
  var V := ReadReal;
  const g = 9.81; // Earth
  Println(P(rho1, V, g), P(rho2, V, g));
end.

#1315

А можно тогда пример с константами, которые сейчас не разрешает описать, но так чтоб они небыли внутриблочными?

Потому что я вам не понимаю, вы говорите что не претендуете на внутриблочные константы, и сразу даёте пример где именно такой и не хватает.

Я вообще выше вон сказал, что сам не могу представить такой пример, где константа не было бы разрешена и при этом одновременно не считалась внутриблочной.


#1316

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


#1317

Это общепризнанная терминология, ну да ладно)


#1318

Не всегда. В Паскале программа - это блок, перед которым располагаются секции описаний. У прочих, внутренних блоков, нет предваряющих их секций.


#1319

Да. В Delphi есть типизированные константы, которые на самом деле переменные. Для этого и сделано. Вам это мешает?


#1320
begin
  var a: integer := 5; // корректно
  var b: integer = 5; // корректно и порождает вопросы
  a += 1; // корректно
  b += 1; // корректно
  var c: integer;
  c := 5; // корректно
  var d: integer;
  d = 5; // ОШИБКА
  var e := 5; // корректно
  var g = 5;  // ОШИБКА
end.

Наличие конструкции var b: integer = 5; порождает больше вопросов, чем приносит пользы. Возможно, стоит где-то в Справке явно сказать, что она оставлена исключительно для совместимости с Delphi и не рекомендуется к применению в создаваемых программах.


#1321

В справке так и сказано, кстати)


#1322

В справке “сказано” так:

или

имя: тип = выражение; // для совместимости с Delphi

Т.е рекомендаций не использовать в новых программах нет. Кроме того, формат не предусматривает наличия ключевого слова var для описания в произвольном месте программы: сказано, что перечислены форматы раздела описаний.


#1323

Если на экране есть регион содержащий много кода - IDE начинает задыхаться:

Программа, которой я сделал этот большой файл:

begin
  System.IO.File.Delete('2.pas');
  var sw := System.IO.File.CreateText('2.pas');
  
  sw.WriteLine($'program prog;'); // иначе точка сворачивания документа и первого класса - совпадут
  for var rn := 1 to 10 do
  begin
    sw.WriteLine;
    sw.WriteLine($'{{$region r{rn}}}');
    
    for var cn := 1 to 500 do
    begin
      sw.WriteLine;
      sw.WriteLine($'type t_{rn}_{cn} = class end;'); // не важно чем заполнены регионы, это первое что я придумал
    end;
    
    sw.WriteLine;
    sw.WriteLine($'{{$endregion r{rn}}}');
  end;
  
  loop 20 do sw.WriteLine; // чтоб было куда прокручивать
  sw.Write($'begin end.');
  sw.Close;
end.

Как видно в конце видео - эта проблема очень мешает делать OpenGL.pas. Я перевёл только основные функции и типы, и файл уже получился на 7к строк. Больших регионов там всего 2, на 3к и 4к строк (типы и функции соответственно), а остальное пока так, по мелочи. Вот когда эти регионы на экране - IDE ужасно лагает.

Выглядит так - будто все строчки которые скрыты регионом - всё ещё пытается рисовать, хоть они и скрыты. Пожалуйста, посмотрите что можно сделать, ибо это та ещё боль работать так…


#1324

Вообще, Intellisense — крайне неоптимизированная и ломкая вещь. Потому что никто изначально не собирался использовать PascalABC.NET для крупных проектов. Рано или поздно его нужно будет рефакторить. Твою проблему решат точно не скоро.


#1325

Анализатор кода тут не при чём. Лагает само рисование текста в IDE.


#1326

[quote=“developer46, post:1306, topic:143, full:true”]

unit __RedirectIOMode;

//------------------------------------------------------------------------------
// Модуль подключаемый в режиме запуска со связью с оболочкой                  
// (с) DarkStar 2007
// Функции:
//    1. Посылка в поток ErrorStream сигнала [READLNSIGNAL]
//    2. Перехват исключений по AppDomain.CurrentDomain.UnhandledException и 
//       пердача их в поток ErrorStream // может быть "передача"?
//    3. Перехват исключений по Application.ThreadException и 
//       пердача их в поток ErrorStream // "передача" ?
//------------------------------------------------------------------------------

Это опечатка? Нужно ли исправлять?

Спасибо за исправление опечатки!
P.S. Последняя опечатка:

// Copyright (©) Сергей латченко ( github.com/SunSerega | forum.mmcs.sfedu.ru/u/sun_serega ) 
//                      Латченко (может, с большой буквы?)
// Этот код распространяется под Unlicense  
// Для деталей смотрите в файл LICENSE.md или сюда:   
// https://github.com/SunSerega/PascalABC.Net-BlockFileOfT/blob/master/LICENSE.md          
(************************************************************************************)
unit BlockFileOfT;

Спасибо за чтение сообщения, извиняюсь за излишний перфекционизм.