В данной теме будут собираться ошибки Intellisence и компилятора, напрямую связанные с NETSquirrel (выявленные через неё).
О поддерживаемой версии PascalABC.NET
Официальная поддерживаемая данным проектом версия PascalABC.NET - это 3.5.1.2277. Это всего лишь означает, что примеры, пишущиеся для данного языка используют указанную версию компилятора. Тестировщики проекта NETSquirrel могут искать ошибки в любой версии, начиная с 3.5.1.2277 и выше, однако, если ошибка была выявлена в версии выше указанной, то тестировщик обязан проверить её наличие в 3.5.1.2277 и, если она есть, выложить способ обхода проблемы на Google Drive.
Пользователи будут уведомлены о том, когда выйдет новая версия PascalABC.NET с исправлениями и улучшениями, делающими пользование библиотекой более удобным.
К кому можно обращаться в случае нахождения ошибки или подозрения на неё?
По вопросам поддержки NETSquirrel в PascalABC.NET - поиске ошибок в IDE и компиляторе, затрагивающих программы, использующие данную библиотеку, Вы можете обращаться к:
Ошибка плавающая. Я не могу выявить закономерности, по которой происходит сбой Intellisence. Сначала он показывал одно при библиотеке (уже на PascalABC.NET) и без нее, потом другое. Возможно, прозвучит странно, но на момент я подумал, что сбой в Intellisence в одном месте влияет на сбой его в другой программе.
В любом случае - нет «чёткости», к сожалению. Конечно, хотелось бы, чтобы никаких (!) проблем при просмотре примеров (для библиотеки), в частности, не было. Но, это всего лишь пожелание, которое без действий с моей стороны будет воспринято, на мой взгляд, не очень позитивно. Имелась бы возможность узнать что именно творится в Intellisence, чтобы хотя бы знать актуальную ли версию подсказки он показывает - было бы (для меня) хорошо. Только, мне ничего неизвестно о том как в таких случаях поступают разработчики IDE, чтобы помочь отыскать ошибку.
Explicit interface implementation - can't define the same method in derived class
type
IA = interface
procedure P();
end;
A = class(IA)
public
procedure IA.P();
begin
end;
end;
B = class(A, IA)
public
procedure IA.P(); // another implementation of P [Program1.pas(15) : Повторное объявление]
begin
end;
end;
begin
end.
Та, поскольку баг напрямую был выявлен через NETSquirrel:
В Visual Basic.NET и C# - аналогичный код работает, но:
, ибо хоть интерфейсы - это вещь, связанная с NET (в данном языке), но у нас PascalABC.NET, а не C# или Visual Basic.NET.
Вообще, я поднимал этот вопрос, прежде всего, для того, чтобы выяснить должно ли так быть, или нет, а не менять язык. Решающим будет слово разработчиков. Моя задача лишь - донести до них свой вопрос.
Пример с интерфейсом ICloneable<T>:
Prototype.pas (1.4 KB)
Как минимум, надо сначала сесть и изучить, как такое реализовать в том же FPC, если это вообще возможно. Проще выслушать мнение разработчиков.
Наследовать так, как указано, но только от класса, либо только интерфейс - не проблема, все работает. Можно ли наследовать сразу и от класса, поддерживающего интерфейс, и от этого интерфейса, причем метод с теми же параметрами (точнее, без всяких) - тут я не знаю.
P.S. Кстати, вот так не ругается:
type
IA = interface
procedure P();
end;
A = class(IA)
public
procedure IA.P();
begin
end;
end;
B = class(A)
public
procedure P();
begin
end;
end;
begin
end.
Подозреваю, что если наследуется класс А, наследующий интерфейс, вместе с ним наследуется и интерфейс.
LMB click works incorrect in generic interface placed in unit case
uses Test;
uses System;
type
T = class(ICloneable<T>) // LMB click here opens System.ICloneable
public
function Clone(): T := nil;
function ICloneable.Clone(): object := nil;
end;
begin
end.
unit Test;
type
ICloneable<T> = interface(System.ICloneable)
function Clone(): T;
end;
end.
Обязательно использовать модуль, в случае библиотеки (на PascalABC.NET) - не воспроизводится.