Помощь новичкам

Сделайте проще: посмотрите на PABCSystem.pas. Он является примером чисто .NET кода. Я не вижу проблемы в использовании .NET. Про Integer ещё согласен. Тема по обновлениям будет. Оформление кода также исправлю.

Вы мне или @RAlex (хотя, подозреваю, что не мне)?

Не Вам. С Вами я полностью согласен, за исключением случая с then.

Если под средствами имеются ввиду стандартные модули, то они немногочисленны и не могут дать весь функционал, который предоставляет .Net Framework. Смешивать средства, предоставляемые стандартными модулями, со средствами .Net Framework - хорошее решение. Отказываться от стандартных модулей, что называется на отрез, не стоит, так как они предназначены в некотором смысле для упрощения кода. Но, в то же время пользоваться исключительно ими - плохой вариант, так как существует широкий круг задач, которые им не под силу.

Вам удобней писать then на отдельной строке? Если да, то почему?

Мне лично так читать проще.

 begin
      View3D.Title := 'мисли'; 
      var шарик := Sphere((1 * 2), 0, 0, 1);                
      Graph3D.OnMouseDown += procedure (x, y, mb) -> begin
       объект3Д := FindNearestObject(x, y);                
        if объект3Д = шарик then
        begin
        
        end;
        объект3Д := nil; 
      end;
      
    end;  

елки палки, вырезал половину кода, убрал 5ти мерные массивы, существенно все оптимизировал и упростил. Но вот это место в 3д все равно тормазит при клике мышью на шарик! ??? что тут не так-то?

Ваш код не компилируется, хотя бы потому что:

  1. Отсутствует uses Graph3D.
  2. ; после последнего end, вместо .
  3. объект3Д := FindNearestObject(x, y); - нет var.

Рабочая (компилируется) версия:

uses Graph3D;
begin
  View3D.Title := 'мисли'; 
  var шарик := Sphere((1 * 2), 0, 0, 1);                
  Graph3D.OnMouseDown += procedure (x, y, mb) -> begin
    var объект3Д := FindNearestObject(x, y);                
    if объект3Д = шарик then
    begin
    end;
    объект3Д := nil; 
  end;
end.

. Не это ли Вам нужно (удаление шарика):

uses Graph3D;
begin
  View3D.Title := 'мисли'; 
  var шарик := Sphere((1 * 2), 0, 0, 1);                
  Graph3D.OnMouseDown += procedure (x, y, mb) -> begin
    var объект3Д := FindNearestObject(x, y);                
    if объект3Д = шарик then
      шарик.Destroy(); 
  end;
end.

?

2 лайка

о спасибо, это тоже пригодиться.

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

если несколько раз по шарику покликать вообще иногда зависает.

У меня не тормозит. Я не знаю характеристик Вашего компьютера, чтобы сказать почему.

ИИ_0_11.pas (24,2 КБ)

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

Код не запустится, так как есть ошибки. Например, подключайте сборку до того, как использовать требуемое пространство имён:

{$Reference 'System.Windows.Forms.dll'}

. После исправления этой ошибки код компилируется и запускается.

хмм странно у меня запускается, может у меня ошибки не учитывает?? переустановить паскаль нужно?

Можете объяснить что нужно в программе делать?

там ничего, я вырезал из неё почти все. Буду без таких больших массивов делать, почти заново. а так цель… программа получая на входе данные и требуемый результат - должна будет писать программки для виртуальной среды, которые будут находить подходящие алгоритмы, комбинировать их и выдавать ответы. например вводим 2 и 3 в ответ записываем 5 программа должна построить программу а + б и т.д.

Здравствуйте, хотелось бы узнать в чем особенность языка F#, допустим, в сравнении с тем самым С#, для чего он создан?

Для функционального программирования, а не императивного.

Основа одна (.NET) и можно сочетать, но если вкратце, то разница C# -vs- F$

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

А так, в принципе, скорость чтения должна зависить от типа носителя. К примеру, на диске вроде разница должна быть ещё больше. Я в железе не сильно разбираюсь, но и платы оперативной памяти должны быть разные.

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

Бред пишут. IntPtr это тип, который принимает разный вид в зависимости от платформы. На 32-битной системе - он занимает 32 бита, а 64-битной - 64 бита. Это, как сказал @Gleb (хотя не до конца), нужно для вызова кода написанного на C++, без потерь информации/производительности.

Более того:

begin
  var i: System.IntPtr;
  var p: pointer;
  
  p := i.ToPointer;
  i := new System.IntPtr(p);
end.

По моему это надо куда то отдельно вынести наконец, потому что каждый раз просто перестают обсуждать.
Ну а лично я - считаю что действительно, бывают не самые адекватные просьбы добавить что то в язык, и @RAlex прав, в том что говорит об этом. Но всё же, @RAlex, давайте больше по делу и меньше “Всё что вы просите только захламит язык, это глупо и бесполезно” к практически каждому предложению добавить что то в язык.

2 лайка