Я считаю, что знаю с какой. Да и Вы тоже знаете. Практически - риторический вопрос.
Я вас понял. Желаю вам всего самого наилучшего и успехов вам с вашим паскалем.
Компилятор всего 1, поэтому пока нет смысла его проверять.
И платформа - тоже всего 1, это .Net . Одна из основных идей .Net - генерировать одинаковые бинарники под все ОС и битности процессора. А уже JIT компилятор, запускаемый прямо перед запуском самого кода - решит как оптимизировать код под конкретную платформу.
Ну, хоть это и не работает с $ifdef
, потому что он выполняется до создания бинарников - JIT проводит не только самые поверхностные оптимизации. Он так же хорош, к примеру, в обрубании не нужных веток if
. То есть в таком коде:
begin
if System.Environment.OSVersion.Platform = System.PlatformID.MacOSX then
begin
//ToDo код для MacOSX
end else
begin
//ToDo код для других ОС
end;
end.
System.Environment.OSVersion.Platform
вряд ли изменит своё значение после запуска .exe, а значит JIT может считать его константой. Хотя вообще я не проверял.
Выделяйте код так:
```
код
```
А то не читабельно.
По коду - вырежте cdecl
и всё будет работать.
Вы не правы. Без указателей невозможно работать с external
подпрограммами. Особенно если подпрограмма возвращает адрес.
Хотя оставлять такие подпрограммы “голыми” - тоже не правильно. У них всегда должна быть подпрограмма - оболочка, вызывающая external
подпрограмму и затем преобразующая тип во что то человеческое.
И, если принимается/возвращается не адрес, а дескриптор объекта - правильнее использовать или IntPtr
, или вообще свой тип записи-дескриптора, как то так:
cl_mem = record
public val: IntPtr;
public constructor(val: IntPtr) := self.val := val;
public static property Zero: cl_mem read default(cl_mem);
public static property Size: integer read Marshal.SizeOf&<IntPtr>;
end;
Какая нужда в .NET работать с программами, возвращающими адреса? Вызывать какие-то древние коды? Можно, конечно, искусственно что-то выдумать, потому что любой развитый язык до конца никогда не сможет противостоять тому, который #СамСебеЗлобныйБуратинка.
Я не писал, что с указателями в РАВС нельзя работать, “забудьте” - это были слова рекомендательного плана.
Посмотрите на MapBuffer
. Эта подпрограмма создаёт область памяти в RAM, через которую можно читать и редактировать память на GPU.
В external
подпрограммах такое повсюду. Хотя как я уже сказал, в правильном коде - голые external
подпрограммы не используются. Они всегда обёрнуты во что то более высокоуровневое.
К примеру, в случае MapBuffer
- стоит создать свой класс-обёртку для неуправляемой памяти. Вызывающую UnMap
в Finalize
и Dispose
. И предоставляющую основные методы чтения/записи значений и массивов в разных частях этой памяти.
Вот только высокоуровневый код - кто то должен писать. И вполне нормально когда это тот же человек, которые будет его использовать.
Странно рекомендовать человеку, уже работающему с external
подпрограммами - забыть один из основных типов для работы с ними. Такая рекомендация только показывает, что у вас мало опыта в области.
В области прямой работы с памятью GPU у меня не то, чтобы мало опыта - вообще его нет. Также, я не писал на Паскале драйверов устройств и не программировал на нем микроконтроллеры. Не считаю Паскаль наиболее подходящим для таких работ языком.
OpenGL
это только пример. Он нужен, потому что для графики что то да надо. И бывает, когда он остаётся одним из единственных вариантов.
Но external
подпрограммы не только для графики используются. Можно взять более общий случай:
OpenGL.dll это и есть драйвер. Конечно, он написан Не на .Net языке. Чтобы использовать его функционал в .Net - на каком то этапе должна присутствовать оболочка на .Net, использующая external
подпрограммы.
Смотря на код ТС - у него скорее всего своя неуправляемая .dll, в которой он держит низкоуровневый и быстрый код. Но всё на низкоуровневых языках делать - тоже плохо.
В таком случае - довольно логично сделать часть кода неуправляемым, а часть на .Net языке. Но, опять же, чтоб использовать эти 2 кода вместе -
на каком то этапе должна присутствовать оболочка на .Net, использующая
external
подпрограммы.
А перерегистрироваться не пришлось?
Мне не пришлось.
Мне не пришлось, но у меня выполнен вход через гитхаб-аккаунт
Не пришлось. Регистрация обычная, без всяких гитхабов.
На всякий случай замечу, что перерегистрация и не планировалась.
@Kotov спасибо, что упомянули об использовании Гитхаб-авторизации: я раздумывал нужна ли она кому-то.
Сергей, добрый вечер. Не уверен но по моему это опечатка. (Стр-95 Введение в современное программирование)
А почему я? Я книгописанием пока не страдал)) Вам к RAlex.
И пишите не в болталке, а в соответствующей теме.
Сергей извиняюсь, согласен обратился не по адресу.
А когда пишут, что на дне озера бьют холодные ключи - не удивляет? А ведь могут и больно побить!
Меня удивляет, что кто-то лезет на дно озера, где его бьют ключи. После этого побитые холодным ключом начинают изучать Питон и C++. Вот мы и нашли источник головной боли при изучении программирования.
Не ищите ключ на дне!
И C#
Против Си-шарпа я ничего не имею. Изучайте Си-шарп и никого не бойтесь!