|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
VBA vs LISP
Kiev
Регистрация: 10.01.2007
Сообщений: 12
|
||
Просмотров: 15105
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,599
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Да на самом деле все можно средствами VBA решить. Особенно, если речь идет о связи с другими приложениями, типа Word, Excel и пр. Я вот LISP не знаю совсем. Это, конечно, не плюс, но пока обходился. В VBA, насколько я понимаю, гораздо легче создавать формы. Да и сам язык понятнее, привычнее. Чтобы работать в LISP'e, нужно мозги иначе повернуть, из-за чего мы с ним и не сдружились. Некогда в такие глубины буриться, программирование для меня - хобби, а работа не ждет.
|
|||
![]() |
|
||||
джедай Регистрация: 31.01.2005
Магадан
Сообщений: 460
![]() |
Цитата:
|
|||
![]() |
|
||||
джедай Регистрация: 31.01.2005
Магадан
Сообщений: 460
![]() |
да, и еще)
считаю лисп тупиковой ветвью для изучения - насколько знаю на лиспе можно писать программы только для ACad платформы на бейсике же мы ни к какой платформе не привязаны - можно писать любые программы, не только для Autocad если не прав - поправьте)) |
|||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
Два примера.
1. Пусть prg - список типа cmd1, cmd2, .... Этот список условно назовем программой пользователя, а cmd1 и т.д. - функции, определенные программистом. Надо выполнить эту пользовательскую программу LISP: (foreach cmd_ prg (cmd_)) VBA: for each cmd_ in prg if cmd_="cmd1" then call cmd1 exit for end if if cmd_="cmd2" then call cmd2 exit for end if next cmd_ Чем больше программист создает функций, тем лучше :-) 2. Косвенная адресация переменных. LISP: (setq a 'b) - переменная а является ссылкой на переменную b Любое изменение b автоматически приведет к изменению a Для работы с объектами тоже подходит. VBA: set a {объект} - аналогично, но только с объектами, не с числами Вообще я много работаю с VBA в MS Office. Но после этих двух примеров в AutoCAD`e пишу в основном на LISP. Если честно, я в этот язык просто влюбился :-). |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,599
|
Очередная религиозная война - "что лучше - VB, VC, Delphi, AutoLISP, gcc?"
Хоть лично и считаю подобные споры достаточно беспредметными, все же выскажусь. "поработав на VB под автокадом" - звучит круто. Только, как бы это сказать... В общем, попробуй выполнить VB-код на машинах с отключенной поддержкой VB 5-й версии (обрати внимание, я пока говорю про VB, а не про VBA). Поддержка VBA может быть отключена в процессе установки AutoCAD'a; на AutoCAD LT VBA не поддерживается никакими силами (в отличие от lisp / arx); для корректной работы с AutoCAD как с СОМ-сервером из-под VB надо по логике использовать позднее связывание, что череповато боком - в зависимости от версии может отличаться подход (даже если забыть про быстродействие подобного подхода). Мне не всегда удавалось в VB выполнить конструкцию Select Case, сравнивающую разные значения разных параметров, типа: Код:
Попробуй на VB прописать командный реактор, или реактор на двойной клик, или объектный реактор - у меня не получилось (хотя, если честно, я особо и не старался). Или вот еще задачка: попробуй на VB (или VBA, не важно) создать или переопределить размерный стиль, с учетом "подстилей" - то есть для AlignedDimention и RotatedDimention один стиль, для Radial и Diametr - другой ну и так далее. Именно стиль, а не свойства конкретного размера! Использование .NET тоже не фонтан - поддерживается только в версиях от 2005 и выше, а lisp практически одинаков в любом варианте. Лично я пришел к следующей схеме: диалоги, использующие "красивости", засовываю в dll (VB6), классы которой и вызываю из-под лиспа. P.S. На Basic'e, хочешь ты того или нет, а все равно привязан к Windows ![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
|||||
джедай Регистрация: 31.01.2005
Магадан
Сообщений: 460
![]() |
Цитата:
и вот именно - что "поработав", написал программку и можно сказать что забыл) Цитата:
Цитата:
Цитата:
согласен что лисп для автокада может чем-то быть лучше, но если не хочешь как программист зацикливаться на одном (на автокаде) - то все-таки лучше учить не лисп приемущества VB я написал в посте #4 - остальное все - оприделяется привычкой и знанием языка) может тему стоит закрыть? чтоб флейма и прочих войн не было? |
||||
![]() |
|
||||
джедай Регистрация: 31.01.2005
Магадан
Сообщений: 460
![]() |
и еще)
в догонку имеем некую программу написанную на лиспе, работает с большими объемами данных и работает медленно, порой очень медленно руки так и чешутся переписать ее на vb)) вот еще один "+" VB как конечный пользователь, при наличии двух программ делающих одно и то же - естественно предпочту ту что быстрее, либо сделанную за меньшее время конечно все зависит от оптимизации кода, но если на лиспе прийдется сидеть тратить время на оптимизацию кода, то вполне вероятно что в vb не тратя время на оптимизацию (то есть за меньшее время) будет написана программа с таким же быстродейстивем, а при оптимизации кода (то есть потратив столько же времени что и лисп программист), получится пограмма работающая быстрее немного путанно получилось) |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Совсем недавно приходила мысль, столько споров уже было, с какой стороны бутерброд маслом мазать, а про Lisp и VBA не было. Сглазил, видать.
![]() У Lisp'a есть один очень серьезный, все перечеркивающий минус - я его не знаю, а учить некогда ![]() ![]() |
|||
![]() |
|
||||
Регистрация: 26.03.2006
Сообщений: 20
|
в LISP-e >R15 - т.е. т.нар. VisualLISP в версиях выше R14-ая -можно изпользовать ActiveX комманд, аналогичные с VBA.
Интересно то, что я установил что не во всех случаях ActiveX быстрее с еквивалентным LISP. Так например обращение и изменение сложных обектов (щриховки, полилинии, конечно регионы - там очень ограничено все) - Activex быстрее. А например для создания обектов как линии, и 2DSOLID - простый лисп быстрее. Ето очень странно.. но кажется все дела очень недоделанные из строны аутодеска - и так и будет в будуще. Ну на тему: По моему для нормального человека - нужен только Basic. (VBA). Если нужно сделать не больше 10 программ в жизни - ето вариант без алтернатив. Если нужно чувствовать удовольствие - ЛИСП нет алтернативой. Есть конечно и ЛИСП для создания ЕХЕ-шников, которые конечно ничего общего с Аутокаду нет, но и не интересно для форуме. Каждый, кто может сравнить ЛИСП с "нормальный алгоритмический язык" - скажет что удовольствие из ЛИСПа несровнимо. Для нормальному человеку - VBA. Для сумасшедшые профи-программисты - LISP (для гимнастики мышления, и конечно удоволствие, которое она приносить) |
|||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
Насчет удовольствия - полностью поддерживаю. И не только я.
Лично общался, правда, только с двумя программистами на LISP, но оба в голос подтвердили: что ни говори, а писать на нем приятно. При всем уважении к VBA - мое отношение к нему не выходит за рамки, так сказать, официального. P.S. Гм, толочь воду в ступе тоже бывает забавно... |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,599
|
> DEM: Судя по информации от Autodesk'a, VBA может работать медленнее в 2008 по сравнению с 2006 или 2007 версиями.
> остальным спорщикам: попробуйте на VBA накатать аналог этих лиспов (достаточно простые, кстати, прожки): Код:
Код:
![]() --- ActiveX-подход необходим при работе с другим файлом (через ObjectDBX-интерфейс, например; или если файл открыт в этой же сессии AutoCAD'a); он практически незаменим при работе со словарями, записанными на примитив; он очень удобен при работе "внутрь" блока. Но попробуйте через activex (или VBA, что то же самое в принципе), например, добавить атрибут в конкретное вхождение блока, как это сделано у Alaspher'a. Ведь фига с два получится! --- Добавлено: Чего-то я упустил, что на посты Димаса не ответил. Прошу прощения, пытаюсь исправиться ![]() Цитата:
![]() Приложи задачку полностью - может, чего и придумается.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
джедай Регистрация: 31.01.2005
Магадан
Сообщений: 460
![]() |
а в чем фишка то? скопировал кусок с хелпа.. чуть поправил, сам писать чет не могу в конце рабочего дня) так что извиняюсь за корявый код)
Код:
to kpblc эт беспредметный спор - "а слабо на бейсике сделать как на лиспе") считаю бейсик лучше только потому что программировать на нем можно и на других платформах - соответственно больше возможностей для применения и можно ссылочку на инф-ю о более медленной работе VBA? имею в виду версию для 32 автокада) в крайнем случае очень легко перейти на VB.NET быстродействие даже в 64 битной автокаде 2008 останется таким же то бишь быстрее лиспа) |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Не очень хотелось эту тему из недр выволакивать, но тем не менее.
К вопросу о быстродействии. Мне постоянно приходится воевать со всякими идиотскими слоями, планы приходят от архитекторов, преобразованные из Архикада. Был тут у нас объект весьма внушительных размеров. Соответственно, в чертеже слоев около сотни, и блоков несколько тысяч. Экспрессовская комадна laydel при удалении порядка 20 слоев повисла на ПОЛЧАСА. Не знаю, может там алгоритм кривой, но с досады написанный аналог на VBA с аналогичной работой справился за 15 СЕКУНД! Однако, разница. :shock: |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,599
|
> den001: В экспрессах написаны универсальные проги. Учитывающие тьму параметров. Естественно, что код, написанный для конкретной ситуации, будет быстрее и проще. Например, надо назначить текстовый стиль. Ты понимаешь, что у тебя в данном чертеже только тексты и больше ничего. Поэтому пишется нечто наподобие (алгоритм описываю словам): выбрать все тексты и в цикле каждому установить новый стиль. Для универсального решения потребуется:
1. Разморозить и разблокировать все слои 2. Выбрать тексты, многострочные тексты, атрибуты, размеры и вхождения блоков с непостоянными атрибутами; исключить внешние ссылки из набора. 3. Назначить новый текстовый стиль примитиву. Возможно, потребуется дополнительно вычислять коэффициент изменения ширины для сохранения занимаемого текстом места. Для многострочных текстов придется дополнительно устанавливать ключ \W. Для однострочных и атрибутов - устанавливать выравнивание в Fit, что автоматически приводит к пересчету InsertionPoint и TextAlignmetnPoint. 4. Почистить файл от текстовых стилей. 5. Восстановить состояние слоев. А какая, казалось бы, простая задачка... В твоем конкретном случае я бы выбрал блоки, имеющие только одно вхождение и разбил бы их; потом почистить файл (и так либо несколько раз, либо до тех пор, пока не получится, что блоков-то с одним вхождением и нет); потом пройтись по всем описаниям блоков и установить цвет, тип и вес линии ByBlock; опять очистка. При выполнении таких действий я б постарался не забывать про атрибуты (хотя их при импорте из ArchiCAD'a почти никогда не бывает ![]() > Spy: Эт проблема не лиспа, а тех, кто пишет arx-дополнения для работы с 3Д. Там зачастую у создаваемых примитивов попросту нет dxf-представления. Только объектная модель. Но разве это препятствие? Междумордие, кстати, сделать можно - надо просто капитально голову поломать. Что лично мне делать постоянно попросту лень (мне проще VB в руки взять ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |