Bir platformlar arası kütüphane yapmak için hangi dili kullanmalıyım? [kapalı]


10

Kütüphane yöntemleri tarafından beslenen ana uygulama tarafından sağlanan bilgilere dayalı iletileri oluşturmak gerekir bir SyncML ayrıştırma kitaplığı ( UI ) oluşturmak istiyorum . Ayrıca kütüphane, ana bilgisayar uygulamasındaki yöntemlere geri çağrı yapabilmelidir.

Bunu derleyebilmek ve mümkün olduğunca çok platformda kullanabilmek istiyorum: Windows, Windows Phone 7 İşletim Sistemi, OSX, iOS, Linux, Android, BlackBerry. Temel olarak mümkün olduğunca çok platform.

Öncelik bunu mobil cihazlarda kullanılabilir hale getirmektir.

Sorular:

  1. Hangi kurulumu kullanmalıyım? (programlama dilleri, derleyiciler, IDE vb.)
  2. Bu kütüphaneyi bu farklı platformlar için nasıl derlerim ve bu kütüphaneye nasıl bağlanırım?
  3. Başka bilgi var mı? örneğin, platformlar arası geliştirme konusunu kapsayan makaleler?

Daha önce bu tür bir çapraz platform projesi yapmadım, bu yüzden beni doğru yönde koymak için mevcut bilgiler memnuniyetle karşılanacaktır.

Kendimi, C # /. NET ve Objective-C bir arka plan var.

Yanıtlar:


8

Java platformunu / JVM'yi kullanmak bariz bir seçim olacaktır - herhangi bir dilin en geniş platformlar arası kapsama alanına sahiptir ve bir C # /. Net arka planınız varsa, kavramlar çok tanıdık olacaktır.

Java platformunun avantajlarından yararlanmak için Java dilini kullanmanız gerekmediğini unutmayın - aslında günümüzde, bir projeyi sıfırdan başlatırsanız muhtemelen aşağıdakilerden birini öneririm:

  • Scala - JVM'de mükemmel performansa sahip güçlü, statik olarak yazılmış, çok paradigmalı bir dil istiyorsanız. Bir C # arka planınız varsa size uygun olabilir.
  • Clojure - dinamik diller gibi işlevsel programlamayı tercih ediyorsanız ve en yeni teknolojilerle yaşamaktan keyif alıyorsanız. Clojure, çekici olabilecek gerçekten mükemmel eşzamanlılık özelliklerine sahiptir - bağlantılı video, bazı derin bilgiler için izlemeye değer.
  • Groovy - C # / Java geliştiricilerine çok aşina olacak basit ama etkili bir dinamik nesne yönelimli komut dosyası dili istiyorsanız.

Tüm bu diller, JVM'de (fantastik JIT derleyicisi, çok etkili çöp toplama, çok sayıda kütüphane seti) olmanın tüm avantajlarından yararlanır, ancak çalışmak için çok daha verimli dillerdir.

Bu arada, Java'da Funambol adı verilen açık kaynaklı bir SyncML kütüphanesi zaten var . Bunun doğrudan sizin için ne kadar yararlı olduğundan emin değilim, ancak hemen hemen her şey için genellikle açık kaynaklı bir Java kütüphanesi olduğu gerçeğinin bir örneği .......

Diğer seçenekler hakkında düşünceler:

  • C / C ++ kesinlikle çapraz platformda çalışabilir, ancak her platform için yerel koda yeniden derleme (ve daha sonra test etme) gerektirir. Derlenmiş bayt kodunun kendisi taşınabilir olduğu için gerekli olmayan JVM dillerinde. Performans veya ham donanım özelliklerine erişim için kesinlikle C / C ++ 'a ihtiyacınız yoksa, bence kaçınmanız gereken bir baş ağrısıdır.
  • Mono biçimindeki C # işe yarayabilir ( örneğin Unity'nin bir platformlar arası kütüphane olarak başarısına tanık olun ), ancak olgunluk, kütüphane kullanılabilirliği ve hatta ham performans açısından JVM ekosisteminin hiçbir yerinde yoktur. Ayrıca .Net, taşınabilirlik için bir kabus olan pencerelere özgü özelliklere sahip olduğundan, Microsoft .Net ile hiçbir zaman% 100 uyumlu olmayacaktır. Yine de, C # ile yapışmaya kararlı olup olmadığınızı düşünmeye değer.
  • Kütüphaneyi hem istemci hem de sunucu tarafında kullanmakla ilgileniyorsanız, Javascript dışarıda bir seçenek olabilir.

1
Harika cevap için teşekkürler. Java'nın iPhone'a bir kütüphane veya çerçeve biçiminde ne kadar iyi bağlanabileceğini biliyor musunuz? Ayrıca, Funambol'u kullanamıyorum, asıl mesele kendi kütüphanemi yapmak.
Andrei

2
Apple'ın şu anda iPhone'daki Java hakkında oldukça kısıtlayıcı olduğunu anlıyorum. Piyasa baskısının gelecekte daha fazla gerçekleşmesini bekliyorum - bu makale theserverside.com/discussions/thread.tss?thread_id=63072 , örneğin Oracle'ın iPod Touch'ta Java tabanlı bir uygulama gösterdiği hakkında konuşuyor.
mikera

+1'yi Java'yı kendimiz kullanmama gerekliliği konusunda eğittiğim için, ancak biri Scala, Clojure, Groovy'yi kullanabilir. Büyüleyici cevap.
Anthony

3

Java'yı denemek isteyebilirsiniz - Java Runtime Environment (sanal makine) çapraz platformdur, Java, Android (veya Java ME) ile mobil cihazlarda kullanılabilir ve .NET çok benzerdir.


3

Bu bir seçenek değil, birçok seçenek. Her yere giden bir şeyi bulmak cazip olsa da, her zaman en iyi yol değildir.

  1. Örneğin, Windows mobil platformunda bir C ++ kodunu sıkıştırmak mümkün olsa da, .NET'in her şeyi burada her zaman kendi destek kısmından daha kolay olacaktır.

  2. Benzer şekilde, ister yerel ister çalışma süresi altında olsun, büyük bir seçim yapmanız gerekir ve kesinlikle Web merkezli veya daha genel güçlü olanla sınırlı mısınız? Örneğin, Adobe Runtime her yerde bulunur, ancak temel programlama dilleriyle karşılaştırıldığında yapabileceklerinizle sınırlıdır.

  3. Sanırım en önemli şey, inşa etmek istediğiniz GUI'nin türü ve seviyesidir.

Şimdi en umut verici seçeneklere geliyor.

a. Symbian, Blackberry, Android, BREW ve Bada (samsung) için Java / J2ME en yaygın yöntemdir. Yine de, bazı durumlarda yerel çekirdek şeyler için birçok durumda C / C ++ ile daha iyi olabilirsiniz.

b. Windows .NET için desteklenen herhangi bir dille iyi olurdu.

c. İOS için - Amaç C'den başka seçenek yok. Bu çok fazla C ++ DEĞİLDİR , bu yüzden onu objektif olarak saymayacağım

İşte size tüm seçenekleri ve nerede uygulandığını gösteren tüm platformların setini gösteren bir wiki referansı .

Sorunuz sayesinde, yukarıdaki wiki bağlantısından, yukarıdaki sorunu çözmeye çalışan şimdi SDK'lar olduğunu öğrendim. En yakına gelen ikisi:

  1. Marmelat: http://www.madewithmarmalade.com/marmalade/supported-platforms bu hemen hemen tüm platformları ilginç bir şekilde desteklemektedir . Windows, tam bir daire oluşturmak için eklenmek üzeredir.

  2. Parçacık Kodu: http://www.particlecode.com/

Onları henüz kullanmadım, ama ilginç bir iş gibi geliyor.


Android Bada sağlar ve iOS C ++ izin verir.
Klaim

3

.NET pek çok platformda pek bulunmuyor ve Objective-C daha da kötü, ayrıca .NET biraz yavaş ve ObjC'nin temelde Apple dışında bir desteği yok. C, bir dış faktör sizi kullanmadıkça, bir dil olarak düşünülmeye bile değmez.

Geçerli tek sonuç C ++ dır.


2
Mono projesini C # ile birlikte kullanmanın avantajları hakkında bir şey biliyor musunuz? C neden dikkate almaya değmez?
Andrei

2
@Andrei: Bildiğim kadarıyla Mono, listelediğiniz tüm platformlarda kullanılabilirliğin resmi değil. Ve C düşünmeye değmez çünkü C ++ gibi, ama tüm iyi özellikleri kesilmiş, C + + kullanabiliyorsanız yapılacak aptalca bir şey.
DeadMG

4
@DeadMG: Linus Torvalds ile bu konuyu tartıştığınızı görmek isterim: thread.gmane.org/gmane.comp.version-control.git/57643/… -% 100 doğru olması gerektiğini söylemiyorum, Tıpkı alev izini izlemek gibi.
Michael Borgwardt

2
@DeadMG C iyi özellikleri kesilmiş C ++ değildir; C ++ korkunç özellikler eklenmiş C'dir. C ile yanlış bir şey yok
rightfold

2
@WTP: Hayat hikayemi değil, bir tavsiye istedi. Basit gerçek şu ki, C ++ 'ın ekstra özellikleri hakkında ne düşünürseniz düşünün, onlar var ve C ++ - sadece kod erişilebilir, bu bir bonus ve C hiçbir şey C ++ değil - tersi doğru olmasıdır. C ++ üzerinde C ++ kullandığınızda, yalnızca seçenekler eklersiniz . Bu nedenle, tanım gereği, C ++ üstün bir dildir ve her zaman C ++ özelliklerini kullanmamayı seçebilirsiniz . Bu delilik olurdu, ama yapabilirsiniz.
DeadMG
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.