Болталка PascalABC.NET

Я полагаю, что Котлин — это не совсем популярный язык. Во-вторых: он не совсем для начинающих, даже если у этих начинающих первым языком был паскаль абц точка нет. В третьих: такую конструкцию там можно расширить блоками, чего нельзя сделать в здешней

val a = 10
val b = 20
val c = if (a > b){
    println("a = $a")
    a
} else {
    println("b = $b")
    b
}

В четвертых: Питон можно легко преподавать даже в средних школах, что и практикуется, а Котлин вы видели, чтоб где-нибудь в школах преподавали? В пятых: слово “дурацкий” это вы так говорите, я нигде такого не писал. И, наконец, лично мне, конечно, больше импонирует вариант Руби с короткой веткой:

a = 0
a += 1 if a.zero?
p a

вот еще пример с выходом по условию:

a = 0
while true do
  p a
  a += 1
  break if a < 10
end
p a

А вашу условную операцию в каких других случаях можно использовать, кроме как присвоить по условию?

Наверное поэтому ваш язык в школах и не изучают. А если и изучают, то в стиле старого паскаля - три операции и два оператора.

Ну, школы - не единственная цель и не самоцель.

Бронислав, а с какой целью вы пришли на форум PascalABC.NET? Вот сейчас я имею в виду - после долгого перерыва?

Руби - замечательный язык кстати.

Котлин - язык, из которого мы берем многие идеи. Он сейчас очень активно развивается и является одним из основных языков разработки под Андроид.

Я считаю, что знаю с какой. Да и Вы тоже знаете. Практически - риторический вопрос.

Я вас понял. Желаю вам всего самого наилучшего и успехов вам с вашим паскалем.

1 лайк

Компилятор всего 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;
1 лайк

Какая нужда в .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 спасибо, что упомянули об использовании Гитхаб-авторизации: я раздумывал нужна ли она кому-то.

1 лайк

Сергей, добрый вечер. Не уверен но по моему это опечатка. (Стр-95 Введение в современное программирование)

А почему я? Я книгописанием пока не страдал)) Вам к RAlex.

И пишите не в болталке, а в соответствующей теме.

Сергей извиняюсь, согласен обратился не по адресу.

Почему гаечный ключ не лезет в замочную скважину? Он же ключ!

a1p1

А когда пишут, что на дне озера бьют холодные ключи - не удивляет? А ведь могут и больно побить!