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

А вроде на вики сказано, что это язык программирования. Какую ссылку Вы имеете в виду?

Может быть, стоит где-то явно сказать, что это язык и дополнительно может быть установлена IDE, обеспечивающая работу с ним, потому что ведь IDE можно и не ставить, а пользоваться компилятором из командной строки.

О, какая прекрасная картинка встраивается…

Не так давно про это говорили “вешалка”… Менять надо.

Можно ли сделать нормальную работу с указателями? То есть обращаться к ним как к числам и сделать рабочим такой код:

var a: Byte; // Переменная, адрес которой берём. Можно использовать первый элемент массива.
var p := @a; // Указатель на переменную(Byte^).
p += 1; // Смещаем адрес. Если массив, то указатель начинает ссылаться на второй элемент массива.
p := (Byte^)(Int32(p) + 2). // Задаём смещение на 2 элемента(указатель на 3 элемент массива). Преобразуем Int32 напрямую в Byte^.

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

Арифметику указателей как в C++ мы делать не будем.

p :=  PByte(pointer((integer(p) + 2)));

Да, так можно. На страх и риск. Ровно так сделано в Delphi

Обратите внимание, что у нас это транслируется в эффективный IL-код:

public unsafe static void $Main()
{
	byte b;
	fixed (byte* ptr = &b)
	{
		fixed (byte* ptr = ptr + 2)
		{
		}
	}
}
1 лайк

Так ее в .NET и не существует. Кроме безобразия с unsafe в C#. но и там все не так уж “красиво”. Не будем делать из PascalABC.NET очередной С++, а то и он подпадет под сказанное А.Хейльсбергом:

Проблема применения С++ заключается в том, что его мощь используется в течение 1% времени, а 99% времени уходит на то, чтобы понять, какую конструкцию языка применить для решения той или иной задачи.

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

  1. Ни в одном из Паскалей этого нет
  2. Этого нет в C#
  3. Это противоречит безопасности
  4. Это противоречит высокоуровневости задач, на которые направлен PascalABC.NET
1 лайк

Я бы только поменял порядок по приоритетам:

  1. Это противоречит высокоуровневости задач, на которые направлен PascalABC.NET
  2. Это противоречит безопасности
  3. Этого нет в C# (а последующий переход на С# в приоритете для изучающего язык)
  4. Ни в одном из Паскалей этого нет (много чего нет в тех паскалях)

Как оно противоречит?

Не могу не согласиться. Но используется на свой страх и риск.

Как это нет? Всё есть.

Согласен с Вами. Если убрать всё чего нет в “других Паскалях”, то и PascalABC.NET станет " другим".

Если использовать указатели - будут появляться ошибки, которые сложно искать, и поэтому они не безопасны.

Я же написал, что согласен с их небезопасностью. Но, как говорят, кто не рискует - тот не пьёт вина.

1 лайк

Работа с указателями без арифметики указателей совершенно бессмысленна. Поэтому не имею ничего против арифметики указателей.

3 лайка

фрипаскаль поддерживает арифметику указателей https://www.freepascal.org/docs-html/ref/refse15.html

3 лайка

FPC и вариантные записи поддерживает. Вы делаете очередной FPC? А зачем - он ведь и так есть.

Наконец то.

Осмелюсь заметить, что так сделано далеко не только в C++, а во многих промышленных языках. Даже в C#, который ориентирован на .NET.

Не уверен, что это эффективно.

А вот так - уверен:

public static unsafe void Main(){
  byte* p; // Чем-то инициализируются
  p += 2;
}

Здесь изо всех языков берут лучшее. Вариантные записи особой пользы не приносят. Но их ведь можно построить средствами .NET. А указатели позволяют оптимизировать приложение. Их никогда не уберут.

А, да, в C# есть. Ух ты, и во фрипаскале есть!

Замечу, что не в нём одном. И не просто ведь так. А чем Паскаль хуже?