dcl1214 发表于 2024-4-15 09:23:33

关于良好代码习惯有助于编译fas以及程序稳定的讨论

本帖最后由 dcl1214 于 2024-4-17 12:09 编辑

2015年我开始对cad的【链接】【优化】【内部】【独立空间】【本地】感兴趣(持续几年时间),发现要想全部支持这些编译选项,必须有良好的代码习惯,如果没有良好的代码习惯,所编译出来的fas反编译后直接就是源码,如果养成了良好的代码习惯,编译出来的fas不仅【执行速度快】【函数变成了流水码】【体积缩小到三分之一】(setq后面的变量名字也变成了流水码)(cad自己的很多函数也会改成流水码),而且不容易反编译,即便是反编译出来,代码也失去了可读性了,本帖子重点是讨论良好代码习惯便于编译,大家遇一起讨论

你有种再说一遍 发表于 2024-4-15 16:42:38

本帖最后由 你有种再说一遍 于 2024-4-15 18:15 编辑

用代码解决代码的事情,直接制作一个lisp编译器,
然后启动编译之后把函数名换成流水号...
还能直接把lisp编译成c++或者c#的dll....

dcl1214 发表于 2024-4-15 09:25:39

本帖最后由 dcl1214 于 2024-4-15 09:47 编辑

mapcar 后面的 lambda之前必须添加function
例如:

(mapcar      '(lambda (a)
         (tt a);tt是自定义函数
         )
      (list 1 2 3 4 5)
)
;以上的tt编译后就是源码,因为一撇是解析执行,所以,cad编译的时候不做流水码处理

;以下的tt编译后不是源码了,因为去掉了一撇,变成了【优化链接】,其函数被cad改成了流水码
(mapcar      (function (lambda (a)
                  (tt a)                ;tt是自定义函数
                  )
      )
      (list 1 2 3 4 5)
)


dcl1214 发表于 2024-4-15 09:28:53

本帖最后由 dcl1214 于 2024-4-15 10:28 编辑

全局变量慎用

(SETQ *ACAD* (vlax-get-acad-object)
      *DOC*(vla-get-ActiveDocument *ACAD*)
      *MS*   (vla-get-modelSpace *DOC*)
      *PS*   (vla-get-paperSpace *DOC*)
)
;改成以下写法:

(SETQ ACAD (vlax-get-acad-object))
(SETQ DOC (vla-get-ActiveDocument (vlax-get-acad-object)))
(SETQ MS (vla-get-modelSpace
         (vla-get-ActiveDocument (vlax-get-acad-object))
         )
)
(SETQ PS (vla-get-paperSpace
         (vla-get-modelSpace
             (vla-get-ActiveDocument (vlax-get-acad-object))
         )
         )
)
;如果以上全局变量被很多地方引用,建议在每一个defun函数内部单独输入,且添加到/后面做成局部变量,编译后,cad可能会改成流水码,连cad自己的函数都可能变成流水码




Bao_lai 发表于 2024-4-15 09:28:38

dcl1214 发表于 2024-4-15 09:25
mapcar 后面的 lambda之前必须添加function

杜老板举个具体的例子么?

dcl1214 发表于 2024-4-15 09:35:21

本帖最后由 dcl1214 于 2024-4-15 09:37 编辑

set尽可能改成setq
例如:
(mapcar 'set(list 'a 'b)(tt (list (cons "名称" "玉玺")(cons "颜色" ""))))
;改成以下写法
(setq s(tt (list (cons "名称" "玉玺")(cons "颜色" ""))));编译后变量s可能会被改成流水码
(setq a(car s));编译后变量a可能会被改成流水码
(setq b(cadr s));编译后变量b可能会被改成流水码

叮咚 发表于 2024-4-15 09:37:45

dcl1214 发表于 2024-4-15 09:28
以下写法不可取,尽可能不要用
(SETQ *ACAD* (vlax-get-acad-object)
      *DOC*(vla-get-ActiveDocum ...

那写成什么样好呢?

丶吟游诗人灬 发表于 2024-4-15 09:50:38

感觉能跑就行不追求这些

baitang36 发表于 2024-4-15 09:51:39

很值得学习。

ssyfeng 发表于 2024-4-15 09:51:51

dcl1214 发表于 2024-4-15 09:28
全局变量慎用

我也不喜欢用全局变量,不过很多用户喜欢记住上次操作的一些值,为下次命令启动时减少输入。所以有时也没办法

ssyfeng 发表于 2024-4-15 09:58:08

本帖最后由 ssyfeng 于 2024-4-15 10:00 编辑

baitang36 发表于 2024-4-15 09:51
很值得学习。
大侠,你对fas了解的这么深入,也分享下心得呀
页: [1] 2 3
查看完整版本: 关于良好代码习惯有助于编译fas以及程序稳定的讨论