Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
Detailing

[Thảo luận] Nên dùng ngôn ngữ lập trình nào cho AutoCAD?

Các bài được khuyến nghị

Có rất nhiều ý kiến cũng như thắc mắc nhất là với những người bước đầu làm quen với thú vui "Lập trình điều khiển AutoCAD theo ý mình" :D Vậy các fan của các ngôn ngữ lập trình có thể vào đây để bày tỏ ý kiến của mình cũng như dẫn chứng điểm mạnh điểm yếu của ngôn ngữ đó. Mình thì hay táy máy nên có thử qua vài ngôn ngữ và cũng tham khảo nhiều nơi và sau đây là kết quả cũng như ý kiến cá nhân:

 

1. Script:

  • Điểm mạnh: Dễ viết nhất
  • Điểm yếu: Không có IDE, ko debug, không tương tác với user

2. Lisp

  • Điểm mạnh:
    • Dễ viết và ngắn gọn (có IDE "VLIDE")
    • Có nhiều resource (sample code trong developer help và trên internet)
    • Có khả năng tác động đến hầu hết các đối tượng của bản vẽ
    • Có thể chạy trực tiếp trong command hay trong CUI, menu
    • Không cần quản lý bộ nhớ (ít crash do lỗi bộ nhớ)
    • có thời gian sử dụng dài
    • Có thể tạo các hàm con, module dùng chung

    [*]Điểm yếu:

    • Có IDE nhưng IDE còn đơn giản, thiếu nhiều Addin
    • DCL đơn giản và khó sử dụng
    • hổ trợ Unicode kém (Ketxu)
    • Khó khăn trong vấn đề thay đổi, update code
    • lập trình cấu trúc (không có kiểu Object)
    • Tốc độ khá chậm
    • Khả năng tương tác với các lisp hay chương trình khác bị giới hạn (chỉ trao đổi dữ liệu bằng text)
    • Không thể dùng lisp trong các công việc khác

3. VBA

  • Điểm mạnh:
    • Có IDE thông minh
    • Có nhiều resource (sample code trong developer help và trên internet)
    • Có khả năng tác động đến hầu hết các đối tượng của bản vẽ
    • VBA - winform dễ dàng tạo giao diện
    • Có kiểu đối tượng Object
    • Không cần quản lý bộ nhớ (ít crash do lỗi bộ nhớ)
    • có thời gian sử dụng dài
    • Có thể tạo các hàm con, module dùng chung
    • Code được "nhúng" vào file DWG
    • Có thể dùng VBA cho các chương trình khác: Word, Excel, Access, ...

    [*]Điểm yếu:

    • Không còn được Microsoft phát triển
    • VBA - winform bị giới hạn số lượng cotrol
    • hổ trợ Unicode kém (Ketxu)
    • Dễ dàng mở khóa code password
    • Tốc độ khá chậm (chạy out of process (tương tự Late binding) trong hệ thống 64bits - rất chậm)
    • Phải sử dụng com Object trong vài trương hợp

 

4. NET (C#, VB .NET, F#, ..)

  • Điểm mạnh:
    • Có IDE thông minh, nhiều Addin -> dễ dàng khi coding
    • Lập trình OOP
    • Tạo giao diện rất tốt với win form hoặc wpf
    • Giao diện hỗ trợ tốt Unicode (Ketxu)
    • Có nhiều resource (sample code trong developer help và trên internet)
    • Có thể sử dụng tất cả .NET framework
    • Dễ dàng làm việc nhóm và chia sẻ tài nguyên
    • Cross platform
    • Tốc độ khá nhanh (nhưng ko bằng ARX)
    • Không cần quản lý bộ nhớ (nhưng có thể can thiệp)
    • Ngôn ngữ lập trình mới
    • Lập trình cấp thấp nhưng thông qua NET framework
    • Có thể ứng dụng kỹ năng lập trình trong ứng dụng ngoài AutoCAD

    [*]Điểm yếu:

    • Vấn đề bảo mật code
    • Tư duy lập trình mói OOP nên khó hơn so với lisp và VBA
    • Không thể unload Dll sau khi load vào AutoCAD
    • Không hỗ trợ custom entity

Đối với .NET cho AutoCAD thì chọn C#, VB .NET hay F# làm ngôn ngữ chính đây?

 

5. ARX

  • Điểm mạnh:
    • Có IDE thông minh -> dễ dàng khi coding
    • Lập trình OOP
    • Vẫn được hỗ trợ từ microsoft
    • Tác động đến tất cả các đối tương của AutoCAD
    • Code được dịch ra mã máy - bảo mật cao
    • Dễ dàng làm việc nhóm và chia sẻ tài nguyên
    • Lập trình cấp thấp, Tốc độ nhanh nhất
    • Tạo được custom entity
    • Có thể ứng dụng kỹ năng lập trình trong ứng dụng ngoài AutoCAD

    [*]Điểm yếu:

    • Tạo giao diện bằng MFC khó hơn so với .NET và VBA
    • Phải tự quản lý bộ nhớ
    • Tư duy lập trình mói OOP nên khó hơn so với lisp và VBA
    • Phụ thuộc vào platform 32bit hay 64bit
    • Thay đổi 3 năm 1 lần

Bạn nào thấy thiếu sót gì thì bổ sung thêm nhe.

Bạn nào có ý kiến khác thì đưa lên cùng thảo luận để mọi người có thể chọn được ngôn ngữ thích hợp cho bản thân

 

p/s: các bạn vui lòng không comment đại loại như: "Cám ơn", "bài viết có ích" hay đại loại như vậy dùm tránh làm loãng topic.

 

Thanks all!

  • Like 1
  • Vote tăng 4

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ket chưa có điều kiện học ARX nên k biết sao, mà sao bảo mật cao mà bị thịt hoài ^^

Mặc dù vote cho arx nhưng thôi, trong tay thạo cái gì ta dùng cái đấy, rồi dần dần học những cái khác

Bổ sung thêm khả năng tạo Custom Entity của Arx

- Khả năng hỗ trợ Unicode của Lisp, VBA kém

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ket chưa có điều kiện học ARX nên k biết sao, mà sao bảo mật cao mà bị thịt hoài ^^

Mặc dù vote cho arx nhưng thôi, trong tay thạo cái gì ta dùng cái đấy, rồi dần dần học những cái khác

Bổ sung thêm khả năng tạo Custom Entity của Arx

- Khả năng hỗ trợ Unicode của Lisp, VBA kém

ARX được biên dịch ra Machine code nên chỉ có professional dùng những tool chuyên dụng và rất nhiều Addin mới có thể pass check code hay lấy được serial hay patch dll dc nhưng không thể reverse code dc. trong khi VBA hay .NET (ko dc bảo vệ) có thể reverse ra hơn 90% code và ai cũng làm dc ko cần phải là professional :D.

Vấn đề AutoCAD bị thịt cũng có thể là do họ muốn "bị thịt".

p/s: bổ sung ý kiến của ket vào post #1.

Thanks!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

- Mình Vote cho "trùm cuối" Arx vì hầu hết phần mềm mình đang dùng đều viết bằng ngôn ngữ này. Các addin của Cad hình như cũng toàn viết bằng Arx nên chắc là nó xịn rồi.

- NET thì mình nghe mấy bạn mới ra trường ở cty ca tụng như một thứ gì đó rất sexy và thời thượng với dân lập trình, chưa có điều kiện được dùng phần mềm nào viết bằng ngôn ngữ này nên cũng tò mò. Thời của mình thì chỉ biết đến Lisp và VBA bởi nó dễ tiếp cận hơn Arx

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cũng có thời gian mình cũng thắc mắc: Sao ko dùng ARX (C++) mà lại dùng .NET và câu trả lời là: Khi nào cần 2 thứ quan trọng của ARX là (highest secure code và custom entity) thì mình sẽ dùng ARX còn lại xài .NET hết.

về mặt CNTT thì .NET ra đời để khắc phục các điểm yếu của COM mà C++ là 1 đại diện, vấn đề secure code ko còn là vấn đề tối quan trọng nữa mà cross platform mới là việc cần giải quyết, các ứng dụng chạy thông qua net và code server sẽ khó bị crack hơn khi chạy ở client.

Autodesk cũng chuyển dần các command của mình sang .NET (lệnh LA là 1 ví dụ) tuy nhiên shell của AutoCAD vẫn là COM :D

Trở lại vấn đề NET cho AutoCAD thì chọn C#, VB .NET hay F# làm ngôn ngữ chính đây? tuy nói rằng các ngôn ngữ trên có thể làm việc đồng thời với nhau nhưng syntax khác nhau khá nhiều cũng gây khó khăn cho việc coding. Mời các bạn cho ý kiến tiếp :D

p/s: Thêm ý kiến này vào post #1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Câu này thì do thói quen thôi. ai đã từng viết vb, vba thì đg nhiên vote cho vb, k thì ngc lại, chọn cái khác. một tjan ngắn ket cũng lan sang f# n k quen mắt, lại hay nhầm cú pháp, nên thôi.dù sao thì convert qua lại cũng ngon rồi, cứ có là xài

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình thì cứ mạnh cái nào dùng cái đấy (Trăm hay không bằng tay quen mà). Tuy nhiên mình chủ yếu dùng VBA, thi thoảng chôm ít lisp. Tuy nhiên thấy rằng : Lisp xử lý với tập đối tượng đơn giản và nhanh hơn VBA thì phải?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có rất nhiều ý kiến cũng như thắc mắc nhất là với những người bước đầu làm quen với thú vui "Lập trình điều khiển AutoCAD theo ý mình" :D Vậy các fan của các ngôn ngữ lập trình có thể vào đây để bày tỏ ý kiến của mình cũng như dẫn chứng điểm mạnh điểm yếu của ngôn ngữ đó. Mình thì hay táy máy nên có thử qua vài ngôn ngữ và cũng tham khảo nhiều nơi và sau đây là kết quả cũng như ý kiến cá nhân:

.......

2. Lisp

  • Điểm yếu:
    • DCL không hổ trợ Unicode (Ketxu)
    • Khó khăn trong vấn đề thay đổi, update code

1./ DCL hỗ trợ không tốt lắm -> Khác với cụm từ "không hỗ trợ"

 

2./ Vấn đề thay đổi update code theo mình nghĩ là khó khăn chung với tất cả các ngôn ngữ chứ không riêng gì Lisp, đặc biệt là các chương trình lớn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Xin góp 1 ý kiến nhỏ nãy sinh trong quá trình sử dụng DCL của lisp: kích cỡ các tile DCL không cố định mà tùy thuộc Win.

Giải thích: tôi viết DCL chạy trên win7 (cad2007), căn chỉnh cân đối xong, sau đó tải lên máy khác dùng WinXP (vẫn cad2007) thì kích cỡ các tile thay đổi rất khó chịu. Thấy rằng: các tile khi chạy trên Win7 rộng hơn trên WinXP.

Không biết dialoge của các ngôn ngữ khác có bị như vậy không?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1./ DCL hỗ trợ không tốt lắm -> Khác với cụm từ "không hỗ trợ"

 

2./ Vấn đề thay đổi update code theo mình nghĩ là khó khăn chung với tất cả các ngôn ngữ chứ không riêng gì Lisp, đặc biệt là các chương trình lớn

Tue_NV có thể giải thích rõ cụm từ "không tốt lắm" cho mình hiểu để update lại post #1 dc ko? vì theo mình biết DCL của lisp có từ khi unicode chưa ra đời thì mình nghĩ nó ko hỗ trợ, còn trường hợp nó thể hiện dc vài ký tự chắc do "hên" :D

Tue_VN hãy tìm hiểu về lập trình hướng đối tượng (Object-oriented programming) để biết tại sao nó được ra đời thì sẽ nghĩ lại câu thứ 2.

 

Xin góp 1 ý kiến nhỏ nãy sinh trong quá trình sử dụng DCL của lisp: kích cỡ các tile DCL không cố định mà tùy thuộc Win.

Giải thích: tôi viết DCL chạy trên win7 (cad2007), căn chỉnh cân đối xong, sau đó tải lên máy khác dùng WinXP (vẫn cad2007) thì kích cỡ các tile thay đổi rất khó chịu. Thấy rằng: các tile khi chạy trên Win7 rộng hơn trên WinXP.

Không biết dialoge của các ngôn ngữ khác có bị như vậy không?

Mình nghĩ nó tùy thuộc vào độ phân giải của màn hình nhưng các ngôn ngữ mình biết thì nó xài chung library với win nên có thể sẽ ko bị, DCL thì ko biết nó chạy như thế nào nên ... :D, tuy nhiên đó cũng là điểm yếu của lisp trong DCL đã đề cập.

Thanks!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tue_NV có thể giải thích rõ cụm từ "không tốt lắm" cho mình hiểu để update lại post #1 dc ko? vì theo mình biết DCL của lisp có từ khi unicode chưa ra đời thì mình nghĩ nó ko hỗ trợ, còn trường hợp nó thể hiện dc vài ký tự chắc do "hên" :D

Tue_VN hãy tìm hiểu về lập trình hướng đối tượng (Object-oriented programming) để biết tại sao nó được ra đời thì sẽ nghĩ lại câu thứ 2.

.....

Thanks!

1./ DCL có thể viết được vài chữ Tiếng Việt bằng Unicode. Chắc do hên! Có lẽ do mình đã hiểu nhầm về việc hiển thị Tiếng Việt trên DCL. Với lại Ketxu viết là "Khả năng hỗ trợ Unicode của Lisp, VBA kém" chứ không nói là "không hỗ trợ". "kém" với "không" là 2 cái khác nhau :D

 

2./ Chắc là mình sẽ tìm hiểu thêm về lập trình hướng đối tượng. Trước đây (lâu lắm rồi), mình có học Pascal, lập trình theo kiểu na ná giống VBNET, sau một hồi tìm hiểu thấy code của nó dài dòng, lê thê quá, nên dùng Lisp viết nhanh, gọn và sướng tay hơn nhiều :D

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

DCL của lisp có từ khi unicode chưa ra đời, nhưng cad đời sau (từ 2006) có hỗ trợ unicode nên dcl ăn theo unicode => có thể viết DCL bằng unicode (tiếng Việt) chứ nhỉ?

Tôi toàn viết DCL bằng unicode tiếng Việt. Nhưng thỉnh thoảng vẫn bị xui.

Mà đọc lại thì thấy Ket nói lisp hỗ trợ unicode kém chứ đâu phải nói DCL?

Hay tôi có hiểu nhầm điều gì đây chăng?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

DCL của lisp có từ khi unicode chưa ra đời, nhưng cad đời sau (từ 2006) có hỗ trợ unicode nên dcl ăn theo unicode => có thể viết DCL bằng unicode (tiếng Việt) chứ nhỉ?

Tôi toàn viết DCL bằng unicode tiếng Việt. Nhưng thỉnh thoảng vẫn bị xui.

Mà đọc lại thì thấy Ket nói lisp hỗ trợ unicode kém chứ đâu phải nói DCL?

Hay tôi có hiểu nhầm điều gì đây chăng?

Ý bạn ấy nói là gõ Tiếng Việt bằng Unicode trên DCL đó bác ạ, mình viết toàn xuyetj xuyet U (\\U....) :D

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

2./ Chắc là mình sẽ tìm hiểu thêm về lập trình hướng đối tượng. Trước đây (lâu lắm rồi), mình có học Pascal, lập trình theo kiểu na ná giống VBNET, sau một hồi tìm hiểu thấy code của nó dài dòng, lê thê quá, nên dùng Lisp viết nhanh, gọn và sướng tay hơn nhiều :D

Pascal vẫn là lập trình theo cấu trúc (tương tự như lisp), OOP được giới thiệu trong VB6 (OOP không hoàn toàn), C, C++, Java và sau này là .NET (C#, VB .NET, F#, ...), OOP với các khái niệm mới: tính trừu tượng (abstraction), tính kế thừa (inheritance), đa hinh (polymorphism) sẽ làm cho việc hợp tác cũng như mở rộng chương trình dễ dàng hơn rất nhiều.

Tue_VN tham khảo thêm link này về OOP: http://vi.wikipedia....6%B0%E1%BB%A3ng

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Câu này thì do thói quen thôi. ai đã từng viết vb, vba thì đg nhiên vote cho vb, k thì ngc lại, chọn cái khác. một tjan ngắn ket cũng lan sang f# n k quen mắt, lại hay nhầm cú pháp, nên thôi.dù sao thì convert qua lại cũng ngon rồi, cứ có là xài

 

Các ý sau chỉ là ý kiến cá nhân nhé :D

Tuy VB .NET và VB đều là VB nhưng nó khác nhau xa lắm rồi, chỉ có mấy từ khóa Dim, For, Do Loop,... là tương tự, cái hay của VB .NET là làm việc với com object dễ hơn do mặc định reference thư viện microsoft.VisualBasic và có thể xài late binding (.NET < 4) tuy nhiên theo ý kiến cá nhân mình thì code dài dòng (dễ hiểu) nhưng khi định nghĩa delegate hay lamda thì nó lại dài quá -> khó hiểu :) thời gian đầu mình cũng xài VB .NET, sau đó viết C++ lại thấy ngắn gọn, dễ hiểu -> xài luôn C#, C# 4.0 đã có dynamic C#3.5 trở xuống thì có thể reference microsoft.Visualbasic

Cái lợi của C# là syntax tương tự C++ (java, Object C, ...) nên bạn nào có ý định mon men với em ARX hay mấy cái kia thì nên xài cho quen :D , syntax của C thì ít từ khóa và từ khóa đơn giản hơn nên đỡ phải nhớ nhiều ví dụ: vòng lặp trong C chỉ có 3 cái là while, Do...while và For, Foreach trong khi VB có tới 6 cái (For, Foreach, Do ... loop, do ... until, do ... while, while ... do, while ... end) cũng do ngắn và đơn giản nên lại khó hiểu đối với các bạn mới làm quen :D.

Bạn nào thấy thiếu sót gì thì vào bổ sung nhé.

 

Link sau là 1 bài so sánh giữa C# và VB .NET: http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

 

Sẵn tiện có nhắc nói về Late Binding, vậy ta nên dùng Out of process (late binding) hay in process trong lập trình ứng dụng cho AutoCAD? Bạn nào biết về 2 cái này xin cho ý kiến tham khảo.

Thanks!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chủ đề cũ nhưng vẫn hay, cùng 1 nội dung (vẽ đoạn thẳng chẳng hạn) thì LISP ngắn gọn, VBA tường minh, rõ ràng, VB.NET dài dòng như cầu Thăng Long...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×