Lập trình đa nền tảng: C ++ so với Python [đã đóng]


11

Được rồi, để bắt đầu, tôi có kinh nghiệm làm lập trình viên nghiệp dư Obj-C / Ca cao và Ruby w / Rails. Đây là những điều tuyệt vời, nhưng chúng không thực sự hữu ích để viết các ứng dụng đa nền tảng (hy vọng một ngày nào đó GNUStep sẽ hoàn thành đủ để lần đầu tiên trở thành đa nền tảng, nhưng ngày đó không phải là hôm nay).

C ++, từ những gì tôi có thể thu thập được, vô cùng mạnh mẽ nhưng cũng là một khổng lồ xấu xí, có thể mất nửa thập kỷ trở lên để thành thạo. Tôi cũng đã đọc rằng bạn có thể rất dễ dàng không chỉ tự bắn vào chân mình mà còn thổi bay toàn bộ chân của bạn vì việc quản lý bộ nhớ hoàn toàn thủ công. Rõ ràng, đây là tất cả khá đáng sợ. Nó có đúng không?

Python dường như cung cấp hầu hết sức mạnh của C ++ và dễ dàng hơn nhiều để nhận với chi phí tốc độ. Sự hy sinh này lớn đến mức nào? Nó có ý nghĩa hay có thể bỏ qua?

Điều này sẽ giúp tôi viết các ứng dụng nhanh, ổn định, có độ tin cậy cao trong một khoảng thời gian hợp lý?

Ngoài ra, tốt hơn là sử dụng Qt cho giao diện người dùng của bạn hoặc thay vào đó duy trì các giao diện riêng, riêng cho từng nền tảng?

EDIT: Để rõ ràng hơn, có hai loại ứng dụng tôi muốn viết: một là ứng dụng cơ sở dữ liệu cực kỳ thân thiện và thuận tiện và loại còn lại, không nghi ngờ gì sẽ xuất hiện nhiều sau này, là trình chỉnh sửa thế giới 3D.


Bạn đang đặt câu hỏi mà câu trả lời sẽ mang tính chủ quan cao - IMHO không mang tính xây dựng, do đó bỏ phiếu để đóng. Bạn cũng hỏi ít nhất 4 câu hỏi khác nhau trong một. Làm thế nào có ai khác ngoài bạn biết nếu C ++ hoặc Python là lựa chọn tốt hơn cho bạn ? Tôi khuyên bạn nên thử xây dựng một ứng dụng GUI nhỏ bằng Python (sẽ mất không quá một ngày) và cùng một ứng dụng với C ++ và tự so sánh.
Doc Brown

Tôi đoán những gì tôi thực sự muốn hỏi được đưa ra những gì tôi đang tìm kiếm, đó là sự lựa chọn khách quan hơn?
John Wells

Bạn có thể cung cấp thêm một số bối cảnh - ứng dụng máy tính để bàn của bạn cần làm gì không? Rất nhiều môn toán? Năng suất ứng dụng? Cơ sở dữ liệu truy cập? Một trò chơi?
JBRWilkinson

Đã thêm chỉnh sửa để làm rõ tôi muốn làm.
John Wells

Tôi muốn chọn sử dụng cùng ngôn ngữ của hệ điều hành và / hoặc thư viện GUI. Bạn có thể thực hiện nhiều thao tác chuyên sâu hơn với UI dễ dàng hơn. Hãy thử mô phỏng một cái gì đó đơn giản như toàn màn hình (nhấn F11 trong trình duyệt của bạn) trong một lang cấp cao như Java hoặc C #. I nghỉ ngơi trường hợp của tôi. Các giải pháp bản địa có thể di chuyển đến nhiều loại thiết bị hơn các giải pháp cấp cao như java (trớ trêu thay).
Lord Tydus

Câu trả lời:


8

C / C ++ nhanh. Thực tế là, hầu hết các ứng dụng sẽ không cần hiệu năng đó với trạng thái của các phần cứng hiện tại. Cách thông thường là phát triển ứng dụng bằng ngôn ngữ cấp cao, như python, hơn là tối ưu hóa khi cần với các ngôn ngữ cấp thấp hơn, như C / C ++.

Python sẽ giúp bạn tăng năng suất lớn, dễ học và nhanh chóng hợp lý. Có Cython , bạn có thể sử dụng để viết các phần mở rộng C để sử dụng trong ứng dụng python của mình với cú pháp giống python để tăng tốc độ tắc nghẽn.

Đối với các ứng dụng GUI nổi bật, python có thể cung cấp cho bạn đủ hiệu suất. Và python có một thứ rất hay gọi là Kivy , khung GUI chạy trên Mac, Windows, Linux, Android và iOS và hỗ trợ cảm ứng đa điểm. Phần thưởng là, các phần quan trọng về hiệu suất được tối ưu hóa bằng C, sử dụng Cython.


1
Bạn có thể đúng về tốc độ. Kivy có vẻ rất có khả năng, nhưng liệu nó có thể vẽ các vật dụng gốc hệ thống không?
John Wells

Không, nó sử dụng công cụ đồ họa của riêng nó cho các widget, sử dụng OpenGL ES. Qt có thể sẽ là lựa chọn tốt nhất của bạn cho các widget gốc đa nền tảng.
Hakan Deryal

5

Tôi sẽ đi với Python, vì nó giúp bạn tăng năng suất lớn. Bạn vẫn có thể viết các phần của ứng dụng cần tốc độ trong C ++, có một dự án Cython cho phép sử dụng các thư viện C ++ trực tiếp trong Python. Nếu bạn lo ngại về bảo mật nguồn của mình, Cython cũng có thể giúp với điều đó, bạn có thể sử dụng nó để biên dịch mã python bình thường thành mã C ++.

Tôi khuyên bạn nên nhúng công cụ Chrome và sử dụng các công nghệ như: HTML5 + CSS3 + Javascript + JQuery + Canvas cho UI.

Có một khung giúp dễ dàng nhúng công cụ Chrome vào ứng dụng C ++ của bạn, đó là CEF - Chromium Embedded Framework . Nó hỗ trợ Windows, Linux, Mac OS.

Nếu bạn thích Python, hãy xem CEF Python , đó là một dự án cung cấp các ràng buộc python cho khung CEF (bằng cách sử dụng Cython ). Con trăn CEF hiện chỉ hỗ trợ Windows, nhưng có kế hoạch cho các hệ điều hành khác.

Dưới đây là danh sách các ứng dụng đã thành công khi sử dụng CEF (lấy từ đây ):

  • Adobe Brackets - trình chỉnh sửa mã cho web
  • Adobe Edge - công cụ soạn thảo đa phương tiện
  • AppJS - xây dựng các ứng dụng máy tính để bàn bằng Node.js
  • AOL Instant Messenger - ứng dụng khách windows sử dụng CEF
  • Cubiez - tích hợp nội dung yêu thích của bạn vào máy tính để bàn
  • Desura - nền tảng trò chơi trực tuyến
  • Dish World IPTV - nền tảng phát video trực tuyến
  • Evernote - phần mềm ghi chú
  • ExeOutput - cho phép bạn triển khai các ứng dụng html5 / php dưới dạng các ứng dụng trên máy tính để bàn
  • GitHub cho Windows - Phần mềm máy khách GitHub cho Windows
  • Janetter - phần mềm máy khách twitter
  • mChef - plugin trình duyệt mIRC
  • MediaMan - phần mềm tổ chức
  • MetaVR - phần mềm mô phỏng địa lý
  • MTG Studio - phần mềm tổ chức trò chơi
  • OpenSpace3D - Nền tảng phát triển 3D
  • Rdio - nền tảng phát nhạc trực tuyến
  • Spotify - nền tảng phát nhạc trực tuyến
  • Steam Client - nền tảng trò chơi trực tuyến
  • Tencent QQ - chương trình nhắn tin tức thời và trình duyệt web
  • Trend Micro - phần mềm bảo mật internet
  • WBEA Desktop - cho phép bạn triển khai các ứng dụng html5 dưới dạng các ứng dụng máy tính để bàn

Cũng có một cái nhìn về mục blog này: Xây dựng ứng dụng chất lượng máy tính để bàn trên công nghệ web - Nhóm biên tập viên của Brackets giải thích cách họ xây dựng nó bằng khung CEF và các công nghệ web như: jQuery , Bootstrap , LESS CSS , Yêu cầuJS , Jasmine cho thử nghiệm đơn vị , JSlint .

Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả của dự án CEF Python.


Cảm ơn vì đầu vào của bạn! CEF trông khá đẹp, nhưng tôi hy vọng sẽ cung cấp trải nghiệm bản địa trên mỗi nền tảng nếu có thể, rất khó để tạo lại bằng HTML, CSS và JS.
John Wells

@JohnWells, tại sao bản địa? Mọi người đã quen với trải nghiệm web. Hãy nhìn vào Windows 8, mỗi hệ điều hành tiếp theo của microsoft ít liên quan đến bản địa, chúng buộc các công nghệ web và đây là tương lai, không có thứ gọi là "trải nghiệm bản địa", đó là quá khứ.
Czarek Tomczak

Nó phụ thuộc vào phần mềm bạn đang nói về. Các ứng dụng hướng đến người tiêu dùng có thể ổn với cảm giác "web", nhưng điều đó không phù hợp lắm với phần mềm xoay quanh việc tạo nội dung. Ngoài ra, trong khi Windows 8 có thể hướng đến công nghệ web, Mac OS vẫn có nền tảng vững chắc ở vùng đất bản địa và người dùng có xu hướng không thích phần mềm đi chệch khỏi đó.
John Wells

1
Hoàn toàn đúng JBRWilkinson, nhưng tôi thực sự không muốn viết CSS bắt chước widget (trong trường hợp CEF) cho mỗi nền tảng nếu tôi không phải làm vậy.
John Wells

1
Là một người dùng Mac, kinh nghiệm bản địa rất quan trọng đối với tôi. Trong mắt tôi, không có gì tệ hơn một ứng dụng không xuất hiện và hoạt động phù hợp với HĐH mà nó đang chạy. Ngay cả một cái gì đó như tăng năng suất lớn cũng không đủ để vượt xa nó.
John Wells

5

Cách Qt của C ++ rất hay và sạch sẽ, vì vậy, vui lòng bỏ phần "khổng lồ xấu xí", tôi đã thử cả hai và cá nhân tôi làm việc hiệu quả / thoải mái hơn với Qt / C ++ so với ràng buộc Qt của Python. Đó là lời khuyên của tôi nếu bạn chọn đi với Qt. Ngoài ra, bên cạnh trải nghiệm bản địa mà tiện ích Qt cung cấp, Qt5 và QtQuick2 với công nghệ QML và khả năng nhúng JavaScript và HTML5 trong ứng dụng của bạn, mang lại cho bạn giao diện giống như web hiện đại, nếu bạn chọn làm như vậy.

Vì vậy, tại sao tôi không thích Python trong các ứng dụng máy tính để bàn và tôi thích giữ nó cho kịch bản hoặc các thứ phía máy chủ?

  • Python phá vỡ một chút niềm vui đa nền tảng, khách hàng của bạn phải cài đặt Python để chạy ứng dụng của bạn (đặc biệt là trên Windows) và các phiên bản Python khác nhau trên trang web chính thức của python hiện khiến khách hàng bối rối, phải tải xuống / cài đặt cái nào .

  • Python để exe , tạo các ứng dụng lớn hơn (về kích thước).

  • Ứng dụng Python, ăn nhiều bộ nhớ.

Đó là một quan điểm cá nhân. Hệ thống cha mẹ của Qt, con trỏ thông minh, sẽ không cho phép bạn tự bắn vào chân mình, cả hai chân, C ++ 11 sẽ cung cấp cho bạn nhiều tính năng hơn nữa.


3
"khách hàng của bạn phải cài đặt Python để chạy ứng dụng của bạn" - bạn có thể phân phối dlls python với ứng dụng của mình, người dùng không cần phải cài đặt python một cách thủ công. Bạn không cần phải sử dụng py2exe hoặc các nhà sản xuất exe lỗi khác (theo kinh nghiệm của tôi), hãy xem Python Nhúng , đó chỉ là một vài dòng mã c ++, thay thế PyRun_SimpleString bằng PyRun_SimpleFile, bạn có thể dễ dàng tự biên dịch nó. kích thước của ứng dụng của bạn. "Ứng dụng Python, ăn nhiều bộ nhớ hơn." - sử dụng Cython để tối ưu hóa các phần yêu cầu bộ nhớ trong ứng dụng của bạn.
Czarek Tomczak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.