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

uses ns;

begin end.
namespace ns;

end.

Этот код компилируется.
@ibond, так задумано?

То есть, чтоб неймспейс можно было не подключать через директиву, чтоб он сразу работал.

@Admin Как насчёт добавить такую функцию к стандартным генераторам последовательностей?

function SeqInf<T>(gen: ()->T): sequence of T;
begin
  while true do
    yield gen;
end;

function SeqInf<T>(gen: integer->T): sequence of T;
begin
  var i := 0;
  while true do
  begin
    yield gen(i);
    i += 1;
  end;
end;

Не редко на куберфоруме в решениях задач замечал что с такой функцией будет удобнее.

А только что ещё и тут был случай.

  • Я сделал костыль в виде SeqGen для 1 элемента и вызывал .Cycle.
  • А @RAlex предпочёл передавать какое то большое число в SeqGen. Но и это костыль.

Мне кажется это было бы хорошее дополнение к тем функциям-генераторам последовательностей что есть сейчас.

gen.Repeat не подходит? По индексу не хотелось бы - есть gen.Iterate(x->x+2);

Какие-то загадки… А можно для “особо одаренных” подробнее, gen.Repeat и gen.iterate - в Справке нет их.

Всм SeqGen? Ну я так и делал (только не Repeat а Cycle), но это всё же костыль. Надо вбивать лишний параметр, и в итоге не интуитивно.

А Iterate откуда взялось? Есть Numerate, но оно не принимает лямбду.

И - в чём проблема если проиндексированное будет в виде отдельной перегрузки? Почти у всех методов последовательностей есть перегрузки с- и без- индекса.

@Admin а как насчёт того чтоб разрешить несколько автосвойств на 1 строчке:

type
  t1=class
    auto property X,Y,Z: byte;
  end;

begin end.

Они ведь в остальном выглядят как поля, и это должно быть не сложно реализовать…

Дам ссылку на Issue.

1 лайк
type
  TClass = class
    auto property X: byte := 1;
  end;

begin
end.

Хотелось бы поднять тему про инициализацию автосвойств при объявлении. Почему от этого отказались? Ведь, такая инициализация позволит сильнее очистить код конструктора. К примеру, требуется свойствам назначить какие-то изначальные значения. Без инициализации автосвойств при объявлении пришлось бы писать:

type
  TClass = class
    auto property X: byte;
    auto property Y: byte;
    auto property Z: byte;
    
    constructor() := (X, Y, Z) := (1, 1, 1);
  end;

begin
end.

вместо:

type
  TClass = class
    auto property X: byte := 1;
    auto property Y: byte := 1;
    auto property Z: byte := 1;
  end;

begin
end.

Обращаясь к C#, следует заметить, что такой функционал уже реализован:

internal class MyClass
{
    public int X { get; set; } = 1; // <--

    private static void Main()
    {
    }
}

Еще одним примером может служить VisualBasic.Net:

Module Module1
    Public Class Type
        Public Property X As Integer = 1 // <--
    End Class

    Sub Main()
    End Sub
End Module

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

Ссылки: Автоматические реализуемые свойства в C#, Инициализация автоматически реализуемого свойства в VisualBasic.Net.

@Admin, Вы сказали в Issue:

Давайте-ка я пока закрою это Issue, потому что непонятно, будут ли у нас автосвойства

, теперь делать можно - автосвойства имеются. :wink:

2 лайка

В абс есть Робот, но мне нравиться больше кумировский. Т.к. 1) можно удобно самому создавать и менять обстановки, 2) можно создать офф-лайн практикум с автоматической проверкой. В абс такого не нашел, поэтому использую кумир. Но с “паскальными” учениками лучше бы было это делать на абс. Если язык для обучения, а обучение начинается с управления исполнителями, то стоит развивать удобство работы и исполнителями.

На сайте PascalABC.NET есть страничка Программы и алгоритмы для студентов. Там на вторую половину задач, начиная с файлов, нет кода. На самом интересном месте, как говорится. Там и рекурсия, и связные списки, и деревья, и контейнеры, и ООП. Хорошо бы алгоритмы на графах еще, эх мечты. Очень жаль, что нет кода. Особенно в стиле паскаля абц точка нет. Может быть, кому-то не сложно его написать?

Во-первых, можно вот отсюда взять перевод отличной книги Р. Седжвика “Фундаментальные алгоритмы на С++. Алгоритмы на графах”. Да, тексты программ там на С++, но если студент дошел до изучения данного курса, у него должно хватить знаний, чтобы там разобраться. Сами же тексты программ выложены на GitHub.

Во-вторых, можно скачать книгу С. Окулов. Программирование в алгоритмах. 2007 год. 341 стр. PDF. 3.3 Мб., в которой алгоритмы даются на Паскале.

Это Ваше “хорошо бы” умиляет, конечно, но ничего на свете не бывает просто так. Вы можете внести свою лепту в проект, переписав хотя бы часть алгоритмов на PascalABC.NЕТ. А иначе получаются предложения из разряда “я хочу, а вы мне сделайте”.

Здравствуйте. Хотелось бы сворачивания не только регионов, но и типов с методами (процедур/функций). Было бы очень полезным. А то постоянно вручную сворачивать всё это занимает по минуте (а то и больше) каждую загрузку / перезагрузку Intellisense.

2 лайка

Что-то пришла в голову, возможно, глупая, идея:

А что, за годы существования различных редакторов, IDE, и прочих Intellisens’ов никто не догадался эти регионы оформлять не просто названием, но и чем-то вроде такого (псевдокод, не в курсе, как это делать в Паскале, оформляется директивой компилятора, им игнорируется)?

#region REGION_NAME (default: [hide|show])

Суть концепта - при открытии исходника в IDE те регионы, что hide, автоматически сворачиваются. Вроде просто и сердито. Скобку с содержимым разрешить не писать, по умолчанию предполагая (default: show).

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

3 лайка

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

1 лайк

@Admin я просил ранее, но вы проигнорили… Разберитесь, пожалуйста, с закреплёнными темами.

Надо открепить Закрытую старую тему ошибок, в неё всё равно писать уже никто не может.

А так же закрепить новые темы, на которые заменили старую:

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

Не надо плодить много тем. Достаточно оставить две темы: ошибки компилятора и ошибки IDE. интеллисенс, отладчик это IDE. Ошибки в справке это недочеты, их надо в замечания и предложения.

Ну, хорошо, давайте так.

Ну и? Сделайте уже хоть что то…

А что сделать-то? Можете сформулировать еще раз. Только без вариантов и обсуждения.

Надо открепить Закрытую старую тему ошибок.

А так же закрепить новые темы, на которые заменили её: