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

Библиотека для построения и обучения свёрточных и полносвязных нейросетей. Если извернуться, можно и такое замутить.

Я как понимаю, Вы хотите, чтобы она была включена в PascalABC.Net как стандартная библиотека?

Хотел бы, но только после тестирования и реализации некоторых примеров.

Понятно. Название как-бы на это намекает, так как содержит ABC, характерное для имён стандартных модулей. :slight_smile:

Да, но вот когда руки дойдут до TensorFlowABC (по аналогии с TensorFlowJS)… :smile:

11 сообщений перенесены в тему Болталка PascalABC.NET

Когда мы с разработчиками вели разговор о включении в дистрибутив библиотеки, известной сейчас как NumLibABC, в частности, @Admin обратил мое внимание, что модули библиотеки максимально должны использовать современные приемы программирования и быть примером реализации алгоритмов именно средствами PascalABC.NЕТ, а не просто набором программ. Ваш код сейчас - это сишный слепок, который плохо читается и содержит чересчур много обращений в .NET вместо средств, реализованных непосредственно в языке. (те же Console.WriteLine вместо Println). Мне, конечно, все равно, что Вы там и как пишете (моя бы воля - я бы давал Ваш код читать в качестве наказания для изучающих Паскаль), но имейте в виду, что и Вам могут сказать то же, если захотите попытаться сделать свою библиотеку стандартной.

@Gleb, могу сказать следующее (по оформлению) на примере одного .pas файла.

  1. Код плохо стандартизирован, хотя, если это сырая версия, то тогда ладно.
    unit Converters;
    
    Uses System; // <-- Нет никакого разделения между uses и остальным содержимым файла, слеплено.
    class // <-- Почему на отдельной строке?
    function Double.Operator Implicit(v: Double): Int32;
    begin
      try
      Begin // <-- Лишние begin-end.
        Result := Convert.ToInt32(v);
      End;
      Except
      on e: Exception do // <-- Переменную, конечно, использовать можно, но зачем?
      Begin
      End;
      End;
    end; // <-- Почему два оператора слеплены и нет никакого разделения между ними (пустой строки)?
    class  // <-- Почему на отдельной строке?
    function Single.Operator Implicit(v: Single): Int32;
    begin
      Result := Convert.ToInt32(v); // Можно использовать краткий синтаксис объявления операторов с использованием :=.
    end;
    End.

.

  1. В рекомендациях по C# было правило:

Необходимо использовать именования типов C#, а не .NET common type system (CTS).

, применительно к PascalABC.Net это, к примеру, означает, что следует использовать не System.Int32, а integer.

  1. Много проблем в плане стиля написания идентификаторов, ключевых слов.
  2. Также, не надо переносить then на новую строку, это затрудняет чтение кода.

Версия ещё сырая. Надо добавить ещё много чего.

Главное, чтобы оно не целый день с ним считалось. Применение переадресаций (PABCSystem.Sqrt() вместо System.Math.Sqrt()) сильно замедляет код и делает его более зависимым от версии среды. По мимо того, я уже не помню и половины “стандартного Паскаля”. Времени на восстановление его в памяти и переписывание кода уйдёт просто уйма.

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

Сделайте проще: посмотрите на 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 лайка

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

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

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