Ошибки PascalABC.NET

Я хочу, чтобы вопросы, подобные данному, не возникали. Ведь был же снят вопрос о том, имеет место рекурсия или присваивание в теле описываемой функции за счет возможности в подобных случаях использовать переменную Result в правой части оператора присваивания и тем самым однозначно указать, что тут не рекурсия. Либо, напротив, использовать имя функции, чтобы вызвать рекурсию.

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

По поводу Вашего вопроса

var a := i.ToString

Я думаю, что тут сложно сказать что-то о типе a, пока неизвестно, что такое i. Если i - простая переменная, за которой спрятано некоторое значение, то я ожидаю, что a будет строкой, которая изобразит это значение в символьном виде. А вот если i - некий объект, представляющий собой структуру из нескольких более простых компонентов (например, последовательность или даже просто кортеж из пары полей), то тут все зависит от задумок разработчика. Но уж наверно все же это не будет символьной строкой, содержащий весь набор значений из упомянутой структуры, как это было бы при использовании JoinIntoString. Возможно, стоит просто выдать сообщение об ошибке на стадии компиляции и запретить использовать .ToString для объектов сложной структуры. Это лучше, чем получать выдачи типа System.Linq.Enumerable+d__b8

Текст программы - в студию! С указанием того, что Вы вводите в качестве данных.

Пожалуйста:
    var n:integer;
    Begin
      read(n);
      write(n);
    End.

Ввожу любое число, например, 5.

i - это целое. Я к тому - Вы не ожидаете, что a будет иметь тип указателя на функцию? Ну или - давайте лучше так:

function q: integer;
begin
  Result := 1;
end;

begin
  var a := q;
  Println(a.GetType);
  var b: ()->integer := q;
  Println(b.GetType);
end.

У нас всё работает. Нужна более подробная информация. Лучше сохранить перед этим программу.

И - опубликовать несколько первых строчек сообщения об ошибке полностью

Файл загрузить не могу (новый пользователь). Вот ссылка на файлообменник: TestProgram.pas Скриншот ошибки:

Сведения:

Подробная информация об использовании оперативной 
(JIT) отладки вместо данного диалогового 
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в VisualPascalABC.RunManager.WritelnStringToProcess(String id, String data)
   в VisualPascalABC.WorkbenchRunService.SendInputTextToProcess()
   в System.Windows.Forms.Control.OnClick(EventArgs e)
   в System.Windows.Forms.Button.OnClick(EventArgs e)
   в System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   в System.Windows.Forms.Control.WndProc(Message& m)
   в System.Windows.Forms.ButtonBase.WndProc(Message& m)
   в System.Windows.Forms.Button.WndProc(Message& m)
   в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Загруженные сборки **************
mscorlib
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
PascalABCNET
    Версия сборки: 3.2.0.1399
    Версия Win32: 3.2.0.1399
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCNET.exe
----------------------------------------
System
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------

По-моему, обнаружилась ошибка.

// PascalABC.NET 3.2, сборка 1399 от 08.03.2017
type
  pair=record
  x,y:integer
  end;

begin
  var n:=10;
  var a:=new pair[n];
  for var i:=1 to n-1 do begin a[i].x:=i; a[i].y:=10*i end;
  Writeln(a);
  Writeln(a.Select(e->e.x+e.y).Sum)
end.

Эта программа нормально работает.

А вот так при компиляции возникает ошибка.

type
  pair=record
  x,y:integer
  end;

begin
  var n:=10;
  var a:=new pair[n];
  for var i:=1 to n-1 do
    with a[i] do begin x:=i; y:=10*i end;
  Writeln(a);
  Writeln(a.Select(e->e.x+e.y).Sum)
end.

Казалось бы, надо грешить на внешне вполне корректный оператор with. Но, если удалить оператор Writeln(a.Select(e->e.x+e.y).Sum), программа компилируется и работает нормально.

Да, ошибка. Лямбда пытается классифицировать все переменные для захвата. В with она не может справиться.

Мы наверное запретим использовать лямбды вместе с with в одной процедуре. With - пережиток прошлого

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

Со скобками - другая ситуация, она более спорная. А тут - 2 мира - очень старый и новый - и куча времени потратить чтобы их подружить. А можно не тратить.

Возвращаюсь к своему примеру:

function q: integer;
begin
  Result := 1;
end;

begin
  var a: integer := q;
  Println(a.GetType);
  var b: ()->integer := q;
  Println(b.GetType);
end.

Я хочу подчеркнуть, что у нас - сложные правила. Если хотим, чтобы q считалась вызовом, то описываем a как integer. Но если хотим переменную b считать указателем на функцию, то указываем тип указателя на функцию без параметров, возвращающую integer, и тогда q приводится к типу указателя.

И? Главное, чтобы имелся способ (“рецепт”) однозначно связать желание программиста с возможностями компилятора. А если при этом максимально сохраняется совместимость со школьным Паскалем - это вообще превосходно. Либо, как я уже предлагал, сделать опцию “ISO” (флажком в настройках) , с выбором которой Паскаль будет работать в урезанном варианте на переходный период.

Не так давно мне один школьник написал на тему “for var i:=…”, что у них учитель ЗАПРЕТИЛ пользоваться PascalABC.NET, потому что он содержит ошибки, выдавая какие-то “нелепые сообщения” в программе, взятой из действующего школьного учебника. Это вот как раз о том, что я когда-то писал: сообщения о подобных отходах от “классики” дают козыри противникам внедрения PascalABC.NET. Опция “ISO” зарубила бы эти возражения на корню.

И еще, возможно стоит подумать о ребрендинге. Pascal ABC и PascalABC.NET вносят путаницу. потому что большинство учащихся называют версию PascalABC - так проще выговаривать и удобнее писать. Зато нельзя понять, что именно человеку надо. Более того, многие школьники даже НЕ ЗНАЮТ, что между этими диалектами языка есть разница, потому что и учителя говорят: Турбопаскаль, Фрипаскаль, Дельфи, ПаскальАБЦ.

При попытке запустить task1.pas, среда подсвечивает 46 строку файла punit.pas.

Ошибка времени выполнения: последовательность не содержит элементов.

На самом деле содержит, ошибка странная. Прикладываю файлы. Можно встретиться лично на мехмате, покажу что происходит. Сборка 1399.

tests.zip (1,6 КБ)

2 сообщения перенесены в новую тему: Отношения с деталью

Мы попытались исправить возможную ошибку. Хотя у нас ошибка не возникает. Скачайте новую версию и проверьте. Отпишитесь обязательно.

Не содержит. Это дебаггер указывает не на ту строчку.

У Вас ошибка в строке

(var x, var y) := 
      arr1.Zip(arr2, (x, y) -> (x, y))
          .Where(pair -> pair[0] <> pair[1])
          .First();

Вы для последовательности, не содержащей элементов, возвращаете First.

Прекрасно. Запрет - это прекрасно. Это - хорошее средство выявить больных на голову учителей. Их не исправит режим ISO. Пусть учат программировать на синеньком экранчике.

У нас кстати есть еще предупреждения о неиспользуемых переменных. За них тоже надо запрещать я считаю. И - двойка в четверти чтобы неповадно было.

А что такое Pascal ABC? Это какой-то пакет?

Я вот тоже в обыденной речи произношу ПаскальАБЦ, имея в виду PascalABC.NET. Так что, не вижу в этом ничего криминального.

К сожалению, не помогло. Ошибка та же.

Подробная информация об использовании оперативной 
(JIT) отладки вместо данного диалогового 
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в VisualPascalABC.RunManager.WritelnStringToProcess(String id, String data)
   в VisualPascalABC.WorkbenchRunService.SendInputTextToProcess()
   в VisualPascalABC.OutputWindowForm.InputTextBox_KeyDown(Object sender, KeyEventArgs e)
   в System.Windows.Forms.Control.OnKeyDown(KeyEventArgs e)
   в System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
   в System.Windows.Forms.Control.WmKeyChar(Message& m)
   в System.Windows.Forms.Control.WndProc(Message& m)
   в System.Windows.Forms.TextBox.WndProc(Message& m)
   в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Загруженные сборки **************
mscorlib
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
PascalABCNET
    Версия сборки: 3.2.0.1400
    Версия Win32: 3.2.0.1400
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCNET.exe
----------------------------------------
System
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
PluginsSupport
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PluginsSupport.DLL
----------------------------------------
CompilerTools
    Версия сборки: 3.2.0.1400
    Версия Win32: 3.2.0.1400
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/CompilerTools.DLL
----------------------------------------
WeifenLuo.WinFormsUI.Docking
    Версия сборки: 2.2.5489.36547
    Версия Win32: 2.2.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/WeifenLuo.WinFormsUI.Docking.DLL
----------------------------------------
Compiler
    Версия сборки: 3.2.0.1400
    Версия Win32: 3.2.0.1400
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/Compiler.DLL
----------------------------------------
Localization
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/Localization.DLL
----------------------------------------
System.Configuration
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.36213 built by: FX452RTMLDR
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
ICSharpCode.TextEditor
    Версия сборки: 0.0.0.0
    Версия Win32: 0.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.TextEditor.DLL
----------------------------------------
CodeCompletion
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/CodeCompletion.DLL
----------------------------------------
ParserTools
    Версия сборки: 3.2.0.1400
    Версия Win32: 3.2.0.1400
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ParserTools.DLL
----------------------------------------
Accessibility
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
Errors
    Версия сборки: 3.2.0.1400
    Версия Win32: 3.2.0.1400
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/Errors.DLL
----------------------------------------
SyntaxTree
    Версия сборки: 3.2.0.1400
    Версия Win32: 3.2.0.1400
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/SyntaxTree.DLL
----------------------------------------
ICSharpCode.SharpDevelop
    Версия сборки: 4.2.1.0
    Версия Win32: 4.2.1.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.SharpDevelop.DLL
----------------------------------------
ICSharpCode.Core
    Версия сборки: 4.2.1.0
    Версия Win32: 4.2.1.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.Core.DLL
----------------------------------------
ICSharpCode.SharpDevelop.Dom
    Версия сборки: 4.2.1.8805
    Версия Win32: 4.2.1.8805
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.SharpDevelop.Dom.DLL
----------------------------------------
ICSharpCode.NRefactory
    Версия сборки: 4.2.1.8805
    Версия Win32: 4.2.1.8805
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.NRefactory.DLL
----------------------------------------
ICSharpCode.AvalonEdit
    Версия сборки: 4.2.1.8805
    Версия Win32: 4.2.1.8805
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.AvalonEdit.DLL
----------------------------------------
ICSharpCode.Core.Presentation
    Версия сборки: 4.2.1.0
    Версия Win32: 4.2.1.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.Core.Presentation.DLL
----------------------------------------
ICSharpCode.SharpDevelop.Widgets
    Версия сборки: 4.2.1.8805
    Версия Win32: 4.2.1.8805
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.SharpDevelop.Widgets.DLL
----------------------------------------
ICSharpCode.Core.WinForms
    Версия сборки: 4.2.1.0
    Версия Win32: 4.2.1.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/ICSharpCode.Core.WinForms.DLL
----------------------------------------
System.Design
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Design/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Design.dll
----------------------------------------
Debugger.Core
    Версия сборки: 3.0.0.2649
    Версия Win32: 3.0.0.2649
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/Debugger.Core.DLL
----------------------------------------
System.Data
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_64/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
mscorlib.resources
    Версия сборки: 4.0.0.0
    Версия Win32: 4.0.30319.33440 built by: FX45W81RTMREL
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
TreeConverter
    Версия сборки: 3.2.0.1400
    Версия Win32: 3.2.0.1400
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/TreeConverter.DLL
----------------------------------------
NETGenerator
    Версия сборки: 3.2.0.1400
    Версия Win32: 3.2.0.1400
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/NETGenerator.DLL
----------------------------------------
SyntaxTreeConverters
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/SyntaxTreeConverters.DLL
----------------------------------------
SemanticTree
    Версия сборки: 3.2.0.1400
    Версия Win32: 3.2.0.1400
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/SemanticTree.DLL
----------------------------------------
System.Numerics
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
----------------------------------------
PascalABCParser
    Версия сборки: 0.0.0.0
    Версия Win32: 0.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PascalABCParser.DLL
----------------------------------------
OptimizerConversion
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/OptimizerConversion.DLL
----------------------------------------
InternalErrorReport
    Версия сборки: 1.0.6281.41849
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/InternalErrorReport.DLL
----------------------------------------
PT4Provider
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PT4Provider.DLL
----------------------------------------
PT4Tools
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/PT4Tools.DLL
----------------------------------------
SyntaxVisitors
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/SyntaxVisitors.DLL
----------------------------------------
YieldConversionSyntax
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/YieldConversionSyntax.DLL
----------------------------------------
YieldHelpers
    Версия сборки: 1.0.0.0
    Версия Win32: 1.0.0.0
    CodeBase: file:///C:/Program%20Files%20(x86)/PascalABC.NET/YieldHelpers.DLL
----------------------------------------
System.Security
    Версия сборки: 4.0.0.0
    Версия Win32: 4.6.1590.0 built by: NETFXREL2
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Security/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Security.dll
----------------------------------------

************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.

Например:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

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

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

2 сообщения перенесены в новую тему: Несколько диалектов паскаля в PascalABC.NET

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

type
  Point=record
    x,y:real
    end;
  Line=record
    a,b:Point
    end;
  PolyLine=array[1..5] of Line;

begin
  var myPolyLine:=new PolyLine[4];
  (myPolyLine[0][1].a.x,myPolyLine[0][1].a.y):=(1,2);
  (myPolyLine[0][1].b.x,myPolyLine[0][1].b.y):=(-3.5,9);
  Writeln(myPolylIne[0][1])
end.

и “анахронизм”

type
  Point=record
    x,y:real
    end;
  Line=record
    a,b:Point
    end;
  PolyLine=array[1..5] of Line;

begin
  var myPolyLine:=new PolyLine[4];
  With myPolyLine[0][1] do begin
    (a.x,a.y):=(1,2);
    (b.x,b.y):=(-3.5,9)
    end;
  Writeln(myPolylIne[0][1])
end.

Другое дело, что изначально в Паскале было принято неудачное решение с квалификаторами внутри With:

type
  Point=record
  x,y:integer
  end;

begin
  var x:=0;
  var P:Point;
  With P do begin
    y:=2;
    //...
    // ...
    x:=1 // к этому моменту можно и запутаться, о каком х речь идет.
    // кроме того, нельзя воспользоваться "обычным" х
    end;
  Println(x,P);
end.

В этом смысле Майкрософт с VB/VBA поступила умнее:

Public Type Point
    x As Integer
    y As Integer
End Type

Sub Test()
    Dim P As Point
    x = 0
    With P
        .x = x + 1 'Нет вопроса, где какой "х"
        .y = 2
       MsgBox Str(x) + Str(.x) + Str(.y)
    End With
End Sub

Всего лишь наличие префиксной точки радикально решает проблему.