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


#1428

IDE зависала, после закрытия следующего окна при проверке обновлений:

, если следующее за первым модальное окно не появлялось мгновенно и я успевал нажать в окно самой IDE. Версия: 3.5.2238.


#1429
const
  n = int64(cardinal.MaxValue)+5;

begin
  var s: string[n];
end.

Может стоит выдавать ошибку в данном случае?


#1430

Здравствуйте! Почему, когда я установил последнюю версию 3.5, то когда я пытаюсь нажать кокую-нибудь клавишу, то выходит такая ошибка


#1431

Скорее всего у вас старая версия .Net . Установите эту версию паскаля:
http://pascalabc.net/downloads/PascalABCNETWithDotNetSetup.exe
В ней упакован сразу и установщик .Net 4.7.1. (а System.Array.Empty добавили в .Net 4.6)


#1432

А какая у вас версия Windows?


#1433

7


#1434

Тогда следуйте совету @Sun_Serega


#1435

А .Net автоматически устанавливается или же всё таки должен открываться мастер установки?


#1436

Установщик паскаля вы всё так же должны открывать. А установщик .Net откроется сам. Возможно - в тихом режиме (не открывая окно установщика .Net), если установщик паскаля такое умеет (сам уже давно не обновлял .Net, иба её версия, в отличии от самого паскаля - обновляется крайне редко, так что хз умеет ли).


#1438

Что такое packed-массивы в PascalABC.NET?

begin
  var a: packed array of integer;
end.

В справке об этом ничего не сказано, но этот код компилируется…

Хотя, судя по IL, они вообще ничем не отличаются от обычных массивов. Это какая-то недоделанная фича?


#1439

Это для совместимости. packed ничего не делает


#1440

Полагаю, хорошо было бы иметь возможность писать:

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;
  1. Когда могло бы пригодится: при желании писать методы расширения, подобные Numerate, которые возвращают кортеж.
  2. Почему это могло бы пригодится: кортеж имеет стандартные имена элементов, не отражающих суть их использования в конкретной задаче.
  3. Что взамен получит пользователь: краткую запись кода и возможность не писать маленькие классы.
  4. Возможные проблемы: решение того, как будут такие типы отображаться в Intellisence. Вариант: class, либо class(index, item) (на примере вышеописанного класса). Лично я придерживаюсь последнего.

Варианты реализации:

  • на автоклассах (примеры выше)
  • на кортежах (именованные кортежи)

#1441

Сомнительная сделка… Время разработчиков (часы, сутки) на разработку <—> время написания кода у рядового пользователя в редких случаях (секунды).


#1442

Полагаю, что рядовому пользователю не нужны и методы расширения и многие другие вещи.

Я лишь указал на появившуюся у меня идею улучшения (с моей точки зрения) языка. Дальше - дело разработчиков. При любом их решении потерь особых не будет для языка поскольку это не фича первого плана.


#1444

Возможно, обдумывая то или иное предложение по расширению языка будет полезно вспоминать, что на настоящий момент он и так уже достаточно велик. Причем настолько, что попытка более-менее полно описать его у меня, к примеру, заняла больше года. И все чаще посещает мысль, что Оккам был прав, предлагая не множить сущностей сверх необходимого.


#1445
  1. Это не новая фича, это дополнение старой.
  2. Я сам ни раз сталкивался с такой необходимостью. К примеру, когда надо сделать 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.

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


#1447

И еще. Жил в V в. до нашей, естественно, эры в Афинах некий Горгий Леонтинский. Был известен он своими речами и однажды написал трактат, озаглавив его “О несуществующем или о Природе”. В нем он доказывал, что:

  • ничто в природе не существует;
  • а если существует, то непознаваемо;
  • а если и познаваемо, то непередаваемо

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


#1448

В уме компилировал. Исправил.


#1449

Должен заметить, что при возникновении проблем в автовыводе типов в более сложной ситуации (например, при использовании Linq) это не будет работать.


#1450

Автовывод сломан только у анализатора кода, в достаточном маштабе. У компилятора осталось только несколько мелких и редких багов автовывода.