กลับไปหน้าบทความ

อ่าน 3 นาที

libffi

libffi เป็น ไลบรารี อินเทอร์เฟซฟังก์ชันภายนอก มันมี อินเท อร์เฟซภาษา C สำหรับเรียกใช้ ฟังก์ชัน ที่คอมไพล์แบบเนทีฟ โดยให้ข้อมูลเกี่ยวกับ ฟังก์ชัน เป้าหมาย ในขณะ รันไทม์...

libffi

libffi
นักพัฒนาแอนโทนี่ กรีน
ปล่อย7 ตุลาคม 2539 ( 7 ตุลาคม 1996 )
เวอร์ชันเสถียร
3.6.0 [ 1 ] แก้ไขข้อมูลนี้บนวิกิดาต้า / 20 มิถุนายน 2026 ( 20 มิถุนายน 2026 )
เขียนเป็นC , ภาษาแอสเซมบลี
ระบบปฏิบัติการระบบปฏิบัติการคล้าย Unix , Microsoft Windows , OS X , iOS , ระบบฮาร์ดแวร์โดยตรง
พิมพ์ไลบรารีรันไทม์
ใบอนุญาตใบอนุญาต MIT [ 2 ]
เว็บไซต์sourceware.org/libffi/ แก้ไขข้อมูลนี้บนวิกิดาต้า
ที่เก็บข้อมูล
  • github.com/libffi/libffi

libffiเป็น ไลบรารี อินเทอร์เฟซฟังก์ชันภายนอกมันมี อินเท อร์เฟซภาษา Cสำหรับเรียกใช้ฟังก์ชัน ที่คอมไพล์แบบเนทีฟ โดยให้ข้อมูลเกี่ยวกับฟังก์ชัน เป้าหมาย ในขณะรันไทม์แทนที่จะเป็นใน ขณะ คอมไพล์นอกจากนี้ มันยังใช้งานฟังก์ชันตรงกันข้ามได้ด้วย กล่าวคือ libffi สามารถสร้างพอยเตอร์ไปยังฟังก์ชันที่สามารถรับและถอดรหัสอาร์กิวเมนต์ใดๆ ก็ได้ที่กำหนดไว้ในขณะรันไทม์

libffi มักถูกใช้เป็น เทคโนโลยี เชื่อมต่อระหว่าง การใช้งานภาษาโปรแกรม แบบคอมไพล์และแบบอินเตอร์พรีเตอร์นอกจากนี้ libffi ยังอาจถูกใช้เพื่อสร้างปลั๊กอินโดยที่ลายเซ็นฟังก์ชันของปลั๊กอินนั้นไม่เป็นที่รู้จักในขณะที่สร้างแอปพลิเคชันหลัก

ผู้ใช้ที่โดดเด่น ได้แก่Python , Haskell , Dalvik , F-Script , PyPy , PyObjC , RubyCocoa , JRuby , Rubinius , MacRuby , gcj , GNU Smalltalk , IcedTea , Cycript , Pawn , Java Native Access , Common Lisp (ผ่าน CFFI), Racket , [ 3 ] Embeddable Common LispและMozilla [ 4 ]

บนMac OS Xนั้น libffi มักใช้ร่วมกับBridgeSupportซึ่งให้คำอธิบายอินเทอร์เฟซของเฟรมเวิร์กที่ไม่ขึ้นกับภาษาโปรแกรม และ Nu ซึ่งเชื่อมโยง การเข้าถึง Objective-C โดยตรง จากLisp

libffi ได้รับการพอร์ตไปยังแพลตฟอร์มต่างๆ อย่างแพร่หลาย และเผยแพร่ภายใต้ใบอนุญาต MIT

พื้นหลัง

แม้ว่าภาษาโปรแกรม C จะแพร่หลายในหลายแพลตฟอร์ม แต่รูปแบบการเรียกใช้ฟังก์ชันในโค้ดเครื่อง – ข้อกำหนดการเรียกใช้ฟังก์ชัน – นั้นแตกต่างกันไป เมื่อต้องการโหลดซับรูทีนแบบไดนามิกในระหว่างการทำงาน จำเป็นต้องมีความรู้เกี่ยวกับข้อกำหนดเหล่านี้

libffi มีความรู้เกี่ยวกับข้อกำหนดการเรียกฟังก์ชันบนแพลตฟอร์มต่างๆ (การรวมกันของโปรเซสเซอร์และระบบปฏิบัติการ) API ภาษา C ของ libffi ซึ่งใช้ร่วมกันในทุกเวอร์ชันของ libffi โดยไม่คำนึงถึง แพลตฟอร์ม จะช่วยลดความซับซ้อนของการโหลดโค้ดบนแพลตฟอร์มต่างๆ นอกจากฟังก์ชันทั่วไปแล้ว ยังรองรับฟังก์ชันแบบ variadic ใน รูปแบบภาษา C อีก ด้วย

ข้อกำหนดการเรียกฟังก์ชันแบบ C ไม่ได้ใช้เฉพาะในภาษา C เท่านั้น เนื่องจากมีโค้ดที่เขียนด้วยภาษา C อยู่เป็นจำนวนมาก ภาษาโปรแกรมคอมไพล์รุ่นใหม่ส่วนใหญ่จึงอนุญาตให้เขียนและเรียกฟังก์ชันตามข้อกำหนดดังกล่าวได้เช่นกัน ด้วยเหตุนี้ libffi จึงสามารถโต้ตอบกับฟังก์ชันบางฟังก์ชันที่เขียนด้วยภาษาเหล่านั้นได้ด้วย

ประวัติศาสตร์

libffi ซึ่งเดิมพัฒนาโดย Anthony Green ได้รับแรงบันดาลใจจากไลบรารี Gencall ของSilicon Graphics Gencall พัฒนาโดย Gianni Mariani ซึ่งในขณะนั้นทำงานอยู่ที่SGIโดยมีจุดประสงค์เพื่ออนุญาตให้เรียกฟังก์ชันโดยใช้ที่อยู่ และสร้างเฟรมการเรียกสำหรับข้อกำหนดการเรียกเฉพาะ ( MIPS O32) Anthony Green ได้ปรับปรุงแนวคิดและขยายไปสู่สถาปัตยกรรมและข้อกำหนดการเรียกอื่นๆ และเปิดเผยซอร์สโค้ดของ libffi

การรับเลี้ยงบุตรบุญธรรม

ไลบรารี libffi มีประโยชน์ในการสร้างสะพานเชื่อมระหว่างโค้ดที่ถูกตีความและโค้ดที่ถูกคอมไพล์แบบเนทีฟ ผู้ใช้งานที่โดดเด่นบางราย ได้แก่:

ดี

libffi-d
ส่วนเชื่อมต่อกับไลบรารี libffi สำหรับภาษา D ส่วนใหญ่ใช้สำหรับMCI (Managed Compiler Infrastructure)

เอฟ-สคริปต์

เอฟ-สคริปต์
สร้างคลาส Cocoa ที่เขียนด้วย F-Script แบบไดนามิก

กิล

จีเอ็นยู ไกล์
libffi ถูกใช้ใน Guile เวอร์ชัน 1.9.8 ขึ้นไป

ฮัสเคลล์

จีเอชซี
libffi ถูกนำมาใช้ในการทดสอบ FFI ส่วนใหญ่ที่ดำเนินการโดย GHC ตั้งแต่ปลายปี 2009 เป็นต้นมา

ชวา

โอเพ่นเจดีเค
การใช้งาน Java Platform Standard Edition แบบโอเพนซอร์สใช้ไลบรารี libffi เพื่อเชื่อมต่อระหว่างตัวแปลภาษาและโค้ดเนทีฟสำหรับการพอร์ตแบบ Zero-Assembly
ดัลวิก
Dalvik คือเครื่องเสมือนที่ใช้รันแพลตฟอร์ม Java บน อุปกรณ์มือถือ Androidส่วน libffi นั้นใช้ในเวอร์ชัน Android ที่ไม่มีการเขียนโค้ดเชื่อมต่อแบบกำหนดเอง
Java Native Access (JNA)
วิธีการเรียกใช้โค้ดเนทีฟจาก Java โดยไม่ต้องใช้ JNI
จีซีเจ
ไลบรารีรันไทม์สำหรับคอมไพเลอร์ GNU สำหรับภาษาการเขียนโปรแกรม Java ใช้ libffi ในการจัดการการเรียกไปมาระหว่างโค้ดที่ถูกตีความและโค้ดที่คอมไพล์แบบเนทีฟ gcj เป็นส่วนหนึ่งของ GCC ซึ่งเป็นชุดคอมไพเลอร์ของ GNU

โค้ด JavaScript

เจเอสโคโคอา
เรียกใช้โค้ด Objective-C จาก JavaScript บน Mac OS X และ iPhone (ผ่านทางพอร์ต libffi-iphone)
โมซโมซา
libffi ถูกใช้ใน ไลบรารี js-ctypes (เดิมชื่อ ctypes.jsm) เพื่อเรียกฟังก์ชัน C ภายใน โค้ด JavaScript (มีให้ใช้งานในแอปพลิเคชันXULRunner ส่วนขยาย Firefoxเป็นต้น) [ 5 ]
โหนด-เอฟฟี่
ส่วน เสริม Node.jsสำหรับโหลดและเรียกใช้ไลบรารีแบบไดนามิกจาก JavaScript

ลิสป์

ซีเอฟฟี่-ลิบเอฟฟี่
ไลบรารีอินเทอร์เฟซฟังก์ชันต่างประเทศมาตรฐานสำหรับ Common Lisp CFFIประกอบด้วยระบบ cffi-libffi เพื่อรองรับการส่งผ่านและการส่งคืนอาร์กิวเมนต์โครงสร้างโดยค่า
พิกซี่
pixie ( ภาษา Lisp ที่ได้รับแรงบันดาลใจ จาก Clojure ) ใช้ libffi เป็นกลไกอินเทอร์เฟซฟังก์ชันภายนอกเริ่มต้น

เพิร์ล

FFI::ดิบ
ห่อหุ้ม libffi ไว้บางๆ
FFI::แพลทิปัส
ไลบรารี libffi เวอร์ชันใหม่ที่ใช้งานสะดวกกว่าเดิม

ไพธอน

การเรียกใช้ไลบรารีที่ใช้ร่วมกันจากภายในสคริปต์ Python
ซีพีไพธอน
การใช้งานภาษาโปรแกรม Python ที่เป็นที่นิยมและแพร่หลายที่สุดโดยทั่วไปจะใช้ไลบรารี libffi ซึ่งเป็นส่วนหนึ่งของไลบรารี ctypes มาตรฐาน
ไพโอบเจซี
เรียกใช้โค้ด Objective-C จาก Python บน Mac OS X

แร็กเก็ต

แร็กเก็ต
เรียกใช้โค้ด C จากการใช้งาน Scheme ที่ได้รับความนิยมนี้

ทับทิม

ซอ
ตัวห่อหุ้ม libffi ในไลบรารีมาตรฐานของ Ruby
รูบี้-เอฟเอฟไอ
ส่วนขยาย Foreign Function Interface สำหรับ Ruby
รูบี้โกโก้
เรียกใช้โค้ด Objective-C จาก Ruby บน Mac OS X
  • เว็บไซต์อย่างเป็นทางการแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
  • บล็อกของแอนโทนี่ กรีน
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Libffi&oldid=1357708411 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ libffi

libffi เป็น ไลบรารี อินเทอร์เฟซฟังก์ชันภายนอก มันมี อินเท อร์เฟซภาษา C สำหรับเรียกใช้ ฟังก์ชัน ที่คอมไพล์แบบเนทีฟ โดยให้ข้อมูลเกี่ยวกับ ฟังก์ชัน เป้าหมาย ในขณะ รันไทม์...

พื้นหลัง

แม้ว่าภาษาโปรแกรม C จะแพร่หลายในหลายแพลตฟอร์ม แต่รูปแบบการเรียกใช้ฟังก์ชันในโค้ดเครื่อง – ข้อกำหนดการเรียกใช้ฟังก์ชัน – นั้นแตกต่างกันไป เมื่อต้องการโหลดซับรูทีนแบบไดนามิกในระหว่างการทำงาน จำเป็นต้องมีความรู้เกี่ยวกับข้อกำหนดเหล่านี้

ประวัติศาสตร์

libffi ซึ่งเดิมพัฒนาโดย Anthony Green ได้รับแรงบันดาลใจจากไลบรารี Gencall ของ Silicon Graphics Gencall พัฒนาโดย Gianni Mariani ซึ่งในขณะนั้นทำงานอยู่ที่ SGI โดยมีจุดประสงค์เพื่ออนุญาตให้เรียกฟังก์ชันโดยใช้ที่อยู่...

การรับเลี้ยงบุตรบุญธรรม

ไลบรารี libffi มีประโยชน์ในการสร้างสะพานเชื่อมระหว่างโค้ดที่ถูกตีความและโค้ดที่ถูกคอมไพล์แบบเนทีฟ ผู้ใช้งานที่โดดเด่นบางราย ได้แก่: