| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
Поиск в этой теме |
19.10.2022, 10:17 | #1 | |
Как можно использовать код Python в Visual Lisp? Или как сделать параллельное программирование в Visual Lisp?
Регистрация: 03.02.2017
Сообщений: 56
|
||
Просмотров: 5519
|
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
думаете городить интеграцию с кодом на питоне с параллельным выполнением вычислений займет сильно меньше времени?) А VBA - это тот же ActiveX, скорости на нем не получите.
----- добавлено через ~5 мин. ----- тот же код на .Net можно ориентировочно считать на пару порядков быстрее лиспа работает, т.е. вместо 12 часов будет 10 мин даже без распараллеливания ----- добавлено через ~8 мин. ----- ничего, что акад (хотя, может, в последних версиях есть подвижки) - работает на одном ядре?) |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Я бы подумал на предмет изменения этого самого куска. Логического изменения.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.02.2017
Сообщений: 56
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Зависит от задач и сложности хранения данных. И от качества кода, конечно. У меня было, что NET, написанный криво, работал втрое медленнее некомпилированного лиспа. А бывало, что NET в несколько десятков раз быстрее.
P.S. Этот кусок выполняется 12 часов в некомпилированном виде? А если собрать его в fas?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.02.2017
Сообщений: 56
|
Цитата:
----- добавлено через ~2 мин. ----- Да собрал я его в fas т.е. с компилируемый. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Offtop: Я в свое время тоже так думал. Пока не поменял ненужный mapcar на foreach
----- добавлено через ~2 мин. ----- Offtop: Ну и - дополнительно - вопрос в качестве входящих данных. Если они слабоструктурированы, то, может, узкое место совсем не здесь? ))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.02.2017
Сообщений: 56
|
Цитата:
----- добавлено через ~5 мин. ----- Может быть не здесь. Там долго происходит проверка (поиск) куда можно поставить мультивыноски между примитивами. А проверка происходит на пересечения. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Я сильно подозреваю, что параллельность не сильно понадобится. Смотри, допустим, есть задача из списка вытащить что-то там по ключу. Проблема в том, что ключ может быть строковым. И необязательно в едином регистре. Придется городить костыли, хотя достаточно просто данные "снаружи" привести в божеский вид.
Offtop: Пример, конечно, высосан из пальца, но тем не менее: Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.02.2017
Сообщений: 56
|
Цитата:
Понятно. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
.Net работает фактически напрямую с акадом (через обертки над нативным С++), а сама обработка данных вообще акад не затрагивает по сути. Плюс есть куча готовых вещей - списки, словари и т.д. Ну а так смотря какой код напишите) Вот у Алексея были тесты, у меня по сравнению с аналогичными задачами при переходе с Interop (тот же ActiveX) на .Net скорость выполнения кода примерно на пару порядков и подросла.
Причем на .Net можно делать AutoLISP Function Definition и вызывать из лиспа основной программы (это к вопросу тестирования производительности - что не всю программу перелопачивать сразу, а по частям). |
|||
|
||||
Регистрация: 03.02.2017
Сообщений: 56
|
Цитата:
Понятно. Круто. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Знакомая задача Тут вполне может оказаться наиболее выгодным (если оставлять все на лиспе) создавать новый документ через ObjectDBX, туда клонировать примитивы и напрямую в том документе создавать / проставлять мультивыноски. А потом готовые мультивыноски склонировать в текущий. Тупо, но иногда достаточно выгодно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 03.02.2017
Сообщений: 56
|
Цитата:
То есть можно создать в VB.NET функцию далее сохранить в dll. Далее загрузить dll в autocad через netload и можно пользоваться этой функцией как обычной lisp? Просто я не профессиональный программист. ----- добавлено через ~6 мин. ----- Цитата:
Последний раз редактировалось power85, 19.10.2022 в 11:52. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Да, можно. Просто у меня на такие вещи почему-то достаточно большие потери на разбор входящих данных (если это списки какие-то достаточно странные) и формирование выходных списков. Но из меня NET-программист как из слона балерина
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 06.04.2015
Сообщений: 2,676
|
Цитата:
----- добавлено через ~11 мин. ----- Не понятно, что за входные списки? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Ну, к примеру, лисповая функция обрабатывает список вида '(("key1" . "value1") ("key2" "val21" "val22" "val23) ...), и должна вернуть нечто типа '((1 . 1) (2 . 3) ...) - логика сейчас не важна. На NET (я про замену "в лоб") придется корректно разбирать входящий параметр и опять же - корректно формировать выходной список. У меня на выполнение именно этого куска тратится прилично времени.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 06.04.2015
Сообщений: 2,676
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Я не про это. На входе в функцию данные, которые как-то структурированы и которые надо каким-то хитрым образом обработать. И вернуть тоже список, чтобы не порушить остальной код.
К примеру: Код:
Код:
----- добавлено через ~1 мин. ----- Естественно, все имена фунций выдуманы прямо на ходу.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 06.04.2015
Сообщений: 2,676
|
Ну так LINQом в .net это делается очень элегантно наподобия запроса к базе данных. При этом это очень быстро работает со всеми внутренними нетовскими структурами массивов, т.е. и со словарями и с простыми списками и с очередями и со стопками.
|
|||
|
||||
Регистрация: 03.02.2017
Сообщений: 56
|
Цитата:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Хм, в таком ключе еще не думал... Побрел искать, читать и пытаться осознать
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 06.04.2015
Сообщений: 2,676
|
Здесь можно посмотреть. Там и примеры и куски кода
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
Цитата:
----- добавлено через ~3 мин. ----- а передача данных из условной Лисп-машины в .Net функцию и обратно явно будет узким местом как стык между управляемым кодом .Net и тем же ActiveX |
|||
|
||||
Регистрация: 06.04.2015
Сообщений: 2,676
|
Цитата:
----- добавлено через 51 сек. ----- Цитата:
----- добавлено через ~9 мин. ----- Прошу прощения немного не ту ссылку сделал. Здесь можно посмотреть как использовать внутренние команды через обращение к командной строке. Последний раз редактировалось румата, 19.10.2022 в 13:12. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
Цитата:
Имхо, рациональнее Lisp-подобные функции использовать в следующих случаях: 1. Диалоги (причем помимо диалога можно там же и с БД работать или иным внешним хранилищем. и т.п.). И возвращать лишь конечный результат. 2. Обработка больших объемов информации по некоторому конечному набору критериев (пускай с самой БД dwg чертежа уже внутри .Net метода работает). 3. Реализация функционала, отсутствующего в самом Lisp (по сути альтернатива подключаемым внешним библиотекам). |
|||
|
||||
Регистрация: 06.04.2015
Сообщений: 2,676
|
Цитата:
|
|||
|
||||
Регистрация: 03.02.2017
Сообщений: 56
|
Цитата:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
точнее - это код .Net, помеченный атрибутом LispFunction для возможности взаимодействия с Lisp-кодом путем встраивания дополнительных метаданных в сборку. Иначе как акад узнает - что там программист решил реализовывать в сборке, если он (акад) сможет из метаданных получить только название метода без дополнительной информации.
А обмен большим объемом данных через аргументы не является узким местом, если эти данные передаются в виде ссылки на объект (объект класса списка и т.д.). Тогда эта ссылка на объект, переданная через стек, копируется во внутренний указатель метода (поведение по умолчанию) - а работа внутри функции ведется по факту с исходным объектом. А если нужно переупаковывать из одного формата данных в другой - там каждый вызов метода будет вызывать расход ресурсов. |
|||
|
||||
Сергей812,
Передача большого списка (десятки тысяч элементов и больше) из VisualLisp в lisp-функцию, созданную при помощи .NET очень не рекомендую. Замечал очень большие задержки именно на этапе передачи списка. Причем это не только в .NET, но и в чистом ObjectARX.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
насколько понимаю, список лиспа являет однонаправленным списком и передается значение первого элемента (в отличие от указателя на начало области памяти массива, как в "классических" языках программирования). И, соответственно, вместо передачи напрямую в ObjectARX/.Net списка как ссылки на коллекцию происходит проход по всему списку.
|
|||
|
||||
Регистрация: 06.04.2015
Сообщений: 2,676
|
|
|||
|
||||
Регистрация: 18.12.2010
Сообщений: 5,051
|
|
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Можно ли на языке 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 |