การเขียนโปรแกรมเดสก์ท็อปข้ามแพลตฟอร์ม: C ++ vs. Python [ปิด]


11

เอาล่ะฉันจะมีประสบการณ์ในฐานะโปรแกรมเมอร์ Obj-C / Cocoa และ Ruby w / Rails มือสมัครเล่น สิ่งเหล่านี้ยอดเยี่ยม แต่ก็ไม่ค่อยมีประโยชน์สำหรับการเขียนแอปพลิเคชันข้ามแพลตฟอร์ม (หวังว่า GNUStep จะเสร็จสมบูรณ์ในวันแรกสำหรับแพลตฟอร์มหลายแพลตฟอร์ม แต่วันนั้นไม่ใช่วันนี้)

C ++ จากสิ่งที่ฉันสามารถรวบรวมได้นั้นเป็นพลังที่ยิ่งใหญ่ แต่ก็เป็นพฤติกรรมที่น่าเกลียดขนาดใหญ่ที่ใช้เวลาครึ่งทศวรรษหรือมากกว่านั้นในการควบคุม ฉันยังได้อ่านด้วยว่าคุณสามารถถ่ายภาพตัวเองได้อย่างง่ายดายไม่เพียงแค่ถ่ายภาพเท้าของคุณเองเท่านั้น เห็นได้ชัดว่าทั้งหมดนี้ค่อนข้างน่ากลัว ถูกต้องหรือไม่

Python ดูเหมือนจะให้พลังมากที่สุดของ C ++ และง่ายต่อการรับด้วยความเร็ว การเสียสละครั้งนี้ใหญ่แค่ไหน? มันมีความหมายหรือสามารถเพิกเฉยได้?

ฉันจะเขียนแอปพลิเคชั่นที่รวดเร็วเสถียรและมีความน่าเชื่อถือสูงในระยะเวลาที่เหมาะสมได้อย่างไร

นอกจากนี้จะเป็นการดีกว่าถ้าใช้ Qt สำหรับ UI ของคุณหรือรักษาการแยกส่วนหน้าเนทีฟแบบดั้งเดิมสำหรับแต่ละแพลตฟอร์มแทน

แก้ไข: เพื่อความชัดเจนเป็นพิเศษมีแอพพลิเคชั่นสองประเภทที่ฉันต้องการเขียน: หนึ่งคือ frontend ฐานข้อมูลที่เป็นมิตรและสะดวกมากและอีกอันหนึ่งซึ่งไม่ต้องสงสัยเลยว่าจะเกิดขึ้นในภายหลัง


คุณกำลังถามคำถามที่คำตอบจะเป็นอัตนัย - IMHO ที่ไม่สร้างสรรค์จึงลงคะแนนให้ปิด คุณถามคำถามอย่างน้อย 4 ข้อในหนึ่งคำถาม มีใครอีกบ้างที่จะรู้ว่า C ++ หรือ Python เป็นตัวเลือกที่ดีกว่าสำหรับคุณหรือไม่? ฉันขอแนะนำให้คุณลองสร้างแอปพลิเคชั่น GUI ขนาดเล็กด้วย Python (ซึ่งจะพาคุณไปไม่เกินหนึ่งวัน) และแอปพลิเคชันเดียวกันกับ C ++ และเปรียบเทียบด้วยตัวเอง
Doc Brown

ผมคิดว่าสิ่งที่ฉันจริงๆพยายามที่จะถามจะได้รับสิ่งที่ฉันกำลังมองหาซึ่งเป็นวัตถุทางเลือกที่ดีกว่า?
John Wells

คุณสามารถให้บริบทเพิ่มเติมได้บ้าง - แอปเดสก์ท็อปของคุณต้องทำอะไรบ้าง คณิตศาสตร์เยอะไหม? แอพเพิ่มผลผลิตหรือไม่ เข้าถึงฐานข้อมูลหรือไม่ เกม?
JBRWilkinson

เพิ่มการแก้ไขเพื่อให้ความกระจ่างที่ฉันต้องการ
John Wells

ฉันเลือกที่จะใช้ภาษาเดียวกันกับระบบปฏิบัติการและ / หรือ GUI ไลบรารี คุณสามารถปรับแต่งความลึกของ UI ได้ง่ายขึ้น ลองจำลองสิ่งที่ง่ายเหมือนเต็มหน้าจอ (กด F11 ในเบราว์เซอร์ของคุณ) ในระดับสูงเช่น Java หรือ C # ฉันพักกรณีของฉัน โซลูชันเนทีฟเป็นแบบพกพาไปยังอุปกรณ์หลากหลายกว่าโซลูชั่นระดับสูงเช่นจาวา (แดกดัน)
Lord Tydus

คำตอบ:


9

C / C ++ นั้นรวดเร็ว ความจริงก็คือแอพส่วนใหญ่ไม่ต้องการประสิทธิภาพนั้นด้วยสถานะของฮาร์ดไดรฟ์ปัจจุบัน วิธีปกติคือการพัฒนาแอปพลิเคชันในภาษาระดับสูงเช่น python มากกว่าการปรับให้เหมาะสมเมื่อจำเป็นกับภาษาระดับต่ำกว่าเช่น C / C ++

Python จะเพิ่มประสิทธิภาพการทำงานให้คุณอย่างมากเรียนรู้ได้ง่ายและรวดเร็ว มีCythonซึ่งคุณสามารถใช้เพื่อเขียนส่วนขยาย C เพื่อใช้ในแอพไพ ธ อนของคุณด้วยไวยากรณ์คล้ายงูหลามเพื่อเร่งความเร็วคอขวด

สำหรับแอป GUI ที่เป็นมาตรฐานหลามสามารถให้ประสิทธิภาพเพียงพอ และไพ ธ อนมีบางสิ่งที่ยอดเยี่ยมมากที่เรียกว่าKivyซึ่งเป็นเฟรมเวิร์ค GUI ที่ทำงานบน Mac, Windows, Linux, Android และ iOS และรองรับมัลติทัช ส่วนโบนัสคือชิ้นส่วนสำคัญด้านประสิทธิภาพได้รับการปรับให้เหมาะกับ C โดยใช้ Cython


1
คุณอาจพูดถูกเกี่ยวกับความเร็ว Kivy ดูมีความสามารถมาก แต่สามารถวาดวิดเจ็ตระบบดั้งเดิมได้หรือไม่?
John Wells

ไม่มันใช้เอ็นจิ้นกราฟิกเป็นของตัวเองสำหรับวิดเจ็ตโดยใช้ OpenGL ES Qt อาจเป็นทางออกที่ดีที่สุดของคุณสำหรับวิดเจ็ตเนทีฟข้ามแพลตฟอร์ม
Hakan Deryal

5

ฉันจะไปกับ Python เพราะมันช่วยเพิ่มประสิทธิภาพการทำงานให้คุณ คุณยังสามารถเขียนบางส่วนของแอพของคุณที่ต้องการความเร็วใน C ++ มีCython project ที่อนุญาตให้ใช้ไลบรารี C ++ โดยตรงใน Python หากคุณกังวลเกี่ยวกับความปลอดภัยของแหล่งที่มาของคุณ Cython สามารถช่วยคุณได้คุณสามารถใช้เพื่อรวบรวมรหัสไพ ธ อนปกติของคุณเป็นรหัส C ++

ฉันแนะนำให้ฝังเครื่องมือ Chrome และใช้เทคโนโลยีเช่น: HTML5 + CSS3 + Javascript + JQuery + Canvas สำหรับ UI

มีกรอบการทำงานที่ทำให้มันง่ายไปยังเครื่องมือ Chrome ฝังใน C ++ แอปของคุณเป็นก็เรียกว่าตระเว ณ - โครเมี่ยมแบบฝังกรอบ รองรับ Windows, Linux, Mac OS

ถ้าคุณชอบ Python ลองดูที่CEF Pythonมันเป็นโครงการที่ให้การเชื่อมกับ python สำหรับเฟรมเวิร์ก CEF (โดยใช้Cython ) หลาม CEF ปัจจุบันรองรับเฉพาะ Windows แต่มีแผนสำหรับระบบปฏิบัติการอื่น

นี่คือรายการแอปพลิเคชันที่ประสบความสำเร็จโดยใช้ CEF (นำมาจากที่นี่ ):

  • Adobe Brackets - โปรแกรมแก้ไขโค้ดสำหรับเว็บ
  • Adobe Edge - เครื่องมือเขียนมัลติมีเดีย
  • AppJS - สร้างแอปพลิเคชันเดสก์ท็อปโดยใช้ Node.js
  • AOL Instant Messenger - ไคลเอนต์ windows ใช้ CEF
  • Cubiez - รวมเนื้อหาที่คุณชื่นชอบไว้ในเดสก์ท็อป
  • Desura - แพลตฟอร์มเกมออนไลน์
  • Dish World IPTV - แพลตฟอร์มวิดีโอสตรีมมิ่ง
  • ซอฟต์แวร์ Evernote - การจดบันทึกย่อ
  • ExeOutput - อนุญาตให้คุณปรับใช้แอปพลิเคชัน html5 / php เป็นแอปพลิเคชันเดสก์ท็อป
  • GitHub สำหรับ Windows - ซอฟต์แวร์ไคลเอ็นต์ GitHub สำหรับ Windows
  • Janetter - ซอฟต์แวร์ไคลเอ็นต์ทวิตเตอร์
  • mChef - ปลั๊กอินเบราว์เซอร์ mIRC
  • MediaMan - ซอฟต์แวร์ออแกไนเซอร์
  • MetaVR - ซอฟต์แวร์จำลองทางภูมิศาสตร์
  • MTG Studio - ซอฟต์แวร์ออแกไนเซอร์เกม
  • OpenSpace3D - แพลตฟอร์มการพัฒนา 3D
  • Rdio - แพลตฟอร์มเพลงสตรีมมิ่ง
  • Spotify - สตรีมเพลงแพลตฟอร์ม
  • Steam Client - แพลตฟอร์มเกมออนไลน์
  • Tencent QQ - โปรแกรมส่งข้อความด่วนและเว็บเบราว์เซอร์
  • Trend Micro - ซอฟต์แวร์ความปลอดภัยทางอินเทอร์เน็ต
  • WBEA Desktop - อนุญาตให้คุณปรับใช้แอปพลิเคชัน html5 เป็นแอปพลิเคชันเดสก์ท็อป

ดูที่บล็อกนี้ด้วย: การสร้างแอปเดสก์ท็อป - คุณภาพบนเทคโนโลยีเว็บ - ทีมแก้ไขวงเล็บอธิบายว่าพวกเขาสร้างมันอย่างไรโดยใช้กรอบ CEFและเทคโนโลยีเว็บเช่น: jQuery , Bootstrap , LESS CSS , ต้องการ JS , Jasmine สำหรับการทดสอบหน่วย , JSlint .

ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้เขียนโครงการ CEF Python


ขอบคุณสำหรับข้อมูลของคุณ! CEF ดูค่อนข้างดี แต่ฉันหวังว่าจะมอบประสบการณ์แบบเนทีฟบนแต่ละแพลตฟอร์มหากเป็นไปได้ซึ่งเป็นเรื่องยากที่จะสร้างซ้ำด้วย HTML, CSS และ JS
John Wells

@JohnWells ทำไมต้องเป็นเจ้าของภาษา ผู้คนคุ้นเคยกับประสบการณ์บนเว็บ ดูที่ Windows 8 แต่ละระบบปฏิบัติการถัดไปจาก microsoft มีส่วนเกี่ยวข้องกับ native น้อยกว่าพวกเขาบังคับให้ใช้เทคโนโลยีเว็บและนี่คืออนาคตไม่มีสิ่งเช่น "native experience" มันเป็นเรื่องของอดีต
Czarek Tomczak

ขึ้นอยู่กับซอฟต์แวร์ที่คุณพูดถึง แอปพลิเคชันที่เน้นผู้บริโภคอาจไม่เป็นไรด้วยความรู้สึก "เว็บ" แต่นั่นก็ไม่ได้ดีอะไรนักเมื่อใช้ซอฟต์แวร์ที่มีศูนย์กลางอยู่ที่การสร้างเนื้อหา นอกจากนี้ในขณะที่ Windows 8 อาจมุ่งเน้นไปที่เทคโนโลยีเว็บ แต่ Mac OS ยังคงมีความมั่นคงในพื้นที่ดั้งเดิมและผู้ใช้มักจะไม่ชอบซอฟต์แวร์ที่เบี่ยงเบนไปจากสิ่งนั้น
John Wells

1
ค่อนข้างถูกต้อง JBRWilkinson แต่ฉันไม่ต้องการเขียนวิดเจ็ตเลียนแบบ CSS (ในกรณีของ CEF) สำหรับแต่ละแพลตฟอร์มถ้าฉันไม่ต้องทำ
John Wells

1
การเป็นผู้ใช้ Mac ด้วยตัวเองประสบการณ์ดั้งเดิมนั้นสำคัญกับฉันมาก ในสายตาของฉันไม่มีอะไรจะเลวร้ายยิ่งไปกว่าแอพพลิเคชั่นที่ไม่ปรากฏขึ้นและทำงานได้สอดคล้องกับระบบปฏิบัติการที่ใช้อยู่ แม้แต่บางสิ่งบางอย่างเช่นการเพิ่มผลิตภาพจำนวนมากก็ยังไม่เพียงพอ
John Wells

5

วิธี Qt ของ C ++ นั้นยอดเยี่ยมและสะอาดดังนั้นโปรดวางส่วน "behemoth ugly" ลงไปฉันได้ลองทั้งคู่แล้วและโดยส่วนตัวแล้วฉันมีประสิทธิผลมากกว่า / สบายกว่าด้วย Qt / C ++ มากกว่าการผูก Qt ของ Python นั่นคือคำแนะนำของฉันถ้าคุณเลือกที่จะไปกับ Qt นอกจากนี้ยังมีประสบการณ์ดั้งเดิมที่วิดเจ็ต Qt ให้บริการ Qt5 และQtQuick2พร้อมเทคโนโลยี QML และความสามารถในการฝัง JavaScript และ HTML5 ในแอปของคุณทำให้คุณมีรูปลักษณ์และความรู้สึกเหมือนเว็บที่ทันสมัยหากคุณเลือกที่จะทำเช่นนั้น

ดังนั้นทำไมฉันไม่ชอบ Python ในแอพเดสก์ท็อปและฉันชอบที่จะเก็บไว้ใช้ในการเขียนสคริปต์หรือด้านเซิร์ฟเวอร์?

  • Python ทำลายความสนุกข้ามแพลตฟอร์มไปเล็กน้อยไคลเอนต์ของคุณต้องติดตั้ง Python เพื่อรันแอพของคุณ (โดยเฉพาะบน Windows) และ Python เวอร์ชั่นต่าง ๆ ที่อยู่บนเว็บไซต์ทางการของไพ ธ อนทำให้ไคลเอนต์สับสนซึ่งจะดาวน์โหลด / ติดตั้ง .

  • Python เป็น exeสร้างแอพที่ใหญ่ขึ้น (ในแง่ของขนาด)

  • แอพ Python กินหน่วยความจำได้มากขึ้น

นั่นเป็นมุมมองส่วนตัว ระบบผู้ปกครองของพอยน์เตอร์สมาร์ทพอยน์เตอร์ของ Qt จะไม่ปล่อยให้คุณยิงด้วยตัวเองโดยไม่ต้องใช้ขาทั้งสองข้าง C ++ 11 จะให้คุณสมบัติที่มากกว่าเดิม


3
"ลูกค้าของคุณต้องติดตั้ง Python เพื่อรันแอพของคุณ" - คุณสามารถแจกจ่าย python dll ด้วยแอพของคุณได้โดยไม่จำเป็นต้องให้ผู้ใช้ติดตั้ง Python ด้วยตนเอง คุณไม่จำเป็นต้องใช้ py2exe หรือผู้ผลิต buggy exe อื่น ๆ (จากประสบการณ์ของฉัน) ดูPython ฝังมันเป็นเพียงไม่กี่บรรทัดของรหัส c ++ แทนที่ PyRun_SimpleString ด้วย PyRun_SimpleFile คุณสามารถรวบรวมมันด้วยตัวคุณเองได้อย่างง่ายดาย ขนาดของแอปของคุณ "แอพ Python กินหน่วยความจำมากขึ้น" - ใช้ Cython เพื่อเพิ่มประสิทธิภาพความต้องการหน่วยความจำของแอปของคุณ
Czarek Tomczak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.