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


#1

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

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

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

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


#2

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

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

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


#3

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


#4

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


#5

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


#6

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


#7

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


#8

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

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

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

    begin { {} } end.

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

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

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


#10

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


#44

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


#45

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

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


#46

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

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

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


#47

Capture


#48

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


#49

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


#50

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


#51

В чем отличие между 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 - параметр по умолчанию у обеих.


#52

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


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);

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


#53

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


#54

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

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

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

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