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

Что есть реализовать такой или подобный синтаксис для File Of T ?

a = class
  b: record end;
  c: file of b;
end;

В ряде случаев, когда требуется записывать в файл только эту запись, было бы достаточно полезно.

Конечно можно просто объявить тип записи раньше, но если запись требуется только внутри класса, это от части усложнит код

Ну, именно как вы написали - делать точно нельзя, если делать это на уровне компилятора - то надо сначала реализовать что то типа decltype из C++.
Но вообще этого же можно добится дополнительной функцией:

function file_for<T>(o: T): file of T;
begin end;

type
  c1 = class
    val: record x: integer end;
    f := file_for(val);
    
  end;
  
begin end.

В справке нет информации об операторах +=, -=, *= и /= для чисел.

Не совсем так.

Можно добавить не частные, с вашей точки зрения, подпрограммы из файла в NumLibABC. Некоторые подпрограммы изменены, некоторые — созданы. Векторы.pas (14.4 КБ)

1 лайк

Когда через IDE запущена Win форма, и в ней требуется перезапуск(Application.Restart;), то среда теряет контроль над программой, а вместо формы запускается консоль. Перезапуск хоть используется и не часто, но всё-таки не очень приятно. Если это технически можно исправить, то было бы неплохо

Новые фичи for step и foreach index пока не дружат с Intellisense.

Кстати, вы сделали подсветку этих ключевых слов зависящую от контекста (причём берущую подсветку от for). Я это заметил потому что в свою подсветку эти слова не добавлял, но они при этом работают. Это круто! Стоит ли ждать контекстуальную подсветку других ключевых слов (Result, value, read-write в свойствах)?

А как они не дружат? Что не работает?

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

for var i:=step+ step to step+step step step+step do
1 лайк

Ну вот тут i не подсвечивается

foreach var x in |1, 2, 3| index i do
1 лайк

А почему переменная должна подсвечиваться? х - что, подсвечивается?

Да

image

Так Вы терминологию не путайте. Подсветка - это способ выделения фрагмента из чего-то более крупного. Для шрифта это могут быть быть цвет, гарнитура, подчеркивание, кегль и т.д. А то, что Вы показали на рисунке - это мини-справка Intellisence.

1 лайк

Понятно. Поправим

Понятно. Поправим

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

TypeToTypeName:

  if t.IsPrimitive then 
    case System.Type.GetTypeCode(t) of

Не хорошо оставлять case без else. Только что обнаружил что вместо UIntPtr выписывает пустую строку.

Вообще t.IsPrimitive никак не гарантирует что Type.GetTypeCode не выдаст ничего кроме обработаных вами значений.
Лучше убрать if t.IsPrimitive then и поставить всё остальное тело TypeToTypeName в else от case'а.

Не понял эту фразу - поясните

t.IsPrimitive обрабатывается быстро - этим сокращаются вычисления. И приведите пример примитивных типов, не представленных в коде

case не медленнее, потому что он превращается в таблицу прыжков в IL коде.
То есть выполнение заголовка case это 1 разименование указателя.
А IsPrimitive это вызов виртуальной функции, поэтому её выполнение это Минимум 1 разименование указателя.

Нигде в документации не написано, что если t.IsPrimitive=true, то Type.GetTypeCode вернёт одно из значений, которые вы обработали в case.

Я уже привёл - это UIntPtr.


И, ещё раз, первоочерёдная проблема это то что case без else это говнокод, имеющий потенциал создать неопределённое поведение, если писать его не изучив все варианты (включая будущие, к примеру то что могут добавить в обновлениях .Net) - а вы их таки не изучили.

Поправил else Result := t.ToString;

Мда, я лучше пулл кину… Всё равно я хотел добавить запись в существующийStringBuilder, чтобы не плодить объекты строк в куче.