2008-10-07 33 views
15

Tôi là một lập trình viên Java khá kinh nghiệm, đang làm khá nhiều thứ Win32 trong vài năm qua. Chủ yếu là tôi đã sử dụng VB6, nhưng tôi thực sự cần phải chuyển sang một cái gì đó tốt hơn.Delphi so với C++ Builder - Lựa chọn tốt hơn cho lập trình viên Java Làm Win32

Tôi đã dành một tháng để chơi với Delphi 2009. Tôi thích công cụ VCL GUI, Delphi có vẻ phù hợp hơn với các cuộc gọi Windows API hơn VB6, tôi thực sự thích thực tế là nó tốt hơn nhiều ở OO hơn VB6, và Tôi thích khung kiểm thử đơn vị đi kèm với IDE.

Nhưng tôi thực sự đấu tranh với thực tế là không có bộ thu rác được sử dụng rộng rãi cho Delphi - phải giải phóng mọi đối tượng theo cách thủ công hoặc sử dụng giao diện cho mọi thứ dường như có tác động khá lớn đến cách bạn có thể làm mọi thứ hiệu quả một cách hướng đối tượng. Ngoài ra tôi không đặc biệt quan tâm đến cú pháp, hoặc thực tế là bạn phải khai báo tất cả các biến ở trên cùng của một phương thức.

Tôi có thể xử lý Delphi, nhưng tôi tự hỏi nếu C++ Builder 2009 có thể là một lựa chọn tốt hơn cho tôi. Tôi biết rất ít về C++ Builder và C++, nhưng sau đó tôi biết rất ít về Delphi hoặc. Tôi biết có rất nhiều thứ với ngôn ngữ C++, nhưng tôi nghi ngờ chỉ cần biết một tập con của nó để hoàn thành một cách hiệu quả ... Tôi đã nghe nói rằng C++ ngày hôm nay hiệu quả hơn nhiều so với C++ 10 năm trước.

Tôi sẽ chỉ phát triển mới vì vậy tôi sẽ không cần phải nắm vững mọi khía cạnh của ngôn ngữ C++ - nếu tôi có thể tìm thấy tương đương với từng tính năng ngôn ngữ của Java, tôi sẽ đủ hạnh phúc. Tôi có thể bắt đầu xem xét những thứ nâng cao hơn một chút. (Xin lỗi nếu điều đó nghe có vẻ hơi ngây thơ - nếu vậy hãy đặt tôi thẳng!)

Vì vậy, đối với một lập trình viên Java mới cho cả Delphi và C++ Builder, bạn sẽ xem đây là lựa chọn tốt hơn cho phát triển sản xuất Win32 exes và dll, và tại sao? Những gì bạn thấy là những ưu và khuyết điểm của mỗi?

+1

Tại sao không phải là C# và .NET? – Alan

+1

Tôi đang lập trình một trình bổ sung Excel khá phức tạp và kích thước tải xuống nhỏ và cài đặt dễ dàng là các ưu tiên cao. Nhiều như tôi thích giao diện của C#, và tôi đã xem xét nó một chút, tôi nghĩ rằng tôi muốn được tốt hơn với một cái gì đó mà biên dịch mã nguồn gốc cho dự án này. –

+0

Có lẽ bạn đã xem xét khả năng viết addin bằng VBA? Tôi đánh giá cao rằng đây là một ngôn ngữ/môi trường khá kinh tởm để phát triển, nhưng có những lý do nào khác khiến bạn không thể thực hiện addin bằng VBA không? –

Trả lời

20

Delphi hoặc C++ Builder - đó là một sự lựa chọn khó khăn!

Như bạn đã biết, về cơ bản chúng rất giống nhau, từ quan điểm IDE và RAD.

Ưu điểm và nhược điểm của từng loại - không phân biệt nền - hơi giống như thế này.Cả hai đều chia sẻ một thiết kế và khuôn khổ biểu mẫu RAD 2 chiều tuyệt vời, lý tưởng cho việc phát triển Windows nguyên bản.

Delphi:

  • CHO: Lớn, năng động, cộng đồng nhiệt tình
  • CHO: Delphi 2009 là phiên bản tốt nhất trong nhiều năm
  • CHO: Delphi "đơn vị" làm cho nguồn C/tiêu đề các cặp tệp có vẻ cổ xưa
  • CHỐNG LẠI: Không có sự hủy diệt tự động khi đối tượng rời khỏi phạm vi, do đó rất nhiều 'cuối cùng trong mã của bạn
  • CHỐNG LẠI: Ngôn ngữ có thể' dài dòng ', đó là vấn đề về hương vị
  • CHỐNG CHỈ ĐỊNH: Sử dụng thư viện hoặc thư viện của bên thứ ba bằng các ngôn ngữ khác (đặc biệt là C) yêu cầu Delphi tập tin tiêu đề được viết

C++ Builder

  • CHO: C++ Builder 2009 có lẽ là phiên bản tốt nhất bao giờ hết
  • CHO: RAII thành ngữ đơn giản hoá quản lý bộ nhớ cực kỳ
  • FOR: Mẫu cực kỳ hữu ích và mạnh mẽ, ngay cả khi việc triển khai C++ Builder có một số lỗi với chúng.
  • FOR: Hỗ trợ BOOST và các thư viện mẫu hiện đại khác (mặc dù hỗ trợ Boost không phải là 100%)
  • FOR: Great interop with Delphi có nghĩa là hầu hết các thành phần Delphi có thể dễ dàng sử dụng.
  • ĐỐI VỚI: Dễ sử dụng với các thư viện/thư viện phần ba với tiêu đề C/C++.
  • FOR: C++ có thể trông đẹp hơn trên CV so với Delphi.
  • CHỐNG CHỈNH: CB2009 là "chỉ có unicode" - tác động của việc này đối với tính di động mã khác nhau và ít được suy nghĩ hơn cho Delphi
  • CHỐNG: C++ Builder user-base nhỏ hơn nhiều so với Delphi. Có thể 20% hoặc ít hơn.
  • ĐỐI VỚI: Borland/Inprise gần như đã giết chết BCB cách đây vài năm, và nó chỉ được hồi sinh sau những nỗ lực lớn của cộng đồng. (Tuy nhiên, cam kết Codegear/Embarcadero có vẻ ấn tượng)
  • CHỐNG LẠI: C++ Builder không nằm trên cùng của đống trong Codegear.
  • ĐẠI LÝ: Nhà cung cấp thành phần bên thứ ba không phải lúc nào cũng hiểu/hỗ trợ C++ Builder

Đó là về nó. Chỉ cần để nhà nước vị trí của tôi, tôi là một người dùng BCB2007/2009 hạnh phúc (kể từ BCB5), và tôi cũng thường xuyên sử dụng Delphi. Một vài năm trước, tôi coi là một chuyển đổi từ C + + để Delphi, nhưng thiếu thành ngữ RAII là một trong những điều mà tôi thấy khó khăn để đến với các điều khoản.

+0

Rất cám ơn Roddy - trông giống như một sự so sánh cân bằng, tốt. Thành ngữ RAII là một điều mới đối với tôi, nhưng từ một chút đọc nó trông giống như tôi chỉ có thể làm việc vì C++ tự động phá hủy các đối tượng được cấp phát stack. Có vẻ tốt hơn nhiều so với Tạo/thử/cuối cùng/miễn phí cho mỗi đối tượng ngăn xếp Delphi –

+0

Ngẫu nhiên, bạn đã bao giờ thử sử dụng bộ thu gom rác với trình dựng C++ chưa? –

+0

@MB: Không, tôi chưa thử dùng GC của Barry với C++ Builder. Heap quản lý với Delphi so với C + + có thể là một khu vực khó khăn, vì vậy tôi mong đợi nó có thể cần một số tinh chỉnh để làm việc. – Roddy

2

Tất nhiên java sintax là giống như C++ hơn như delphi, nhưng tôi nghĩ rằng mô hình đối tượng tương tự hơn để delphi:

  • thừa kế duy nhất. Giao diện tồn tại nhưng giống như COM hơn là giao diện java.
  • đối tượng được cấp phát trên heap và truy cập bằng cách tham khảo

bạn có thể tìm thấy một bài báo so sánh ba ngôn ngữ here

+0

Cảm ơn Giacomo. Giấy đó trông khá hữu ích, mặc dù nó được cập nhật lần cuối vào năm 1997 vì vậy tôi tự hỏi nếu mọi thứ đã thay đổi nhiều kể từ đó? Với Boost, ví dụ cho C++ ... Tôi biết rất ít về Boost, nhưng tôi đã thấy mọi người nói về nó như là một "nền tảng của C++ mới", hoặc một cái gì đó như thế. –

7

Delphi sẽ dễ dàng hơn rất nhiều để bạn có thể đi đến thỏa thuận với, chắc chắn bạn có để quản lý bộ nhớ của bạn, nhưng nó rất đơn giản

MyObj = TMyObj.Create; 

try 
    MyObj.DoSomething; 
finally 
    MyObj.Free; 
end 

Trong Delphi tất cả các đối tượng của bạn được cấp phát trên heap, vì vậy nguyên tắc rất đơn giản nếu bạn tạo nó, bạn giải phóng nó.

C++ với ngăn xếp dựa trên đống và heap có nghĩa là bạn có nhiều hơn một chút để tìm hiểu và nhiều phạm vi hơn để gặp rắc rối.

+1

Tôi nghĩ rằng tôi tốt với sự hiểu biết giải phóng các đối tượng, tôi chỉ tìm thấy nó một chút đau đớn để phải suy nghĩ về những gì đối tượng sẽ sở hữu những gì vv khi tôi đang thiết kế mọi thứ. Trình tạo C++ mới nhất có trình thu gom rác khá hay để giải phóng thủ công thường không cần thiết? –

+0

Không, trình xây dựng C++ không có bộ thu gom rác, tôi nghĩ rằng có một số giải pháp của bên thứ 3, nhưng thành thật mà bạn học tốt hơn về cách quản lý bộ nhớ của bạn trước tiên bằng bất kỳ ngôn ngữ nào tạo mã gốc trước khi bắt đầu đường dẫn một bộ thu gom rác bổ sung. –

+0

Chúc mừng Tim J - Tôi đã nghe bộ sưu tập rác đang trở thành một phần của tiêu chuẩn C++ sớm, nhưng điều đó có nghĩa là trong thực tế tôi không biết (là một chút không biết gì về C++). –

9

Đi với Delphi và bạn có thể sử dụng Boehm Garbage Collector API được viết bởi Barry Kelly để bạn có thể có bộ sưu tập rác ở Delphi. Barry đã viết điều này trước khi ông làm việc cho CodeGear như một kiến ​​trúc sư biên dịch. Nó có vấn đề với các ứng dụng thực sự lớn, và rất có thể sẽ không làm việc với 64-bit Delphi. Ông nói về nó một chút trong podcast interview này.

Thậm chí nếu bạn không sử dụng trình quản lý bộ nhớ thu thập rác đó, tôi vẫn khuyên bạn nên sử dụng Delphi trên C++. Ưu điểm duy nhất C++ cung cấp cho bạn để phát triển chung là cú pháp cú đúp xoăn. Nếu bạn không nhớ cú pháp Delphi, thì đối với hầu hết mọi thứ bạn sẽ thấy nó tốt hơn. Cấp C + + Builder có toàn bộ VCL và RTL Delphi, vì vậy nó không phải là xấu như Visual C++, nhưng tôi vẫn nghĩ Delphi sẽ là một lựa chọn tốt hơn.

Đối với các bổ trợ Excel (như bạn đã đề cập trong nhận xét của bạn), tôi khuyên bạn nên sử dụng trình xây dựng Delphi trên C++ vì nó có hỗ trợ COM tốt hơn (mà tôi tin bạn cần cho các bổ trợ Excel).

+2

Tuyệt vời, cảm ơn Jim. Tôi nghĩ rằng Garbage Collector, tôi chỉ bị gạt bỏ bởi thực tế là tôi khó có thể tìm thấy đề cập đến bất cứ ai thực sự sử dụng nó, hoặc cho dù nó tương thích với các phiên bản gần đây. Tôi chắc chắn sẽ kiểm tra podcast bạn đề cập - đó không phải là điều tôi muốn gặp. –

+0

Đó là một podcast rất thông tin. Tôi khuyên mọi người quan tâm đến Garbage Collector đó để nghe. –

5

Cá nhân, tôi nghĩ có những cân nhắc quan trọng khác ngoài sự khác biệt giữa các ngôn ngữ. Ví dụ, IDE Delphi hoàn toàn freakin 'tuyệt vời để xây dựng GUI theo kiểu WYSIWYG. Tôi đã không sử dụng IDE builder C++, nhưng tôi sẽ thực sự ngạc nhiên nếu nó có một trình xây dựng GUI tốt như Delphi.

Mặc dù bề ngoài của cú pháp C++ trông giống như cú pháp của Java, mô hình đối tượng của Delphi thực sự gần gũi hơn với Java. Mặc dù con trỏ tồn tại trong Delphi, trong các tham chiếu đối tượng thực hành (giống như trong Java) được sử dụng 99% thời gian. Ngay cả trong C++ hiện đại, tôi không nghĩ rằng nó có thể tránh được con trỏ. Không phải là có bất cứ điều gì sai trái với con trỏ, nhưng trong thực tế ....

Trên một lưu ý cá nhân, tôi chủ yếu là một anh chàng Java những ngày này, nhưng tôi đã dành 2 năm làm việc với Delphi và sẽ trở lại với nó trong một nhịp tim. Ngược lại, tôi chỉ có kinh nghiệm rất hạn chế với C++ và muốn vệ sinh nhà vệ sinh hơn là trở về ngôn ngữ đó :)

+0

LOL - phản hồi tuyệt vời, cảm ơn Don. Tôi rất vui khi tránh các con trỏ ở bất cứ nơi nào có thể, vì vậy đó là một dấu cộng nhất định cho Delphi. Nhưng tôi nghĩ rằng các công cụ xây dựng GUI là như nhau cho C + + builder như cho Delphi (mặc dù tôi đã không thực sự thử nó trong C + + builder). –

+1

@Don: "Tôi sẽ ngạc nhiên nếu nó có trình xây dựng GUI đẹp như Delphi." Hãy ngạc nhiên. Nó giống hệt nhau, ngoại trừ nó tạo ra mã C++ thay thế. Bạn có thể sử dụng hầu hết các thành phần Delphi bên thứ 3, tái sử dụng các biểu mẫu Delphi trong các ứng dụng C++, v.v. Bạn thậm chí có thể thêm các tệp Delphi .pas vào các dự án C++ của bạn – Roddy

1

"Ví dụ, IDE Delphi hoàn toàn tuyệt vời để xây dựng GUI theo kiểu WYSIWYG. đã không sử dụng IDE builder C++, nhưng tôi thực sự ngạc nhiên nếu nó có một trình xây dựng GUI tốt như Delphi. "

Thực ra trình soạn thảo GUI C++ Builder chính xác là cùng một trình soạn thảo và hoạt động theo cùng một cách. Nó thật tuyệt vời.

. Net có số lượng lớn các lớp, giống như Java. C# có cú pháp tương tự như Java và vì thư viện lớp lớn hoạt động khá giống nhau. Và đó là một môi trường hoàn toàn phù hợp để lập trình. Nhưng thật ra Delphi là một ngôn ngữ dễ chịu hơn nhiều, IDE và môi trường chung để làm việc cùng. C# được thiết kế bởi cùng một người đã thiết kế Delphi và "cảm thấy" rất giống nhau theo nhiều cách, vì vậy đừng cho rằng vì Delphi biên dịch thành mã gốc (mặc dù bạn cũng có thể sử dụng Delphi .Net) về cơ bản thì khó sử dụng hơn. Nó không phải là, ở tất cả.

Đề xuất cá nhân của tôi dành cho Delphi, vì đó là một ngôn ngữ tuyệt vời. Tuy nhiên nếu bạn quan tâm đến việc học C++, C++ Builder có lẽ là cách tốt nhất bạn có thể làm.

2

Tôi nghĩ rằng nếu bạn đi với Delphi bạn sẽ tìm thấy nó dễ dàng hơn hơn sau vài lần sử dụng, cũng có thể nó đã hỗ trợ của bên thứ ba và một số tính năng được giới thiệu trong Delphi trước C++ Builder

cũng đọc blog này từ cựu Java và bây giờ anh chàng đằng sau hầu hết các cơ sở dữ liệu và làm việc datasnap trong Delphi Steve Shaughnessy, về kinh nghiệm của mình về lập trình Delphi sau 10 năm Java :-) http://blogs.codegear.com/steveshaughnessy/2006/12/03/30193

+0

Liên kết hữu ích đó - cảm ơn. –

1

Tôi lập trình chuyên nghiệp tại Delphi trong 10 năm qua và có kiến ​​thức tốt về C++. Tôi sẽ đi đến con đường Delphi. Cú pháp cũng đơn giản hơn nhiều và quản lý bộ nhớ. Đó GC cho bản địa Delphi Tôi chưa nghe nói ... Mặc dù tôi không thích nhiều bẫy trên mã Delphi.Net giới thiệu vì.NET gc, tôi không có nhiều thích gcs ;-)

+1

Chúc mừng Fabricio! Tôi sẽ không tranh luận với ý kiến ​​của bạn về người thu gom rác, nhưng sau nhiều năm không gặp rắc rối với Java, tôi rất ngưỡng mộ họ ;-) –

+0

Cơ chế sở hữu của VCL phục vụ tôi trong nhiều năm và không thất bại. Thao tác trực tiếp của bộ nhớ luôn luôn phiền hà (vì đôi khi nó cần thiết khi acessing WinAPI). Khiếu nại tôi có về .NET gc là thiếu một móc được gọi tự động khi đối tượng cuối cùng bị phá hủy. –

1

Một điều tôi quên đề cập đến trước đây:

Từ góc độ chi phí, bạn không thực sự cần để lựa chọn. Mua gói RAD Studio và với chi phí thêm khiêm tốn trên một ngôn ngữ riêng lẻ, bạn sẽ có được cả cá tính Delphi C++ Builder trong cùng một IDE. Và, điều đáng nói đến là gói C++ Builder bao gồm trình biên dịch Delphi, và bạn có thể viết/thêm các tệp Delphi .pas và bao gồm chúng như là một phần của các dự án C++ của bạn.

+0

Oh thân yêu, tôi đã nhận ra rằng tôi hơi say và mua gói Delphi 2009 một mình, khi tôi nghĩ C + + Builder đã được đóng gói với nó ...Bây giờ tôi sẽ đưa đội ngũ hỗ trợ khách hàng của Embarcadero vào cuộc kiểm tra và xem đó có phải là "người bạn đời quá muộn" hay "chúng tôi rất vui được giúp bạn". –

+0

Giúp tôi trả tiền chênh lệch, và nhận được cả hai gói. Tôi hy vọng họ rất tốt về nó! –

+2

Cập nhật: họ rất hay về việc đó - họ đã hủy đơn hàng ban đầu của tôi và tôi đã đặt một đơn đặt hàng mới để nâng cấp. Cũng giống như tôi mong đợi thực sự, nhưng bạn không bao giờ biết cos một số công ty dường như đi ra khỏi con đường của họ để được vụng về/rác. Tôi rất vui khi thấy Embarcardero là những người tốt mặc dù :) –

6

Sau khi làm việc với các biên tập viên Borland C và C++ từ BCC 4.1/DOS và Delphi từ 3.0 đến 2007, tôi có thể cho bạn biết một cách trung thực rằng bạn đang ở trong một cuộc phiêu lưu tuyệt vời. Chuyển từ C/C++ sang Borland's Builder và RAD IDE là một sự thay đổi mô hình đáng kể (và đường cong học tập) từ VC++, C++ và .NET của Microsoft (đã sử dụng VC từ bản phát hành MS-DOS đầu tiên).

Lựa chọn giữa C++ và Delphi là một trong những điều tôi đề nghị bạn thực hiện sau khi bắt đầu làm ướt một vài dự án cỡ nhỏ đến trung bình bằng cả hai ngôn ngữ. Tôi bắt đầu lập trình C và sau khoảng năm năm chuyển sang Delphi (V3.0) khi VCL chỉ làm cho lập trình Windows trở nên dễ dàng hơn và hiệu quả hơn nhiều. Được cảnh báo, Delphi là một ngôn ngữ quyến rũ cho các lập trình viên đến từ các ngôn ngữ khác như COBOL, FORTRAN, VisualBasic bởi vì cú pháp và các quy tắc mã của nó thực thi một loại kỷ luật để giữ một trong những rắc rối. Sức mạnh kim loại thô và c của C làm cho nó trở thành một ngôn ngữ lập trình hệ thống tuyệt vời (trình điều khiển thiết bị, mã O/S, lập trình nhúng thời gian thực), nhưng trong tay thiếu kinh nghiệm nó có thể cắn bạn.

Công cụ tạo C++ của Borland (VCL của Delphi được thêm vào trình biên dịch C++) mất nhiều cạnh sắc nét C++ và là ngôn ngữ yêu thích thứ hai của tôi. Kể từ Borland thêm .NET hỗ trợ cho cả hai ngôn ngữ có một lập luận mạnh mẽ để sử dụng Builder thay vì VC++ cho lập trình MS framework. Mặc dù C# có một số lượng tốt 'thân thiện' được xây dựng so với C++, nếu tôi vẫn muốn tiếp tục gắn bó với Delphi hoặc Builder nếu tôi mới bắt đầu.

Để tìm hiểu các dây giềng, để tạo mẫu và các chương trình khái niệm nhanh chóng, đơn giản không phải là một ngôn ngữ ngoài đó có thể đánh bại Delphi đặc biệt với VCL và các thành phần của bên thứ ba. Không cường điệu, chỉ là sự thật.

+0

Hoàng tử Riley, tôi sẽ xem đó như một lá phiếu cho Delphi. Đặc biệt hữu ích vì có vẻ như bạn đã sử dụng khá nhiều. Cảm ơn! –

2

Không có gì tôi đã không thể làm trong C + + VCL mà tôi không thể làm với Delphi VCL và hầu như tất cả các thành phần Delphi làm việc tốt trong C++ Builder. Kể từ khi tôi chương trình cho cả Windows và UNIX, C++ là xách tay hơn.

Nếu bạn sử dụng C++ STL hoặc thư viện được thiết kế khác cho thùng chứa của bạn, loại thu gom rác trở thành điểm tranh luận, và nếu không thì GC thủ công không khó (một cách nhanh chóng học thói quen tốt). một GC). Miễn là bạn sử dụng RAII nếu có thể, hãy quản lý bộ nhớ của bạn trong các thùng chứa, hãy rõ ràng về quyền sở hữu đối tượng và chỉ sử dụng con trỏ làm tài liệu tham khảo (tất cả những điều bạn cũng nên làm bất kể ngôn ngữ), GC thực sự không nên là vấn đề.

1

Nếu bạn định thực hiện nhiều chương trình Windows, hãy tìm hiểu C++. Bạn sẽ học tiếng Đức để chuẩn bị cho một chuyến đi đến Pháp? C/C++ là ngôn ngữ mẹ đẻ của Windows API. Đối phó với cấu trúc dữ liệu WinAPI và các cuộc gọi đơn giản hơn rất nhiều trong C/C++. Với RAD, tôi đã sử dụng MSVC trong khoảng 13 năm và tôi có thể kết hợp với nhau một ứng dụng GUI nhanh như bất kỳ ai sử dụng trình soạn thảo GUI của Visual Studio.

Các vấn đề liên quan