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


Код для последних двух картинок:
// Источник: 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
Cейчас .pcu читаются, даже если были созданы с другими настройками компилятор. Кроме того, что в таком случае существование .pcu может повлиять на результат выполнения программы - это может даже приводить к падению компилятор.
К примеру:
Во время тестирования POCGL - его модули компилирует в отдельной папке, включая максимальный дебаг (через /Debug:1
и /Define:ForceMaxDebug
). Затем все тесты и примеры компилируются, многие выполняются. Затем папка с дебаговыми .pcu удаляется.
Но .pcu мелких модулей из примеров и тестов, к примеру этого, остаются. И всё ещё ссылаются на дебаговые .pcu, поэтому компилятор падает при их чтении.
Я имею свои соображения как это исправить, но не уверен можно ли лучше, поэтому хочу услышать больше мнений - особенно ваше @ibond, ибо вы занимаетесь .pcu .
И + интересно, могут ли мои идеи пересечься (помешать/помочь) IDE#230:
Есть всего 3 опции, которые важны в данном случае:
/Debug
/Define
/SearchDir
Первые 2 стоит сохранять в заголовок .pcu, и если .pcu компилировали не с теми же настройками - отменить его чтение (так же как если версия самого .pcu файла не совпадает с версией, сохранённой сейчас в текущей версии компилятора).
Третью - можно проверять умнее, заодно исправляя проблему, указанную выше:
Для каждого модуля-зависимости, записанного в .pcu файле, выполнить обычный алгоритм поиска модуля, то есть GetUnitFileName
. Если результатом не будет тот же зависимый .pcu, что записан в заголовке читаемого .pcu файла - отменить его чтение.
Таким образом даже с другими настройками /SearchDir
- .pcu файлы будут оставаться валидными, пока их зависимости выбраны из тех же папок, что выбрал бы компилятор, если бы .pcu не существовал.
В то же время с теми же настройками, но при отсутствии ранее использованного .pcu файла-зависимости - компилятор не упадёт, а будет или выдавать соответственно “модуль не найден”, или использовать этот же модуль, но из другой папки.
Ну и последнее - на стандартные модули, включая во время _GenerateAllSetups.bat
, ни в коем случае не должны накладываться эти проверки. Они живут своей жизнью.
Что есть реализовать такой или подобный синтаксис для 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 КБ)
Когда через 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
Ну вот тут i не подсвечивается
foreach var x in |1, 2, 3| index i do