Версия PascalABC.NET 3.4


#101

Да. Он сейчас так и воспринимает. Но есть неоднозначность. Например, с этим

type A = class
  procedure p;
  begin
  end;
  property x: integer write p;
end;

#102

Ну, в принципе я не вижу ничего плохого. То есть смотрите, в этой программе в заголовок p можно в любой момент добавить value, и тогда его можно использовать. А если мы value не задали - мы его, как будто, не запрашиваем, то есть оно нам не нужно для выполнения этой процедуры. Иначе, для выполнения 1 процедуры которой не нужно value для выполнения - придётся ставить лишние begin end.


#103

А, нет, в первом случае она не работает.

Ищется процедура p только в классе. Если её нет - ошибка.

То есть здесь при прочих равных старый синтаксис доминирует над новым


#105

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


#106

Думаю, всё-таки нет. Пользователи, привыкшие к старому синтаксису, будут неприятно удивлены если в результате ошибки в имени подцепится какая-то процедура из внешнего контекста. То есть, если это имя, то оно должно быть в классе


#107

Ага, а значит если добавить () - то процедуру вне класса всё же увидит?


#108

Да, несомненно - это вызов, тут всё однозначно


#109

Какова ситуация с тайпклассами? Ключевых слов всё ещё нет в Ctrl+Space…

И как реализовать инстанс для шаблонного типа? Вот мне к примеру надо было передавать последовательность, и если у неё есть ограниченное число элементов, как у массива или списка - выполнять особенную программу. Это даёт внутреннюю ошибку:

type 
  TCCountalbe[T] = typeclass
    
  end;
  
  TCCountalbe[List<T>] = instance
    property Count:integer read inherited Count;
  end;

begin end.

#110

Не спешите. Их ещё официально нет.


#111

И хорошо что не может. Он не для того

А точнее, для чего?


#112

Я бы Вас попросил вначале почитать про классы типов в Haskell. Чтобы понять, что к чему. Потому что в ответах на форуме такое не расскажешь.


#113

А при чём тут авто классы к классам типов?


#114

Между ними нет никакой связи. Классы типов являются чем-то вроде расширенных интерфейсов, но всё же не вполне. У нас классы типов будут лучше интерфейсов (если будут), поскольку будут включать в себя перегрузку операций (этого в обычных интерфейсах нет) и самое главное - определить принадлежность ЛЮБОГО конкретного типа к классу типов можно будет позже, определив instance.

Ну вот в двух словах - самые важные отличия от интерфейсов.

К сожалению, поскольку реализация классов типов затянулась, мы будем выкусывать их из мастер-ветки.


#115

Нет, подождите. Я понимаю что делают классы типов, я про них читал про них ещё когда вы сделали issue с ними. Но вопрос сейчас про авто классы был.


#116

А-а-а… Неправильно прочитал :slight_smile: Да, автоклассы.

Ну, автоклассы в их сегодняшнем воплощении для этого не используются. Мы думаем заменить автоклассы record-классами в стиле нового C#. Или оставить их одновременно. Это всё надо улучшать, но Issue написан грязно, потому и закрыли. А так - когда оформится мысль - сделаем и без всякого Issue.


#117

А когда будет исправлена ситуация со статическими классами?


Ключевое слово для статичных классов
#118

Как все запущено… уже не только просто хотелки, а со сроками…

"... и к исходу сентября
мне роди богатыря"

#119

еще не пришли к консенсусу. какое ключевое слово использовать.


Ключевое слово для статичных классов
Версия PascalABC.NET 3.3
Версия PascalABC.NET 3.3
#120

А конвульсиум сзывали?


#121
begin
  var f := System.IO.File.OpenRead('temp.txt');
  try
    f.ReadByte;
  finally
    f.Close;
  end;
end.

Разворачивается в:

begin
  var f := System.IO.File.OpenRead('temp.txt');
  var flag: boolean;
  try
    f.ReadByte;
    
    flag := true;
    raise new Exception;
  except
    on e: Exception do
    begin
      f.Close;
      if not flag then
        raise e;  
    end;
  end;
end.

Зачем? В СIL ведь есть finally, и вы уже его использовали в другом участке компилятора:

begin
  foreach var o in Seq(0) do
end.

Разворачивается в:

begin
  var enm := Seq(0).GetEnumerator;
  try
    while enm.MoveNext do
      System.Convert.ToInt32(enm.Current);
  finally
    enm := nil;
  end;
end.

P.S. а не надо ли начать новую тему для 3.4? уже ведь 3.4.2 …


Версия PascalABC.NET 3.3