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

อ่าน 4 นาที

การเชื่อมต่อ (การเขียนโปรแกรม)

ใน วิทยาการคอมพิวเตอร์ การ เชื่อมต่อ (bridging) หมายถึงระบบที่เชื่อมโยงพฤติกรรมขณะทำงานของ ภาษาโปรแกรม ต่างๆ เพื่อให้สามารถใช้ทรัพยากรร่วมกันได้ โดยมักใช้เพื่ออนุญาตให้ภาษา...

การเชื่อมต่อ (การเขียนโปรแกรม)

ในวิทยาการคอมพิวเตอร์การเชื่อมต่อ (bridging)หมายถึงระบบที่เชื่อมโยงพฤติกรรมขณะทำงานของภาษาโปรแกรม ต่างๆ เพื่อให้สามารถใช้ทรัพยากรร่วมกันได้ โดยมักใช้เพื่ออนุญาตให้ภาษา "ต่างประเทศ" สามารถทำงานกับไลบรารีออบเจ็กต์ ดั้งเดิมของแพลตฟอร์มโฮสต์ ได้ โดยการแปลข้อมูลและสถานะระหว่างสองฝั่งของการเชื่อมต่อ การเชื่อมต่อแตกต่างจากระบบ "ฝังตัว" (embedding) ซึ่งอนุญาตให้มีการโต้ตอบอย่างจำกัดผ่าน กลไกแบบ กล่องดำโดยที่การแบ่งปันสถานะมีจำกัดหรือไม่มีเลย

บริษัท Apple Inc.ได้ใช้การเชื่อมต่อ (bridging) อย่างมากในหลายโอกาส โดยเฉพาะอย่างยิ่งในMac OS X เวอร์ชันแรกๆ ซึ่งเชื่อมต่อกับระบบ "คลาสสิก" รุ่นเก่าโดยใช้ ระบบ CarbonรวมถึงJava ส่วน Common Language RuntimeของMicrosoftซึ่งเปิดตัวพร้อมกับ. NET Framework นั้นถูกออกแบบมาให้รองรับหลายภาษาตั้งแต่เริ่มต้น และหลีกเลี่ยงความจำเป็นในการใช้โซลูชันการเชื่อมต่อที่ซับซ้อน ทั้งสองแพลตฟอร์มได้เพิ่มระบบการเชื่อมต่อใหม่สำหรับ JavaScriptในช่วงไม่นานมานี้ ได้แก่ObjC-to-JS ของ Apple และ HTML Bridge ของ Microsoft

แนวคิด

ฟังก์ชัน ไลบรารี และรันไทม์

ภาษาโปรแกรมส่วนใหญ่มีแนวคิดเรื่องซับรูทีนหรือฟังก์ชัน ซึ่งเป็นกลไกที่ช่วยให้สามารถรวบรวมและนำโค้ดที่ใช้บ่อยมาใช้ซ้ำได้ตลอดทั้งโปรแกรม ตัวอย่างเช่น โปรแกรมที่ใช้คณิตศาสตร์อย่างหนักอาจต้อง คำนวณ รากที่สองของตัวเลขต่างๆ ตลอดทั้งโปรแกรม ดังนั้นโค้ดส่วนนี้อาจถูกแยกไว้ในsqrt(aNumber)ฟังก์ชันที่ "รับ" ตัวเลขที่จะคำนวณรากที่สองเข้าไป และ "ส่งคืน" ผลลัพธ์ ในหลายกรณี โค้ดดังกล่าวมีอยู่แล้ว ไม่ว่าจะถูกนำไปใช้ในฮาร์ดแวร์หรือเป็นส่วนหนึ่งของระบบปฏิบัติการ ที่ โปรแกรมทำงานอยู่ ในกรณีเหล่านี้sqrtฟังก์ชันสามารถทำให้ง่ายขึ้นได้อีกโดยการเรียกใช้โค้ดที่สร้างไว้แล้ว

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

โดยทั่วไปแล้ว ภาษาและแพลตฟอร์มคอมพิวเตอร์ส่วนใหญ่ได้เพิ่มฟังก์ชันการทำงานที่ไม่สามารถแสดงออกมาได้ในรูปแบบการเรียก/ส่งคืนของฟังก์ชัน เช่น การจัดการหน่วยความ จำ (Garbage collection ) ซึ่งทำงานตลอดอายุการใช้งานของแอปพลิเคชัน ฟังก์ชันการทำงานประเภทนี้จึงอยู่ "นอก" โปรแกรม กล่าวคือมีอยู่แต่ไม่ได้แสดงออกมาโดยตรงในโปรแกรม ฟังก์ชันเหล่านี้มักถูกนำไปใช้ใน ระบบ รันไทม์ (runtime system) ซึ่งเป็นไลบรารีที่ถูกคอมไพล์เข้าไปในโปรแกรม แต่ไม่จำเป็นต้องมองเห็นได้ในโค้ด

ไลบรารีที่ใช้ร่วมกันและรันไทม์ทั่วไป

การนำ ระบบ ไลบรารีแบบใช้ร่วมกันมาใช้ได้เปลี่ยนแปลงรูปแบบการสร้างโปรแกรมแบบเดิมไปอย่างมาก ในอดีต โค้ดไลบรารีจะถูกคัดลอกเข้าไปในโปรแกรมโดยตรงโดย " ลิงเกอร์ " และกลายเป็นส่วนหนึ่งของโปรแกรมโดยปริยาย แต่ด้วยการเชื่อมโยงแบบไดนามิกโค้ดไลบรารี (โดยปกติ) จะมีอยู่เพียงที่เดียว คือไฟล์ที่ผู้จำหน่ายจัดหาให้ในระบบ ซึ่งแอปพลิเคชันทั้งหมดใช้ร่วมกัน ระบบในยุคแรกๆ มีปัญหามากมาย โดยเฉพาะอย่างยิ่งในด้านประสิทธิภาพ และไลบรารีแบบใช้ร่วมกันส่วนใหญ่จำกัดอยู่เฉพาะภาษาหรือแพลตฟอร์มใดแพลตฟอร์มหนึ่งเท่านั้น ไม่ได้ใช้งานในระบบปฏิบัติการโดยรวม ปัญหาเหล่านี้ได้รับการแก้ไขไปมากในช่วงทศวรรษ 1990 และในช่วงต้นทศวรรษ 2000 แพลตฟอร์มหลักส่วนใหญ่ได้เปลี่ยนมาใช้ไลบรารีแบบใช้ร่วมกันเป็นอินเทอร์เฟซหลักสำหรับระบบทั้งหมดแล้ว

แม้ว่าระบบดังกล่าวจะแก้ไขปัญหาการจัดหาไลบรารีโค้ดทั่วไปสำหรับแอปพลิเคชันใหม่ๆ แต่โดยทั่วไปแล้วระบบเหล่านี้ก็มักจะเพิ่มรันไทม์ของตนเองเข้าไปด้วย ซึ่งหมายความว่าภาษา ไลบรารี และตอนนี้ทั้งระบบ มักจะเชื่อมโยงกันอย่างแน่นหนา ตัวอย่างเช่น ภายใต้OpenStepระบบปฏิบัติการทั้งหมดก็คือ โปรแกรม Objective-Cนั่นเอง โปรแกรมใดๆ ที่ทำงานบนระบบนั้นและต้องการใช้ชุดอ็อบเจ็กต์ที่ครอบคลุมซึ่งมีให้ใน OpenStep จะต้องไม่เพียงแต่สามารถเรียกใช้ไลบรารีเหล่านั้นโดยใช้ความหมายของ Objective-C เท่านั้น แต่ยังต้องโต้ตอบกับรันไทม์ของ Objective-C เพื่อให้สามารถควบคุมแอปพลิเคชันได้ในระดับพื้นฐานด้วย

ในทางตรงกันข้าม . NET FrameworkของMicrosoftได้รับการออกแบบมาตั้งแต่เริ่มต้นให้สามารถรองรับหลายภาษา โดยเริ่มแรกคือC# , C++ และ Visual Basicเวอร์ชันใหม่เพื่อทำเช่นนั้น Microsoft ได้แยกไลบรารีออบเจ็กต์และรันไทม์เข้าไว้ในโครงสร้างพื้นฐานภาษาทั่วไป (CLI) แทนที่จะให้โปรแกรมคอมไพล์โดยตรงจากซอร์สโค้ดไปยังรูปแบบรันไทม์พื้นฐาน เช่นเดียวกับในภาษาโปรแกรมส่วนใหญ่ ภายใต้โมเดล CLI ภาษาทั้งหมดจะถูกคอมไพล์เป็นภาษาระดับกลางทั่วไป (CIL) ก่อน จากนั้นจึงเรียกใช้รันไทม์ภาษาทั่วไป (CLR) ในทางทฤษฎี ภาษาโปรแกรมใดๆ ก็สามารถใช้ระบบ CLI และใช้ออบเจ็กต์ .NET ได้

การเชื่อมต่อ

แม้ว่าแพลตฟอร์มอย่าง OSX และ .NET จะเปิดโอกาสให้ภาษาโปรแกรมส่วนใหญ่สามารถปรับใช้กับระบบรันไทม์ของแพลตฟอร์มได้ แต่ก็เป็นความจริงที่ว่าภาษาโปรแกรมเหล่านี้มักจะมีรันไทม์เป้าหมายที่กำหนดไว้ล่วงหน้าอยู่แล้ว เช่นObjective-Cต้องการรันไทม์ Obj-C ในขณะที่ C# ก็ต้องการ CLR เช่นกัน หากต้องการใช้โค้ด C# ใน Obj-C หรือในทางกลับกัน ก็ต้องหาเวอร์ชันที่เขียนขึ้นเพื่อใช้กับรันไทม์อีกตัว ซึ่งมักจะหาได้ยาก

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

การเกิดขึ้นของเว็บเบราว์เซอร์ในฐานะระบบปฏิบัติการเสมือนจริงชนิดหนึ่ง ทำให้ปัญหานี้รุนแรงขึ้น รูปแบบการ "เขียนโปรแกรม" สมัยใหม่ภายใต้HTML5ประกอบด้วย ภาษา JavaScript (JS), Document Object Model ( DMO) เป็นไลบรารีหลัก และเบราว์เซอร์เองเป็นสภาพแวดล้อมการทำงาน ถึงแม้ว่าจะเป็นไปได้ที่จะสร้างเวอร์ชันของ JS ที่ทำงานบน CLR (Computer-Linguistic Library) แต่การทำเช่นนั้นจะทำให้จุดประสงค์หลักของภาษาที่ออกแบบมาเพื่อใช้งานในเบราว์เซอร์นั้นเสียไป เว้นแต่ว่าคอมไพเลอร์นั้นจะสามารถโต้ตอบกับเบราว์เซอร์ได้โดยตรง การใช้งานมันก็แทบจะไม่มีประโยชน์อะไรเลย

ในกรณีเหล่านี้ และอีกหลายกรณีที่คล้ายกัน จำเป็นต้องมีระบบที่ช่วยให้รันไทม์ทั้งสองสามารถทำงานร่วมกันได้ ซึ่งเรียกว่า "การเชื่อมต่อ" รันไทม์

ตัวอย่าง

แอปเปิล

Apple ได้ใช้เทคโนโลยีเชื่อมต่ออย่างมากนับตั้งแต่ความพยายามครั้งแรกที่นำไปสู่การพัฒนาMac OS X

เมื่อ Apple ซื้อ NeXT ครั้งแรก แผนคือการสร้าง OpenStep เวอร์ชันใหม่ ซึ่งในขณะนั้นรู้จักกันในชื่อRhapsodyพร้อมด้วยโปรแกรมจำลองที่เรียกว่า Blue Box ที่จะเรียกใช้โปรแกรม Mac OS แบบ "คลาสสิก" สิ่งนี้ทำให้เกิดการต่อต้านอย่างมากจากชุมชนนักพัฒนา และ Rhapsody ก็ถูกยกเลิก[ 1 ]แทนที่ด้วย OS X ที่จะนำการเรียกใช้ Mac OS รุ่นเก่าจำนวนมากมาใช้บนฟังก์ชันหลักใน OpenStep ซึ่งเป็นเส้นทางให้แอปพลิเคชันที่มีอยู่สามารถย้ายไปข้างหน้าได้อย่างราบรื่น

เพื่อดำเนินการนี้ Apple ได้นำโค้ดที่มีประโยชน์จากแพลตฟอร์ม OpenStep มาใช้และเขียนฟังก์ชันหลักขึ้นใหม่ในไลบรารี C บริสุทธิ์ที่เรียกว่าCore Foundationหรือ CF ย่อๆ ไลบรารีของ OpenStep ที่เรียกใช้โค้ดพื้นฐานของ CF กลายเป็นCocoa APIในขณะที่ไลบรารี C ที่คล้ายกับ Mac ใหม่กลายเป็นCarbon APIเนื่องจากฝั่ง C และ Obj-C ของระบบจำเป็นต้องแชร์ข้อมูล และข้อมูลในฝั่ง Obj-C มักจะถูกจัดเก็บในอ็อบเจ็กต์ (ตรงข้ามกับประเภทพื้นฐาน) การแปลงไปและกลับจาก CF อาจมีค่าใช้จ่ายสูง Apple ไม่เต็มใจที่จะจ่ายค่าปรับประสิทธิภาพนี้ ดังนั้นพวกเขาจึงใช้แผนการที่เรียกว่า "toll-free bridging" เพื่อช่วยลดหรือขจัดปัญหานี้[ 2 ]

ในขณะนั้น Java กำลังกลายเป็นผู้เล่นหลักในโลกการเขียนโปรแกรม และ Apple ยังได้จัดเตรียมโซลูชันการเชื่อมต่อ Java ที่พัฒนาขึ้นสำหรับ แพลตฟอร์ม WebObjectsซึ่งเป็นโซลูชันการเชื่อมต่อแบบคลาสสิกมากขึ้น โดยมีการแปลงโดยตรงระหว่างประเภท Java และ OpenStep/CF ในโค้ดเมื่อจำเป็น ภายใต้ Carbon โปรแกรมที่ใช้ CFStrings จะใช้โค้ดเดียวกันกับแอปพลิเคชัน Cocoa ที่ใช้ NSString และสามารถเชื่อมต่อกันได้โดยไม่ต้องเสียค่าใช้จ่ายใดๆ ด้วยการเชื่อมต่อ Java นั้น CFStrings จะถูกแปลงเป็นออบเจ็กต์ String ของ Java เอง ซึ่งต้องใช้ความพยายามมากขึ้น แต่ทำให้การพอร์ตแทบมองไม่เห็น[ 3 ]นักพัฒนาซอฟต์แวร์รายอื่นใช้เทคโนโลยีที่คล้ายกันอย่างแพร่หลายเพื่อรองรับภาษาอื่นๆ รวมถึงระบบ "peering" ที่ใช้เพื่อให้โค้ด Obj-C สามารถเรียกใช้โค้ด .NET ภายใต้Mono ได้[ 4 ]

เนื่องจากความต้องการโซลูชันการพอร์ตเหล่านี้ลดลง ทั้ง Carbon และ Java Bridge จึงถูกยกเลิกและในที่สุดก็ถูกลบออกจากระบบเวอร์ชันต่อมา[ 5 ] [ 6 ]การสนับสนุน Java ถูกย้ายไปใช้Java Native Interface (JNI) ซึ่งเป็นมาตรฐานจากโลกของ Java ที่อนุญาตให้ Java โต้ตอบกับโค้ดที่ใช้ C บน OSX JNI อนุญาตให้ใช้โค้ด Obj-C ได้ แต่ก็มีข้อจำกัดอยู่บ้าง[ 7 ]

ประมาณปี 2012 การทำงานอย่างกว้างขวางของ Apple เกี่ยวกับWebKitนำไปสู่การแนะนำเทคโนโลยีการเชื่อมต่อใหม่ที่อนุญาตให้ โค้ดโปรแกรม JavaScriptเรียกใช้รันไทม์ Obj-C/Cocoa และในทางกลับกัน ซึ่งช่วยให้สามารถทำงานอัตโนมัติของเบราว์เซอร์โดยใช้ Obj-C หรืออีกทางหนึ่งคือการทำงานอัตโนมัติของแอปพลิเคชัน Cocoa โดยใช้ JavaScript เดิมทีเป็นส่วนหนึ่งของเว็บเบราว์เซอร์ Safariในปี 2013 โค้ดนี้ได้รับการเลื่อนขั้นให้เป็นส่วนหนึ่งของ OSX 10.9 ใหม่[ 8 ]

ไมโครซอฟต์

แม้ว่าจะมีตัวอย่างการใช้บริดจ์ในอดีตอยู่บ้าง แต่ระบบ CLI ของ Microsoft ถูกออกแบบมาเพื่อรองรับภาษาต่างๆ บนระบบ .NET มากกว่าที่จะทำงานภายใต้รันไทม์ดั้งเดิมและใช้บริดจ์ สิ่งนี้ทำให้มีการพัฒนาภาษาใหม่ๆ จำนวนมากในระบบ CLI ซึ่งมักจะมีเครื่องหมายแฮช (#) หรือคำว่า "Iron" อยู่ในชื่อ ดูรายการภาษา CLIเพื่อดูตัวอย่างที่ครอบคลุมมากขึ้น แนวคิดนี้ถูกมองว่าเป็นตัวอย่างของ พฤติกรรม "ยอมรับ ขยาย และกำจัด" ของ Microsoft เนื่องจากได้สร้างภาษาที่คล้ายกับ Java (เช่น C# และJ# ) ซึ่งไม่สามารถทำงานร่วมกับโค้ด Java อื่นๆ หรือใช้ไลบรารีของ Java ได้

อย่างไรก็ตาม ระบบนิเวศ Windows แบบ "คลาสสิก" ประกอบด้วยโค้ดจำนวนมากที่จำเป็นต้องใช้ภายในโลก .NET และสำหรับบทบาทนี้ MS ได้แนะนำระบบเชื่อมต่อที่ได้รับการสนับสนุนเป็นอย่างดี ระบบนี้ประกอบด้วยยูทิลิตี้และคุณสมบัติภาษามากมายเพื่ออำนวยความสะดวกในการใช้โค้ด Windows หรือ Visual Basic ภายในระบบ .NET [ 9 ]หรือในทางกลับกัน[ 10 ]

นอกจากนี้ Microsoft ยังได้แนะนำเทคโนโลยีการเชื่อมต่อ JavaScript สำหรับSilverlightซึ่งก็คือ HTML Bridge โดย Bridge จะเปิดเผยประเภท JS ให้กับโค้ด .NET และประเภท .NET ให้กับโค้ด JS รวมถึงจัดการหน่วยความจำและความปลอดภัยในการเข้าถึงระหว่างกัน[ 11 ] [ 12 ]

ตัวอย่างอื่นๆ

เทคโนโลยีการเชื่อมต่อที่คล้ายกัน ซึ่งมักจะมี JavaScript อยู่ด้านหนึ่ง เป็นเรื่องปกติในแพลตฟอร์มต่างๆ ตัวอย่างหนึ่งคือ JS bridge สำหรับระบบปฏิบัติการ Androidที่เขียนเป็นตัวอย่าง[ 13 ]

บางครั้งคำนี้ยังใช้เพื่ออธิบาย ระบบ การแมปออบเจ็กต์เชิงสัมพันธ์ซึ่งเป็นตัวเชื่อมช่องว่างระหว่าง โลกของฐานข้อมูล SQLและภาษาการเขียนโปรแกรมเชิงวัตถุสมัยใหม่

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Bridging_(programming)&oldid=1183000446 "

สรุปเนื้อหา

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

ข้อมูลสำคัญเกี่ยวกับ การเชื่อมต่อ (การเขียนโปรแกรม)

ใน วิทยาการคอมพิวเตอร์ การ เชื่อมต่อ (bridging) หมายถึงระบบที่เชื่อมโยงพฤติกรรมขณะทำงานของ ภาษาโปรแกรม ต่างๆ เพื่อให้สามารถใช้ทรัพยากรร่วมกันได้ โดยมักใช้เพื่ออนุญาตให้ภาษา...

ฟังก์ชัน ไลบรารี และรันไทม์

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

ไลบรารีที่ใช้ร่วมกันและรันไทม์ทั่วไป

การนำ ระบบ ไลบรารีแบบใช้ร่วมกันมาใช้ได้ เปลี่ยนแปลงรูปแบบการสร้างโปรแกรมแบบเดิมไปอย่างมาก ในอดีต โค้ดไลบรารีจะถูกคัดลอกเข้าไปในโปรแกรมโดยตรงโดย " ลิงเกอร์ " และกลายเป็นส่วนหนึ่งของโปรแกรมโดยปริยาย แต่ด้วย การเชื่อมโยงแบบไดนามิก โค้ดไลบรารี (โดยปกติ)...

การเชื่อมต่อ

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