เหตุใดผู้คนจึงเขียนห้องสมุดบางแห่งเป็นภาษาโปรแกรมหลายภาษา


13

มีบางไลบรารีที่มีในเวอร์ชันที่เขียนในภาษาการเขียนโปรแกรมที่แตกต่างกันมากมายเช่นLuceneซึ่งเขียนด้วยภาษาจาวา , Ruby, Lisp และภาษาอื่น ๆ และฉันกำลังพูดถึงการใช้งานในภาษาเหล่านี้ไม่เพียง แต่อินเทอร์เฟซFFI

ทำไมผู้คนถึงทำเช่นนั้น? ฉันเห็นเหตุผลที่ชัดเจนประการหนึ่ง: การปรับใช้และการกระจาย (และอาจเป็นการพัฒนาด้วย) ง่ายขึ้นเมื่อโครงการมีการพึ่งพาน้อยลง แต่มีอะไรอีกบ้าง? ในสถานการณ์ใดที่คุ้มค่า


4
อาจมีราคาแพงมากในการสื่อสารข้ามพรมแดนตามธรรมชาติของสภาพแวดล้อมการดำเนินการของคุณ

1
@Thor: ยังมีบางภาษา / สภาพแวดล้อมที่ส่งเสริมการข้ามพรมแดนตามธรรมชาติในเชิงบวก (C เป็นตัวอย่างทั่วไปของเรื่องนี้และมันเป็นธีมที่แข็งแกร่งในหมู่โปรแกรมเมอร์ Tcl) ฉันสงสัยว่าส่วนใหญ่เกี่ยวข้องกับการจัดการหน่วยความจำ (และบางครั้งทรัพยากรอื่น ๆ ); มันไม่ดีเลยที่จะมีตัวจัดการหน่วยความจำสองตัวในกระบวนการเดียวกันโดยเฉพาะอย่างยิ่งถ้าพวกเขาไม่ได้ถูกออกแบบมาให้อยู่ร่วมกัน ในที่สุดฉันคิดว่ามันจะลงมากับสิ่งที่คุณทำสมมติฐานและสิ่งที่พวกเขาจะทำให้การยอมรับไม่ได้ ...
Donal Fellows

คำตอบ:


16

เหตุผลบางอย่างที่ฉันทำ (เขียนรหัส C ใหม่ใน Haskell ในกรณีของฉัน):

  • การปรับใช้ง่ายขึ้น: หนึ่งสายโซ่การสร้างเท่านั้น
  • การพึ่งพาน้อยลง (เพื่อให้ได้รับการยอมรับมากขึ้น)
  • พกพาได้มากขึ้น (เช่นไปยัง Windows) หากรหัสเป็นภาษาระดับสูง
  • เพื่อเพิ่มการสนับสนุนสำหรับการขนานไม่สามารถทำได้ง่ายในระดับต่ำ C
  • เพื่อทำให้รหัสปลอดภัยขึ้นเมื่อใช้ทรัพยากร
  • เพื่อให้รหัสเชื่อถือได้ง่ายขึ้น
  • สำนวนมากขึ้น (ประเภทที่แข็งแกร่ง, API ที่ง่ายกว่า, นำมาใช้ซ้ำได้มากขึ้น)

19

โดยทั่วไปแล้วการปรับใช้ไลบรารีให้เป็น "ดั้งเดิม" กับแพลตฟอร์มเฉพาะจะช่วยให้:

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

ตัวอย่างเช่นผมเริ่มNoda เวลาโครงการเป็นพอร์ตของJoda เวลา มันไม่สามารถใช้ Joda Time ได้โดยตรงจากภายใน. NET ... คุณไม่ต้องการหมุน JVM เพียงเพื่อคำนวณวันที่และเวลารวมถึงหาวิธีการทำ interop ทั้งสอง. พอร์ตอัตโนมัติ (a la J #) อาจเป็นไปได้ แต่ผลลัพธ์ที่ได้จะไม่เป็น API ที่น่าใช้และน่าใช้จาก C #


11

บางคนทำเพื่อช่วยเรียนรู้ภาษาใหม่ พวกเขาเลือก lib ที่พวกเขาคุ้นเคยในภาษาก่อนหน้าดูว่ามีความจำเป็นในภาษาใหม่และเริ่มย้ายมัน

การย้ายสิ่งที่คุ้นเคยเป็นวิธีที่ดีที่สุดในการมุ่งเน้นเฉพาะส่วนภาษาของภาษาใหม่และไม่ต้องกังวลเกี่ยวกับโดเมนปัญหา

นอกจากนี้ยังมีประโยชน์เพิ่มเติมเมื่อทำเสร็จแล้วไม่ทิ้งรหัสเช่นโครงการตัวอย่างจำนวนมากที่พบในหนังสือหรือการสอนจะเป็นสิ่งที่ชุมชนสามารถใช้เพิ่มจริง ๆ พูดคุย ฯลฯ


0

บางครั้งคุณกำลังพัฒนาสำหรับแพลตฟอร์มที่เครื่องมือเขียนซอฟต์แวร์ (Java ในกรณีของ Lucene) ไม่ใช่ตัวเลือก หากคุณต้องการคุณสมบัติโดยไม่ต้องปรับโครงสร้างรหัสใหม่อีกครั้งคุณควรโอนย้ายรหัสนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.