Platformlar arası masaüstü programlama: C ++ ve Python [kapalı]


11

Tamam, başlamak için amatör bir Obj-C / Cocoa ve Ruby w / Rails programcısı olarak deneyime sahibim. Bunlar harika, ancak çapraz platform uygulamaları yazmak için gerçekten yararlı değiller (umarım GNUStep bir gün ilk platform için yeterince eksiksiz olacaktır, ancak o gün bugün değildir).

C ++, toplayabildiğim kadarıyla son derece güçlü ama aynı zamanda ustalaşması yarım on yıl veya daha fazla sürebilen devasa, çirkin bir dev. Ayrıca, kendinizi sadece ayağınızı vurmakla kalmayıp, hafıza yönetiminin tümüyle manuel olduğu için tüm bacağınızı havaya uçurabileceğinizi de okudum. Açıkçası, bunların hepsi oldukça korkutucu. Doğru mu?

Python, C ++ 'ın gücünün çoğunu sağlıyor gibi görünüyor ve hız pahasına almak çok daha kolay. Bu fedakarlık ne kadar büyük? Anlamlı mı yoksa göz ardı edilebilir mi?

Hangisini makul bir sürede hızlı, istikrarlı, son derece güvenilir uygulamalar yazmam gerekiyor?

Ayrıca, kullanıcı arayüzünüz için Qt kullanmak veya bunun yerine her platform için ayrı, yerel kullanıcı arabirimlerini korumak daha mı iyi?

DÜZENLEME: Ekstra netlik için, yazmak istediğim iki tür uygulama var: biri son derece samimi ve kullanışlı bir veritabanı ön ucu ve diğeri, şüphesiz daha sonra gelecek, bir 3D dünya editörü.


Cevapların son derece öznel olacağı soruları soruyorsunuz - yapıcı olmayan IMHO, böylece kapanmaya oy veriyor. Ayrıca, birinde en az 4 farklı soru soruyorsunuz. C ++ veya Python'un sizin için daha iyi bir seçim olup olmadığını sizden başka nasıl bilebilirsiniz ? Python ile (bir günden fazla sürmemeli) küçük bir GUI uygulaması ve C ++ ile aynı uygulamayı oluşturmayı ve kendiniz karşılaştırmanızı öneririm.
Doc Brown

Sanırım gerçekten sormaya çalıştığım şey aradığım şey verildi, nesnel olarak daha iyi bir seçim mi?
John Wells

Ekstra bağlam verebilir misiniz? Masaüstü uygulamanızın ne yapması gerekir? Çok fazla matematik mi? Verimlilik uygulaması? Veritabanı erişimi? Bir oyun?
JBRWilkinson

Yapmak istediğimi açıklığa kavuşturmak için düzenleme eklendi.
John Wells

İşletim sisteminin ve / veya GUI kütüphanesinin aynı dilini kullanmayı tercih ederim. Kullanıcı arayüzüne daha derinlemesine manipülasyonlar daha kolay yapabilirsiniz. Java veya C # gibi üst düzey bir dilde tam ekran kadar basit bir şeyi simüle etmeyi deneyin (tarayıcınızda F11 tuşuna basın). Diyeceğimi dedim. Doğal çözümler, java (ironik olarak) gibi üst düzey çözümlerden daha geniş bir cihaz yelpazesine taşınabilir.
Lord Tydus

Yanıtlar:


9

C / C ++ hızlıdır. Gerçek şu ki, çoğu uygulama mevcut performansın durumu ile bu performansa ihtiyaç duymayacak. Genel yol, uygulamayı C / C ++ gibi daha düşük seviyeli dillerle gerektiğinde optimize etmekten ziyade python gibi üst düzey bir dilde geliştirmektir.

Python size büyük bir verimlilik artışı sağlayacak, öğrenmesi kolay ve oldukça hızlı. Darboğazları hızlandırmak için python uygulamanızda python benzeri sözdizimi ile kullanmak için C uzantıları yazmak için kullanabileceğiniz Cython var .

Standart GUI uygulamaları için python size yeterli performans verebilir. Python, Mac, Windows, Linux, Android ve iOS'ta çalışan ve çoklu dokunmayı destekleyen bir GUI çerçevesi olan Kivy adında çok güzel bir şeye sahiptir . Bonus kısım, performans açısından kritik parçalar Cython kullanılarak C ile optimize edilmiştir.


1
Muhtemelen hız konusunda haklısın. Kivy çok yetenekli görünüyor, ancak sisteme özgü widget'lar çizebilir mi?
John Wells

Hayır, OpenGL ES kullanarak widget'lar için kendi grafik motorunu kullanıyor. Qt muhtemelen platformlar arası yerel widget'lar için en iyi bahistir.
Hakan Deryal

5

Size büyük verimlilik artışı sağladığı için Python ile birlikte giderdim. Uygulamanızın C ++ 'da hız gerektiren kısımları yazabilirsiniz, C ++ kitaplıklarının doğrudan Python'da kullanılmasına izin veren bir Cython projesi vardır. Kaynaklarınızın güvenliği konusunda endişeleriniz varsa, Cython da bu konuda yardımcı olabilir, normal python kodunuzu C ++ koduna derlemek için kullanabilirsiniz.

Chrome motorunu yerleştirmenizi ve aşağıdaki gibi teknolojileri kullanmanızı öneriyorum: HTML5 + CSS3 + Javascript + JQuery + Canvas for UI.

Chrome motorunu C ++ uygulamanıza gömmeyi kolaylaştıran bir çerçeve var, buna CEF - Chromium Embedded Framework deniyor . Windows, Linux, Mac OS'yi destekler.

Python'u beğendiyseniz, CEF Python'a bakın, CEF çerçevesi için ( Cython kullanarak ) python bağlamaları sağlayan bir projedir . CEF python şu anda sadece Windows'u desteklemektedir, ancak diğer işletim sistemleri için planlar vardır.

CEF kullanarak başarılı olan uygulamaların listesi ( buradan alınmıştır ):

  • Adobe Brackets - Web için kod düzenleyici
  • Adobe Edge - multimedya yazma aracı
  • AppJS - Node.js kullanarak masaüstü uygulamaları oluşturun
  • AOL Instant Messenger - Windows istemcisi CEF kullanıyor
  • Cubiez - favori içeriğinizi masaüstüne entegre eder
  • Desura - online oyun platformu
  • Dish World IPTV - akışlı video platformu
  • Evernote - not alma yazılımı
  • ExeOutput - html5 / php uygulamalarını masaüstü uygulamaları olarak dağıtmanıza olanak tanır
  • Windows için GitHub - Windows için GitHub istemci yazılımı
  • Janetter - twitter istemci yazılımı
  • mChef - mIRC tarayıcı eklentisi
  • MediaMan - ajanda yazılımı
  • MetaVR - coğrafi simülasyon yazılımı
  • MTG Studio - oyun düzenleme yazılımı
  • OpenSpace3D - 3D geliştirme platformu
  • Rdio - müzik akışı platformu
  • Spotify - müzik akışı platformu
  • Steam İstemcisi - online oyun platformu
  • Tencent QQ - anlık mesajlaşma programı ve web tarayıcısı
  • Trend Micro - İnternet güvenlik yazılımı
  • WBEA Desktop - html5 uygulamalarını masaüstü uygulamaları olarak dağıtmanıza olanak tanır

Ayrıca bu blog girişine bir göz atın: Web Teknolojileri üzerinde Masaüstü Kalitesi Uygulaması Oluşturma - CEF çerçevesi ve jQuery , Bootstrap , LESS CSS , requirJS , Jasmine için Birim testi , JSlint kullanarak nasıl oluşturduklarını açıklayan Parantez editörü ekibi .

Feragatname: CEF Python projesinin yazarıyım.


Girdiniz için teşekkürler! CEF oldukça hoş görünüyor, ancak HTML, CSS ve JS ile çoğaltılması zor olan her platformda yerel bir deneyim sağlamayı umuyorum.
John Wells

@JohnWells, neden yerli? İnsanlar web deneyimine alışkınlar. Windows 8'e bakın, microsoft'tan sonraki her işletim sisteminin yerel ile daha az ilgisi var, web teknolojilerini zorluyorlar ve bu gelecek, "yerel deneyim" gibi bir şey yok, bu geçmişte kaldı.
Czarek Tomczak

Hangi yazılımdan bahsettiğinize bağlıdır. Tüketici odaklı uygulamalar bir "web" hissi ile iyi olabilir, ancak içerik oluşturma merkezli bir yazılımla çok iyi uçmaz. Ayrıca, Windows 8 web teknolojisine yönelik olsa da, Mac OS hala yerli topraklarda sağlam bir şekilde topraklanmış ve kullanıcıları bundan sapan yazılımlardan hoşlanmama eğilimindedir.
John Wells

1
Oldukça doğru JBRWilkinson, ama gerekmiyorsa gerçekten her platform için widget-mimik CSS (CEF durumunda) yazmak istemiyorum.
John Wells

1
Bir Mac kullanıcısı olarak, yerel deneyim benim için çok önemli. Benim gözümde, hiçbir şey görünmediği ve üzerinde çalıştığı işletim sistemi ile tutarlı bir uygulamadan daha kötü değildir. Büyük bir üretkenlik artışı gibi bir şey bile ağır basmak için yeterli değildir.
John Wells

5

C ++ 'ın Qt yolu harika ve temiz, bu yüzden lütfen, "çirkin behemoth" bölümünü bırakın, ikisini de denedim ve şahsen ben Python'un Qt bağlayıcısından daha Qt / C ++ ile daha üretken / rahatım. Qt ile gitmeyi seçerseniz, bu benim tavsiyem. Artı ve Qt widget'ın sağladığı yerel deneyimin yanı sıra, QML teknolojisine sahip Qt5 ve QtQuick2 ve uygulamanıza JavaScript ve HTML5'i gömme yeteneği, bunu seçerseniz size modern bir web benzeri görünüm ve his verir.

Peki, neden masaüstü uygulamalarında Python'u sevmiyorum ve komut dosyası veya sunucu tarafı şeyler için saklamayı tercih ediyorum?

  • Python, platformlar arası sevinci biraz kırıyor, müşterinizin uygulamanızı çalıştırmak için Python'u (özellikle Windows'ta) yüklemesi gerekiyor ve python'un resmi web sitesindeki farklı Python sürümleri artık istemciyi karıştırıyor .

  • Python exe , büyük uygulamalar yapmak (boyut açısından).

  • Python uygulamaları, daha fazla bellek yiyin.

Bu kişisel bir bakış açısı. Qt'nin ana sistemi, akıllı işaretçiler, kendinizi ayağınıza vurmanıza izin vermeyecek, her iki bacakta, C ++ 11 size daha da fazla özellik verecektir.


3
"Müşterinizin uygulamanızı çalıştırmak için Python yüklemesi gerekiyor" - uygulamanızla python dll'lerini dağıtabilirsiniz, kullanıcının python'u manuel olarak kurmasına gerek yoktur. Sen kullanımı py2exe ya da (benim deneyimlerinden) diğer arabası exe yapımcıları, görmek gerek yok Python Gömme'yi hiçbir yükü yapmak gerektiğini, kolayca kendiniz derlemek olabilir, PyRun_SimpleFile ile PyRun_SimpleString değiştirin ++ o c sadece birkaç satır var, kod uygulamanızın boyutu. "Python uygulamalar, daha fazla bellek yemek." - uygulamanızın bellek gerektiren bölümlerini optimize etmek için Cython kullanın.
Czarek Tomczak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.