Ошибки на сайте, в справке и прочее

В соответствии с просьбой @Admin не писать подобные сообщения об ошибках в Issue пишу здесь.

До сих пор не исправлена ошибка:

Автоклассы можно наследовать только от интерфейсов

. Интерфейсы не наследуются классами или записями, а реализуются. Термин наследовать можно применять в отношениях таких как класс - класс, интерфейс - интерфейс. В C# 8.0, насколько знаю, планируется реализация методов в интерфейсах по умолчанию. В этом случае, думаю, можно говорить о наследовании реализаций методов. (Возможно, есть еще примеры подобного в других языках, но я иных таких примеров не знаю.) Но PascalABC.Net это не поддерживает и не собирается, по видимому. Поэтому в контексте данного компилятора это является ошибкой.

В теории ООП есть понятия “наследование интерфейса” и “наследование реализации”. Интерфейсы в узком смысле созданы как легковесные классы, они как раз и предназначены для наследования интерфейса в чистом виде. В ряде описаний языков программирования для интерфейсов сознательно заужается терминология.

В описании языка такое писать нельзя. В Что нового - вполне.

Раскройте - Ошибки на сайте, в справке и проч.

Хорошо. Я посмотрю.

Почитайте Гради Буча и Страуструпа “Дизайн и эволюция C++”

Спасибо за совет.

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

Я имел в виду - исправьте заголовок темы

Думаю, что есть смысл закрепить эту тему.

  1. @Admin, у Вас в справке где-нибудь сказано про & для экранирования ключевых слов?

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

    begin { {} } end.

. Во всяком случае в глазах начинающих это выглядело бы как недоработка, нежели как ограничение, так как об этом не сказано в справке. Единственное по этой теме:

Комментарии разных типов могут быть вложенными:

, но про вложенность комментариев одного вида ничего не сказано.

1 лайк

33 сообщения перенесены в тему Болталка PascalABC.NET

Ошибка не исправлена.

1 лайк

Вы неправы в том, что концентрируетесь на внутреннем представлении кортежей. И Вас это занимает более чем то, для чего кортежи предназначены. А предназначены они для того чтобы быть контейнером для полей разных типов. Как записи или классы. Независимо от внутреннего представления.

Кроме того, я уже говорил, что прошу не замусоривать issue вопросами о справке по языку.

2 лайка

Моё личное дело на чем концентрироваться. Если Вам это не нравиться - Ваше дело. Я Вас за это не осуждаю.

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

Акцентирование на технической части реализации не менее важно, чем общее описание структур данных.

Capture

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

Нет, тут подсказка для MatrGen не правильная. Вот что тут такое … “заполненный элементами x”? Это элементы, которые получаются на выходе функции gen(i, j) И в справке то же самое.

А… Действительно)

В чем отличие между Pos и PosEx?

begin
  var s := 'Hello Hello';
  var s0 := 'Hello';
  Pos(s0, s).Println;//1
  Pos(s0, s, 2).Println;//7
  PosEx(s0, s).Println;//1
  PosEx(s0, s, 2).Println;//7
end.

Подсказка для Pos: Pos

Подсказка для PosEx: PosEx

Но они работают одинаково. Кроме того подсказка не показывает, что параметр from - параметр по умолчанию у обеих.

Надо не на результат а на реализацию смотреть:


function Pos(subs, s: string; from: integer): integer;
begin
  if (subs = nil) or (subs.Length = 0) or (from > s.Length) then
    Result := 0
  else Result := s.IndexOf(subs, from - 1, System.StringComparison.Ordinal) + 1;
end;

function PosEx(subs, s: string; from: integer) := Pos(subs,s,from);

То есть - ни в чём.

Отличия нет, это сделано для совместимости с языками-предшественниками. Как говорили в первые годы советской власти, “тяжкое наследие царизма”.

Ошибка описания процедуры, в среде и в справке. WriteElements<T>(fname: string; ss: sequence of T);

И, кстати, почему нет встроенного одноименного метода расширения, такого:

WriteElements<T>(self: file of T; ss: sequence of T); extensionmethod;,

чтобы работал с уже открытым файлом и не перезаписывал все, а вставлял последовательность, начиная с позиции файлового указателя? Это с чем-то связано или просто забыли выписать?