Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp?

Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp?

Ответ
Поиск в этой теме
Непрочитано 19.10.2022, 10:17 #1
Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp?
power85
 
Регистрация: 03.02.2017
Сообщений: 61

Здравствуйте
Имеется lisp код на 1600 строк выполнятся, он может 12час. Определено узкое место. Нужно распараллелить вычисления на многоядерном процессоре.
Кроме этого я знаю языки Python и Vba. В Python есть, возможно, распараллелить вычисления и сделать функцию для узкого места. Но как её использовать в lisp?
Переписать весь код lisp 1600 строк в код на Python не реально.
Просмотров: 5921
 
Непрочитано 19.10.2022, 10:41
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от power85 Посмотреть сообщение
Переписать весь код lisp 1600 строк в код на Python не реально.
думаете городить интеграцию с кодом на питоне с параллельным выполнением вычислений займет сильно меньше времени?) А VBA - это тот же ActiveX, скорости на нем не получите.

----- добавлено через ~5 мин. -----
тот же код на .Net можно ориентировочно считать на пару порядков быстрее лиспа работает, т.е. вместо 12 часов будет 10 мин даже без распараллеливания

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от power85 Посмотреть сообщение
Или как сделать параллельное программирование в Visual Lisp?
ничего, что акад (хотя, может, в последних версиях есть подвижки) - работает на одном ядре?)
Сергей812 вне форума  
 
Непрочитано 19.10.2022, 10:55
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Я бы подумал на предмет изменения этого самого куска. Логического изменения.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.10.2022, 10:57
#4
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
тот же код на .Net можно ориентировочно считать на пару порядков быстрее лиспа работает, т.е. вместо 12 часов будет 10 мин даже без распараллеливания
.Net реально на столько крут? Есть тесты сравнения? Конечно рискованно и сложно переписать на Net чтобы проверить.
power85 вне форума  
 
Непрочитано 19.10.2022, 10:59
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Зависит от задач и сложности хранения данных. И от качества кода, конечно. У меня было, что NET, написанный криво, работал втрое медленнее некомпилированного лиспа. А бывало, что NET в несколько десятков раз быстрее.
P.S. Этот кусок выполняется 12 часов в некомпилированном виде? А если собрать его в fas?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.10.2022, 11:00
#6
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я бы подумал на предмет изменения этого самого куска. Логического изменения.
На мой взгляд я написал этот кусок максимально оптимизировано.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
P.S. Этот кусок выполняется 12 часов в некомпилированном виде? А если собрать его в fas?
Да собрал я его в fas т.е. с компилируемый.
power85 вне форума  
 
Непрочитано 19.10.2022, 11:03
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Offtop: Я в свое время тоже так думал. Пока не поменял ненужный mapcar на foreach

----- добавлено через ~2 мин. -----
Offtop: Ну и - дополнительно - вопрос в качестве входящих данных. Если они слабоструктурированы, то, может, узкое место совсем не здесь? ))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.10.2022, 11:08
#8
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Зависит от задач и сложности хранения данных. И от качества кода, конечно. У меня было, что NET, написанный криво, работал втрое медленнее некомпилированного лиспа. А бывало, что NET в несколько десятков раз быстрее.
То есть функцию можно сделать с параллельным программированием можно сделать только в Net?

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Offtop: Ну и - дополнительно - вопрос в качестве входящих данных. Если они слабоструктурированы, то, может, узкое место совсем не здесь? ))
Может быть не здесь. Там долго происходит проверка (поиск) куда можно поставить мультивыноски между примитивами. А проверка происходит на пересечения.
power85 вне форума  
 
Непрочитано 19.10.2022, 11:14
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Я сильно подозреваю, что параллельность не сильно понадобится. Смотри, допустим, есть задача из списка вытащить что-то там по ключу. Проблема в том, что ключ может быть строковым. И необязательно в едином регистре. Придется городить костыли, хотя достаточно просто данные "снаружи" привести в божеский вид.
Offtop: Пример, конечно, высосан из пальца, но тем не менее:
Код:
[Выделить все]
 (defun t1 (key data)
  (cdr (assoc (if (= (type key) 'str)
                (strcase key)
                key
              ) ;_ end of if
              (mapcar (function (lambda (x)
                                  (cons
                                    (if (= (type (car x)) 'str)
                                      (strcase (car x))
                                      (car x)
                                    ) ;_ end of if
                                    (cdr x)
                                  ) ;_ end of cons
                                ) ;_ end of LAMBDA
                      ) ;_ end of function
                      data
              ) ;_ end of mapcar
       ) ;_ end of assoc
  ) ;_ end of cdr
) ;_ end of defun

(defun t2 (key data)
  (cdr (assoc key data))
) ;_ end of defun
И собственно проверки:
Код:
[Выделить все]
 _$ (setq key "a" data '((1 . 20) ("b" . 1342) ("A" . "asdf") ("a" . "qwer")))
((1 . 20) ("b" . 1342) ("A" . "asdf") ("a" . "qwer"))
_$ (t1 key data)
"asdf"
_$ (t2 key data)
"qwer"
_$ (BENCHMARK '((t1 key data) (t2 key data)))
Benchmarking ..................Elapsed milliseconds / relative speed for 32768 iteration(s):

    (T2 KEY DATA).....1453 / 1.61 <fastest>
    (T1 KEY DATA).....2344 / 1 <slowest>
И результаты разные
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.10.2022, 11:18
#10
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я сильно подозреваю, что параллельность не сильно понадобится. Смотри, допустим, есть задача из списка вытащить что-то там по ключу. Проблема в том, что ключ может быть строковым. И необязательно в едином регистре. Придется городить костыли, хотя достаточно просто данные "снаружи" привести в божеский вид.
Спасибо За ответы.
Понятно.
power85 вне форума  
 
Непрочитано 19.10.2022, 11:24
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от power85 Посмотреть сообщение
.Net реально на столько крут?
.Net работает фактически напрямую с акадом (через обертки над нативным С++), а сама обработка данных вообще акад не затрагивает по сути. Плюс есть куча готовых вещей - списки, словари и т.д. Ну а так смотря какой код напишите) Вот у Алексея были тесты, у меня по сравнению с аналогичными задачами при переходе с Interop (тот же ActiveX) на .Net скорость выполнения кода примерно на пару порядков и подросла.

Причем на .Net можно делать AutoLISP Function Definition и вызывать из лиспа основной программы (это к вопросу тестирования производительности - что не всю программу перелопачивать сразу, а по частям).
Сергей812 вне форума  
 
Автор темы   Непрочитано 19.10.2022, 11:33
#12
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
.Net работает фактически напрямую с акадом (через обертки над нативным С++), а сама обработка данных вообще акад не затрагивает по сути. Плюс есть куча готовых вещей - списки, словари и т.д. Ну а так смотря какой код напишите) Вот у Алексея были тесты, у меня по сравнению с аналогичными задачами при переходе с Interop (тот же ActiveX) на .Net скорость выполнения кода примерно на пару порядков и подросла.
Спасибо за ответы.
Понятно. Круто.
power85 вне форума  
 
Непрочитано 19.10.2022, 11:37
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Цитата:
Сообщение от power85 Посмотреть сообщение
ам долго происходит проверка (поиск) куда можно поставить мультивыноски между примитивами. А проверка происходит на пересечения.
Знакомая задача Тут вполне может оказаться наиболее выгодным (если оставлять все на лиспе) создавать новый документ через ObjectDBX, туда клонировать примитивы и напрямую в том документе создавать / проставлять мультивыноски. А потом готовые мультивыноски склонировать в текущий. Тупо, но иногда достаточно выгодно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.10.2022, 11:39
#14
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Причем на .Net можно делать AutoLISP Function Definition и вызывать из лиспа основной программы (это к вопросу тестирования производительности - что не всю программу перелопачивать сразу, а по частям).
Вот это другое дело.
То есть можно создать в VB.NET функцию далее сохранить в dll. Далее загрузить dll в autocad через netload и можно пользоваться этой функцией как обычной lisp? Просто я не профессиональный программист.

----- добавлено через ~6 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Знакомая задача Тут вполне может оказаться наиболее выгодным (если оставлять все на лиспе) создавать новый документ через ObjectDBX, туда клонировать примитивы и напрямую в том документе создавать / проставлять мультивыноски. А потом готовые мультивыноски склонировать в текущий. Тупо, но иногда достаточно выгодно.
Понятно. Хорошая идея.

Последний раз редактировалось power85, 19.10.2022 в 11:52.
power85 вне форума  
 
Непрочитано 19.10.2022, 11:48
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Цитата:
Сообщение от power85 Посмотреть сообщение
То есть можно создать в VB.NET функцию далее сохранить в dll. Далее загрузить dll в autocad через netload и можно пользоваться этой функцией как обычной lisp?
Да, можно. Просто у меня на такие вещи почему-то достаточно большие потери на разбор входящих данных (если это списки какие-то достаточно странные) и формирование выходных списков. Но из меня NET-программист как из слона балерина
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.10.2022, 12:07
#16
румата


 
Регистрация: 06.04.2015
Сообщений: 2,753


Цитата:
Сообщение от power85 Посмотреть сообщение
То есть можно создать в VB.NET функцию далее сохранить в dll. Далее загрузить dll в autocad через netload и можно пользоваться этой функцией как обычной lisp?
Да, можно. Можно даже командный метод программирования в .net использовать

----- добавлено через ~11 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Просто у меня на такие вещи почему-то достаточно большие потери на разбор входящих данных (если это списки какие-то достаточно странные) и формирование выходных списков.
Не понятно, что за входные списки?
румата вне форума  
 
Непрочитано 19.10.2022, 12:22
#17
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Ну, к примеру, лисповая функция обрабатывает список вида '(("key1" . "value1") ("key2" "val21" "val22" "val23) ...), и должна вернуть нечто типа '((1 . 1) (2 . 3) ...) - логика сейчас не важна. На NET (я про замену "в лоб") придется корректно разбирать входящий параметр и опять же - корректно формировать выходной список. У меня на выполнение именно этого куска тратится прилично времени.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.10.2022, 12:31
#18
румата


 
Регистрация: 06.04.2015
Сообщений: 2,753


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ну, к примеру, лисповая функция обрабатывает список вида...
Не понятно откуда берется и что определяет такой список вида... Это парсинг данных из внешнего файла для скармливания автокаду или еще что?
румата вне форума  
 
Непрочитано 19.10.2022, 12:40
#19
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Я не про это. На входе в функцию данные, которые как-то структурированы и которые надо каким-то хитрым образом обработать. И вернуть тоже список, чтобы не порушить остальной код.
К примеру:
Код:
[Выделить все]
 (setq lst (vl-remove nil
                     (apply (function append)
                            (mapcar (function (lambda (name)
                                                (read-data-from-dict ent name)
                                              ) ;_ end of LAMBDA
                                    ) ;_ end of function
                                    '("data" "links" "ext")
                            ) ;_ end of mapcar
                     ) ;_ end of apply
          ) ;_ end of vl-remove
) ;_ end of setq
После этого как раз и получаем список типа (("key1" . "value1") ("key2" "val21" "val22" "val23) ...). А дальше где-то по коду встречается
Код:
[Выделить все]
 (setq res (change-dict-datas lst))
И твоя функция change-dict-datas как раз ожидает формат lst, и возвращает '((1 . 1) (2 . 3) ...) для дальнейшего использования. Так что если ты переписываешь change-dict-datas на NET, то и новое определение должно возвращать такое же. Иначе надо переделывать вообще все, а на это никогда нет ни времени, ни возможностей.

----- добавлено через ~1 мин. -----
Естественно, все имена фунций выдуманы прямо на ходу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.10.2022, 12:49
#20
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от румата Посмотреть сообщение
Можно даже командный метод программирования в .net использовать
А где можно про это почитать? Или как это делается?
power85 вне форума  
 
Непрочитано 19.10.2022, 12:51
#21
румата


 
Регистрация: 06.04.2015
Сообщений: 2,753


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
На входе в функцию данные, которые как-то структурированы и которые надо каким-то хитрым образом обработать. И вернуть тоже список, чтобы не порушить остальной код.
К примеру:
Ну так LINQом в .net это делается очень элегантно наподобия запроса к базе данных. При этом это очень быстро работает со всеми внутренними нетовскими структурами массивов, т.е. и со словарями и с простыми списками и с очередями и со стопками.
румата вне форума  
 
Автор темы   Непрочитано 19.10.2022, 12:53
#22
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Да, можно. Просто у меня на такие вещи почему-то достаточно большие потери на разбор входящих данных (если это списки какие-то достаточно странные) и формирование выходных списков. Но из меня NET-программист как из слона балерина
Цитата:
Сообщение от румата Посмотреть сообщение
Да, можно.
Отлично. Буду пробовать.
power85 вне форума  
 
Непрочитано 19.10.2022, 12:53
#23
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от power85 Посмотреть сообщение
А где можно про это почитать? Или как это делается?
лучше этого не делать) особенно если скорость важна. Ведь каждый командный метод - это прерывание выполнения .Net функции с передачей управления акаду и ожидание, когда акад соизволит передать управления обратно.
Сергей812 вне форума  
 
Непрочитано 19.10.2022, 12:54
#24
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Цитата:
Сообщение от румата Посмотреть сообщение
Ну так LINQом в .net это делается очень элегантно наподобия запроса к базе данных. При этом это очень быстро работает со всеми внутренними нетовскими структурами массивов, т.е. и со словарями и с простыми списками и с очередями и со стопками.
Хм, в таком ключе еще не думал... Побрел искать, читать и пытаться осознать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.10.2022, 12:54
#25
румата


 
Регистрация: 06.04.2015
Сообщений: 2,753


Цитата:
Сообщение от power85 Посмотреть сообщение
А где можно про это почитать? Или как это делается?
Здесь можно посмотреть. Там и примеры и куски кода
румата вне форума  
 
Непрочитано 19.10.2022, 12:55
#26
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от румата Посмотреть сообщение
Ну так LINQом в .net это делается очень элегантно наподобия запроса к базе данных. При этом это очень быстро работает со всеми внутренними нетовскими структурами массивов, т.е. и со словарями и с простыми списками и с очередями и со стопками.
ну там то речь шла - чтобы не переделывать остальной код на лиспе для использования .Net)

----- добавлено через ~3 мин. -----
а передача данных из условной Лисп-машины в .Net функцию и обратно явно будет узким местом как стык между управляемым кодом .Net и тем же ActiveX
Сергей812 вне форума  
 
Непрочитано 19.10.2022, 13:02
#27
румата


 
Регистрация: 06.04.2015
Сообщений: 2,753


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну там то речь шла - чтобы не переделывать остальной код на лиспе для использования .Net)
Так не получится.

----- добавлено через 51 сек. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а передача данных из условной Лисп-машины в .Net функцию и обратно явно будет узким местом как стык между управляемым кодом .Net и тем же ActiveX
*
Нужно будет городить промежуточный обмен файлом для передачи внутренних массивов данных между лисп и net

----- добавлено через ~9 мин. -----
Цитата:
Сообщение от румата Посмотреть сообщение
Здесь можно посмотреть. Там и примеры и куски кода
Прошу прощения немного не ту ссылку сделал. Здесь можно посмотреть как использовать внутренние команды через обращение к командной строке.

Последний раз редактировалось румата, 19.10.2022 в 13:12.
румата вне форума  
 
Непрочитано 19.10.2022, 13:12
#28
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от румата Посмотреть сообщение
Нужно будет городить промежуточный обмен файлом для передачи внутренних массивов данных между лисп и net
здесь возникает вопрос - а зачем собирать информацию в более медленном лиспе, потом пропихивать ее в .Net метод, а после этого - возможно, еще и обратно?

Имхо, рациональнее Lisp-подобные функции использовать в следующих случаях:
1. Диалоги (причем помимо диалога можно там же и с БД работать или иным внешним хранилищем. и т.п.). И возвращать лишь конечный результат.
2. Обработка больших объемов информации по некоторому конечному набору критериев (пускай с самой БД dwg чертежа уже внутри .Net метода работает).
3. Реализация функционала, отсутствующего в самом Lisp (по сути альтернатива подключаемым внешним библиотекам).
Сергей812 вне форума  
 
Непрочитано 19.10.2022, 13:37
#29
румата


 
Регистрация: 06.04.2015
Сообщений: 2,753


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Имхо, рациональнее Lisp-подобные функции использовать в следующих случаях:
Лисп-функции программируемые из-под .net это же просто обертки над net с ограничинным набором типов данных, которыми можно обмениваться при последующем программировании на лиспе. Чтобы не было проблем это ограничение нужно иметь в виду при написании программ на лиспе. А скорость обмена данными между такими функциями и родными лисповскими функциями через ResultBuffer и TypedValue, по идее, не должна стать узким местом. Хотя внутренние издержки, конечно, будут.
румата вне форума  
 
Автор темы   Непрочитано 19.10.2022, 13:46
#30
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Цитата:
Сообщение от румата Посмотреть сообщение
Лисп-функции программируемые из-под .net это же просто обертки над net с ограничинным набором типов данных, которыми можно обмениваться при последующем программировании на лиспе. Чтобы не было проблем это ограничение нужно иметь в виду при написании программ на лиспе. А скорость обмена данными между такими функциями и родными лисповскими функциями через ResultBuffer и TypedValue, по идее, не должна стать узким местом. Хотя внутренние издержки, конечно, будт.
Спасибо. Буду разбираться и пробовать.
power85 вне форума  
 
Непрочитано 19.10.2022, 13:53
#31
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от румата Посмотреть сообщение
Лисп-функции программируемые из-под .net это же просто обертки над net
точнее - это код .Net, помеченный атрибутом LispFunction для возможности взаимодействия с Lisp-кодом путем встраивания дополнительных метаданных в сборку. Иначе как акад узнает - что там программист решил реализовывать в сборке, если он (акад) сможет из метаданных получить только название метода без дополнительной информации.

А обмен большим объемом данных через аргументы не является узким местом, если эти данные передаются в виде ссылки на объект (объект класса списка и т.д.). Тогда эта ссылка на объект, переданная через стек, копируется во внутренний указатель метода (поведение по умолчанию) - а работа внутри функции ведется по факту с исходным объектом. А если нужно переупаковывать из одного формата данных в другой - там каждый вызов метода будет вызывать расход ресурсов.
Сергей812 вне форума  
 
Непрочитано 19.10.2022, 22:46
2 | #32
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Сергей812,
Передача большого списка (десятки тысяч элементов и больше) из VisualLisp в lisp-функцию, созданную при помощи .NET очень не рекомендую. Замечал очень большие задержки именно на этапе передачи списка. Причем это не только в .NET, но и в чистом ObjectARX.
Александр Ривилис вне форума  
 
Непрочитано 20.10.2022, 09:29
#33
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Передача большого списка (десятки тысяч элементов и больше) из VisualLisp в lisp-функцию, созданную при помощи .NET очень не рекомендую. Замечал очень большие задержки именно на этапе передачи списка. Причем это не только в .NET, но и в чистом ObjectARX.
насколько понимаю, список лиспа являет однонаправленным списком и передается значение первого элемента (в отличие от указателя на начало области памяти массива, как в "классических" языках программирования). И, соответственно, вместо передачи напрямую в ObjectARX/.Net списка как ссылки на коллекцию происходит проход по всему списку.
Сергей812 вне форума  
 
Непрочитано 20.10.2022, 10:19
#34
румата


 
Регистрация: 06.04.2015
Сообщений: 2,753


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
И, соответственно, вместо передачи напрямую в ObjectARX/.Net списка как ссылки на коллекцию происходит проход по всему списку.
Да. Даже передаваемый по ссылке ResultBuffer нужно форычить для дальнейшей работы с передаваемыми данными.
румата вне форума  
 
Непрочитано 20.10.2022, 11:44
#35
Петр-и-Алекс


 
Регистрация: 18.01.2021
Сообщений: 404


когда то существавали компиляторы lisp
конечно же с большими ограничениями ... и за деньги (не большие вообще то)
не знаю, как оно сегодня обстоит
Петр-и-Алекс вне форума  
 
Непрочитано 20.10.2022, 21:55
#36
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
Там долго происходит проверка (поиск) куда можно поставить мультивыноски между примитивами. А проверка происходит на пересечения.
надо использовать RTree
trir вне форума  
 
Непрочитано 20.10.2022, 22:07
#37
румата


 
Регистрация: 06.04.2015
Сообщений: 2,753


Цитата:
Сообщение от trir Посмотреть сообщение
надо использовать RTree
А есть такая структура данных в объектной модели автокада?
румата вне форума  
 
Непрочитано 20.10.2022, 22:28
#38
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


https://habr.com/ru/post/278765/

https://github.com/rpav/spatial-tree...r/r-trees.lisp
trir вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли на языке Python сделать графическую программу по анализу тензора напряжений? PETR_THE_GREAT Программирование 4 17.02.2022 16:15
Можно ли использовать для шпилек резьбовые штанги вместо арматуры? Drake Железобетонные конструкции 9 22.06.2021 03:38
Можно ли для отделки пола в Технических помещениях торгового центра использовать линолеум Г1В2Д2Т2РП1 ? drill_man Поиск литературы, чертежей, моделей и прочих материалов 32 06.04.2013 15:54
Какую версию ObjectARX с каким AutoCAD можно можно использовать? nav3000 Программирование 3 01.12.2012 21:37
Можно ли использовать формы VBA для запуска lisp команд? Kserg_nn LISP 4 05.02.2010 20:00