А вроде на вики сказано, что это язык программирования. Какую ссылку Вы имеете в виду?
Может быть, стоит где-то явно сказать, что это язык и дополнительно может быть установлена 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)
{
}
}
}
Так ее в .NET и не существует. Кроме безобразия с unsafe в C#. но и там все не так уж “красиво”. Не будем делать из PascalABC.NET очередной С++, а то и он подпадет под сказанное А.Хейльсбергом:
Проблема применения С++ заключается в том, что его мощь используется в течение 1% времени, а 99% времени уходит на то, чтобы понять, какую конструкцию языка применить для решения той или иной задачи.
Нет нет, арифметика указателей - хорошая штука. И - сделать было бы можно. Но
- Ни в одном из Паскалей этого нет
- Этого нет в C#
- Это противоречит безопасности
- Это противоречит высокоуровневости задач, на которые направлен PascalABC.NET
Я бы только поменял порядок по приоритетам:
- Это противоречит высокоуровневости задач, на которые направлен PascalABC.NET
- Это противоречит безопасности
- Этого нет в C# (а последующий переход на С# в приоритете для изучающего язык)
- Ни в одном из Паскалей этого нет (много чего нет в тех паскалях)
Как оно противоречит?
Не могу не согласиться. Но используется на свой страх и риск.
Как это нет? Всё есть.
Согласен с Вами. Если убрать всё чего нет в “других Паскалях”, то и PascalABC.NET станет " другим".
Если использовать указатели - будут появляться ошибки, которые сложно искать, и поэтому они не безопасны.
Я же написал, что согласен с их небезопасностью. Но, как говорят, кто не рискует - тот не пьёт вина.
Работа с указателями без арифметики указателей совершенно бессмысленна. Поэтому не имею ничего против арифметики указателей.
фрипаскаль поддерживает арифметику указателей https://www.freepascal.org/docs-html/ref/refse15.html
FPC и вариантные записи поддерживает. Вы делаете очередной FPC? А зачем - он ведь и так есть.
Наконец то.
Осмелюсь заметить, что так сделано далеко не только в C++, а во многих промышленных языках. Даже в C#, который ориентирован на .NET.
Не уверен, что это эффективно.
А вот так - уверен:
public static unsafe void Main(){
byte* p; // Чем-то инициализируются
p += 2;
}
Здесь изо всех языков берут лучшее. Вариантные записи особой пользы не приносят. Но их ведь можно построить средствами .NET. А указатели позволяют оптимизировать приложение. Их никогда не уберут.
А, да, в C# есть. Ух ты, и во фрипаскале есть!