IDE зависала, после закрытия следующего окна при проверке обновлений:
, если следующее за первым модальное окно не появлялось мгновенно и я успевал нажать в окно самой IDE. Версия: 3.5.2238.const
n = int64(cardinal.MaxValue)+5;
begin
var s: string[n];
end.
Может стоит выдавать ошибку в данном случае?
Здравствуйте! Почему, когда я установил последнюю версию 3.5, то когда я пытаюсь нажать кокую-нибудь клавишу, то выходит такая ошибка
Скорее всего у вас старая версия .Net . Установите эту версию паскаля:
http://pascalabc.net/downloads/PascalABCNETWithDotNetSetup.exe
В ней упакован сразу и установщик .Net 4.7.1. (а System.Array.Empty
добавили в .Net 4.6)
А какая у вас версия Windows?
7
А .Net автоматически устанавливается или же всё таки должен открываться мастер установки?
Установщик паскаля вы всё так же должны открывать. А установщик .Net откроется сам. Возможно - в тихом режиме (не открывая окно установщика .Net), если установщик паскаля такое умеет (сам уже давно не обновлял .Net, иба её версия, в отличии от самого паскаля - обновляется крайне редко, так что хз умеет ли).
Что такое packed-массивы в PascalABC.NET?
begin
var a: packed array of integer;
end.
В справке об этом ничего не сказано, но этот код компилируется…
Хотя, судя по IL, они вообще ничем не отличаются от обычных массивов. Это какая-то недоделанная фича?
Это для совместимости. packed ничего не делает
Полагаю, хорошо было бы иметь возможность писать:
function Numerate<T>(self: sequence of T): sequence of class(index: integer; item: T);
begin
// implementation here
end;
вместо:
type
Some<T> = sealed auto class
index: integer;
item: T;
end;
function Numerate<T>(self: sequence of T): sequence of Some<T>;
begin
// implementation here
end;
- Когда могло бы пригодится: при желании писать методы расширения, подобные
Numerate
, которые возвращают кортеж. - Почему это могло бы пригодится: кортеж имеет стандартные имена элементов, не отражающих суть их использования в конкретной задаче.
- Что взамен получит пользователь: краткую запись кода и возможность не писать маленькие классы.
- Возможные проблемы: решение того, как будут такие типы отображаться в Intellisence. Вариант:
class
, либоclass(index, item)
(на примере вышеописанного класса). Лично я придерживаюсь последнего.
Варианты реализации:
- на автоклассах (примеры выше)
- на кортежах (именованные кортежи)
Сомнительная сделка… Время разработчиков (часы, сутки) на разработку <—> время написания кода у рядового пользователя в редких случаях (секунды).
Полагаю, что рядовому пользователю не нужны и методы расширения и многие другие вещи.
Я лишь указал на появившуюся у меня идею улучшения (с моей точки зрения) языка. Дальше - дело разработчиков. При любом их решении потерь особых не будет для языка поскольку это не фича первого плана.
Возможно, обдумывая то или иное предложение по расширению языка будет полезно вспоминать, что на настоящий момент он и так уже достаточно велик. Причем настолько, что попытка более-менее полно описать его у меня, к примеру, заняла больше года. И все чаще посещает мысль, что Оккам был прав, предлагая не множить сущностей сверх необходимого.
- Это не новая фича, это дополнение старой.
- Я сам ни раз сталкивался с такой необходимостью. К примеру, когда надо сделать
Stack
содержащий объекты с типом анонимного класса:
begin
var st := new Stack<class(x: integer; s: string)>;
foreach var v in ... do
// какая то работа со стеком
end.
Без возможности описать тип анонимного класса без создания экземпляра - получается самый красивый способ такой:
function NewSt<T>(a: T) := new Stack<T>;
begin
var st := NewSt(new class(x := 0,s := ''));
foreach var v in ... do
// какая то работа со стеком
end.
Но это довольно некрасивый костыль. И весь смысл анонимных классов - в том чтоб не добавлять лишние имена. А тут всё равно пришлось добавить имя функции.
И еще. Жил в V в. до нашей, естественно, эры в Афинах некий Горгий Леонтинский. Был известен он своими речами и однажды написал трактат, озаглавив его “О несуществующем или о Природе”. В нем он доказывал, что:
- ничто в природе не существует;
- а если существует, то непознаваемо;
- а если и познаваемо, то непередаваемо
Вот я и думаю: может сей достойнейший муж, имея в виду второе и третье высказывание, уже тогда сумел предвидеть создание бесконечно расширяемых языков программирования?
В уме компилировал. Исправил.
Должен заметить, что при возникновении проблем в автовыводе типов в более сложной ситуации (например, при использовании Linq) это не будет работать.
Автовывод сломан только у анализатора кода, в достаточном маштабе. У компилятора осталось только несколько мелких и редких багов автовывода.