ฉันควรใช้ภาษาใดในการสร้างห้องสมุดข้ามแพลตฟอร์ม [ปิด]


10

ฉันต้องการสร้างห้องสมุดการแยกวิเคราะห์ SyncML ( ไม่มี UI ) ซึ่งควรจะสามารถสร้างข้อความตามข้อมูลที่ได้รับจากแอปพลิเคชันโฮสต์โดยใช้วิธีการของห้องสมุด นอกจากนี้ไลบรารีควรจะสามารถโทรกลับไปยังวิธีการต่างๆในแอปพลิเคชันโฮสต์ได้

ฉันต้องการรวบรวมและมีให้ในหลาย ๆ แพลตฟอร์มที่เป็นไปได้: Windows, Windows Phone 7 OS, OSX, iOS, Linux, Android, BlackBerry โดยทั่วไปจะมีแพลตฟอร์มให้มากที่สุด

ลำดับความสำคัญคือการมีสิ่งนี้พร้อมใช้งานบนอุปกรณ์มือถือ

คำถาม:

  1. ฉันควรใช้การตั้งค่าแบบใด (ภาษาโปรแกรมคอมไพเลอร์ IDE ฯลฯ )
  2. ฉันจะรวบรวมไลบรารีนี้สำหรับแพลตฟอร์มต่าง ๆ เหล่านี้ได้อย่างไรและฉันจะเชื่อมต่อกับมันอย่างไร
  3. ข้อมูลอื่น ๆ ? เช่นบทความที่ครอบคลุมหัวข้อการพัฒนาข้ามแพลตฟอร์ม

ฉันไม่ได้ทำโปรเจคข้ามแพลตฟอร์มแบบนี้มาก่อนดังนั้นข้อมูลใด ๆ ที่พร้อมจะให้ฉันไปในทิศทางที่ถูกต้องจะได้รับการต้อนรับ

ตัวฉันฉันมีพื้นหลังใน C # /. NET และ Objective-C

คำตอบ:


8

การใช้แพลตฟอร์ม Java / JVM จะเป็นตัวเลือกที่ชัดเจน - มันมีการครอบคลุมข้ามแพลตฟอร์มที่กว้างที่สุดของภาษาใด ๆ และถ้าคุณมี C # / พื้นหลังเน็ตแนวคิดจะคุ้นเคยมาก

โปรดทราบว่าคุณไม่จำเป็นต้องใช้ภาษาจาวาในการรับประโยชน์จากแพลตฟอร์ม Java - ในความเป็นจริงทุกวันนี้หากเริ่มต้นโครงการตั้งแต่เริ่มต้นฉันอาจแนะนำหนึ่งในต่อไปนี้:

  • สกาล่า - หากคุณต้องการพลังอันทรงพลัง, พิมพ์แบบคงที่, กระบวนทัศน์หลายกระบวนทัศน์ด้วยประสิทธิภาพที่ยอดเยี่ยมใน JVM อาจเหมาะกับคุณถ้าคุณมีพื้นหลัง C #
  • Clojure - หากคุณชอบการเขียนโปรแกรมที่ใช้งานได้เช่นภาษาแบบไดนามิกและเพลิดเพลินไปกับการใช้ชีวิตที่ทันสมัย Clojure มีความสามารถในการทำงานพร้อมกันที่ยอดเยี่ยมอย่างแท้จริงซึ่งอาจเป็นที่น่าสนใจ - วิดีโอที่เชื่อมโยงนั้นคุ้มค่าที่จะรับชมเพื่อรับข้อมูลเชิงลึก
  • Groovy - หากคุณต้องการภาษาสคริปต์เชิงวัตถุแบบไดนามิกที่เรียบง่าย แต่มีประสิทธิภาพซึ่งจะให้ความรู้สึกคุ้นเคยกับนักพัฒนา C # / Java

ภาษาทั้งหมดเหล่านี้ได้รับประโยชน์ทั้งหมดจากการอยู่ใน JVM (คอมไพเลอร์ JIT ที่ยอดเยี่ยมการรวบรวมขยะที่มีประสิทธิภาพมากชุดของห้องสมุดขนาดใหญ่) แต่เป็นภาษาที่มีประสิทธิผลมากกว่าที่จะทำงาน

ยังไงก็ตามมีห้องสมุด SyncML โอเพ่นซอร์สที่มีอยู่ใน Java ชื่อ Funambol ไม่แน่ใจว่าสิ่งนี้มีประโยชน์กับคุณโดยตรง แต่เป็นตัวอย่างของความจริงที่ว่าโดยปกติแล้วจะมีไลบรารี Java โอเพ่นซอร์สสำหรับทุกสิ่งที่ค่อนข้างสวย .......

ความคิดเกี่ยวกับตัวเลือกอื่น ๆ :

  • C / C ++ สามารถทำงานข้ามแพลตฟอร์มได้อย่างแน่นอน แต่มันต้องการ recompile (และการทดสอบที่ตามมา) ในโค้ดเนทีฟสำหรับแต่ละแพลตฟอร์ม ด้วยภาษา JVM ที่ไม่จำเป็นเพราะตัว bytecode ที่คอมไพล์เองนั้นสามารถพกพาได้ ถ้าคุณไม่ต้องการ C / C ++ สำหรับการทำงานหรือการเข้าถึงคุณสมบัติของฮาร์ดแวร์ดิบฉันคิดว่ามันน่าปวดหัวที่คุณควรหลีกเลี่ยง
  • C # ในรูปแบบของ Mono สามารถทำงานได้ (เป็นตัวอย่างของความสำเร็จของUnityในฐานะห้องสมุดข้ามแพลตฟอร์ม) แต่ก็ไม่มีระบบนิเวศ JVM ในแง่ของการกำหนดความพร้อมใช้งานของห้องสมุดหรือแม้กระทั่งประสิทธิภาพดิบ นอกจากนี้ยังไม่สามารถใช้งานร่วมกับ Microsoft. Net ได้ 100% เนื่องจาก. Net มีคุณสมบัติเฉพาะสำหรับ Windows ซึ่งเป็นฝันร้ายสำหรับการพกพา ยังคงมีมูลค่าการพิจารณาถ้าคุณมุ่งมั่นที่จะติดกับ C #
  • Javascript อาจเป็นตัวเลือกภายนอกหากคุณสนใจที่จะใช้ไลบรารี่ทั้งฝั่งไคลเอนต์และฝั่งเซิร์ฟเวอร์

1
ขอบคุณสำหรับคำตอบที่ดี คุณรู้หรือไม่ว่าพอร์ต Java กับ iPhone ในรูปแบบของไลบรารีหรือเฟรมเวิร์กดีแค่ไหน? นอกจากนี้ไม่สามารถใช้ Funambol ได้ประเด็นก็คือสร้างห้องสมุดของตัวเอง
อังเดร

2
ฉันเข้าใจว่า Apple ค่อนข้างเข้มงวดกับ Java ใน iPhone ในปัจจุบัน ฉันคาดหวังว่าแรงกดดันจากตลาดจะทำให้มันเกิดขึ้นในอนาคต - บทความนี้theserverside.com/discussions/thread.tss?thread_id=63072ยกตัวอย่างเช่นการพูดคุยเกี่ยวกับ Oracle สาธิตแอพ Java-based ใน iPod Touch
mikera

+1 สำหรับการให้การศึกษาแก่ฉันโดยไม่จำเป็นต้องใช้ Java ต่อ se แต่สามารถใช้ Scala, Clojure, Groovy ได้ คำตอบที่น่าสนใจ
แอนโธนี

3

คุณอาจต้องการลอง Java - Java Runtime Environment (เครื่องเสมือน) เป็นแพลตฟอร์มข้าม Java อาจใช้ในอุปกรณ์มือถือที่มี Android (หรือกับ Java ME) และ. NET เป็นสิ่งที่คล้ายกันมาก


3

นี่ไม่ใช่ทางเลือกเดียว แต่มีหลายทางเลือก ในขณะที่มันดึงดูดการค้นหาสิ่งหนึ่งที่ไปทุกที่มันไม่ใช่วิธีที่ดีที่สุดที่จะทำ

  1. ตัวอย่างเช่นในขณะที่มันเป็นไปได้ที่จะบีบรหัส C ++ ในแพลตฟอร์ม Windows mobile อะไรก็ตาม. NET จะง่ายกว่าที่นี่เสมอกว่าส่วนของตัวนับจากมุมมองของการสนับสนุน

  2. ในทำนองเดียวกันเราต้องเลือกตัวเลือกที่สำคัญไม่ว่าคุณจะต้องการให้เป็นเจ้าของหรือภายใต้เวลาทำงานและคุณถูก จำกัด อยู่ที่เว็บศูนย์กลางหรือมีประสิทธิภาพมากกว่าหรือไม่? ตัวอย่างเช่น Adobe Runtime มีอยู่ทั่วไปทุกหนทุกแห่ง แต่จะ จำกัด เฉพาะสิ่งที่คุณสามารถทำได้เมื่อเทียบกับภาษาการเขียนโปรแกรมหลัก

  3. สิ่งที่สำคัญที่สุดที่ฉันเดาก็คือชนิดและระดับของ GUI ที่คุณต้องการสร้าง

ตอนนี้มุ่งมั่นในตัวเลือกที่ดีที่สุด

สำหรับ Symbian, Blackberry, Android, BREW และ Bada (samsung) Java / J2ME เป็นวิธีที่พบได้บ่อยที่สุด แม้ว่าคุณจะดีกว่าในการใช้ C / C ++ ในหลาย ๆ กรณีสำหรับคอร์เนทีฟหลักในบางแพลตฟอร์ม

ข สำหรับ Windows .NET ด้วยภาษาที่รองรับใด ๆ จะดี

ค. สำหรับ iOS ไม่มีทางเลือกนอกจาก Objective C นี่ไม่ใช่ C ++ มากดังนั้นฉันจะไม่นับเป็นวัตถุประสงค์

นี่คือข้อมูลอ้างอิงวิกิซึ่งแสดงชุดของแพลตฟอร์มทั้งหมดที่แสดงตัวเลือกทั้งหมดและตำแหน่งที่จะใช้

ขอบคุณสำหรับคำถามของคุณฉันได้เรียนรู้จากลิงค์วิกิข้างต้นว่าตอนนี้มี SDK แล้วและพยายามแก้ไขปัญหาดังกล่าว สองสิ่งที่ใกล้เคียงที่สุดคือ:

  1. Marmalade: http://www.madewithmarmalade.com/marmalade/supported-platforms สิ่งนี้น่าสนใจสนับสนุนแพลตฟอร์มเกือบทั้งหมด Windows เป็นเพียงการเพิ่มเพื่อให้วงกลมสมบูรณ์

  2. รหัสอนุภาค: http://www.particlecode.com/

ฉันยังไม่ได้ใช้มัน แต่ฟังดูน่าสนใจ


Android ให้ Bada และ iOS อนุญาตให้ใช้ C ++
Klaim

3

.NET นั้นแทบจะไม่สามารถใช้งานได้ในหลาย ๆ แพลตฟอร์มและ Objective-C นั้นแย่กว่านั้นอีกทั้ง. NET นั้นค่อนข้างช้าและ ObjC ก็ไม่ได้รับการสนับสนุนจาก Apple ภาษา C เป็นภาษาที่ไม่คุ้มค่าที่จะพิจารณาเว้นแต่ว่าปัจจัยภายนอกบางอย่างทำให้คุณใช้มัน

ภาษาที่ใช้งานได้ผลเดียวคือ C ++


2
คุณรู้อะไรเกี่ยวกับข้อดีของการใช้โปรเจ็กต์โมโนร่วมกับ C # หรือไม่? เหตุใด C จึงไม่คุ้มที่จะพิจารณา
Andrei

2
@Andrei: เท่าที่ฉันรู้ Mono แทบจะไม่มีภาพความพร้อมใช้งานบนทุกแพลตฟอร์มที่คุณระบุไว้ และ C ก็ไม่ได้คุ้มค่าที่จะพิจารณาเพราะมันเหมือนกับ C ++ แต่ด้วยคุณสมบัติที่ดีทั้งหมดที่ถูกตัดออกไปซึ่งเป็นสิ่งที่โง่ถ้าคุณสามารถใช้ C ++ ได้
DeadMG

4
@DeadMG: ฉันชอบที่จะเห็นคุณอภิปรายจุดนั้นกับ Linus Torvalds: thread.gmane.org/gmane.comp.version-control.git/57643/ … - ไม่ได้บอกว่าเขาต้องถูกต้อง 100% เพียงแค่ต้องการดู flamewar
Michael Borgwardt

2
@DeadMG C ไม่ใช่ C ++ ที่มีฟีเจอร์ที่ดี; C ++ คือ C พร้อมกับเพิ่มคุณสมบัติที่น่ากลัว มีอะไรผิดปกติกับซีเป็น
rightfold

2
@WTP: เขาขอคำแนะนำไม่ใช่เรื่องราวชีวิตของฉัน ความจริงง่ายๆก็คือสิ่งที่คุณคิดว่าเป็นคุณสมบัติพิเศษของ C ++ ความจริงก็คือมันมีอยู่แล้วและพวกเขาสร้าง C ++ ซึ่งเป็นรหัสเท่านั้นที่เข้าถึงได้ซึ่งเป็นโบนัสและ C คืออะไร C ++ ไม่ได้เลย เมื่อคุณใช้ C ++ เหนือ C คุณจะเพิ่มทางเลือกเท่านั้น ดังนั้นตามคำนิยาม C ++ เป็นภาษาที่เหนือกว่าและคุณสามารถเลือกที่จะไม่ใช้คุณสมบัติ C ++ ได้ตลอดเวลา ซึ่งจะบ้า แต่คุณสามารถ
DeadMG
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.