Library ของโปรแกรม
แนะนำใหม่| English | ความหมาย |
|---|---|
| program library/ˈprəʊɡræm ˈlaɪbrəri/ | โปรแกรมไลบรารี |
| subroutines/ˈsʌbruːtiːnz/ | ซับรูทีน |
| library routines/ˈlaɪbrəri ruːˈtiːnz/ | ไลบรารีรูทีน |
| static library/ˈstætɪk ˈlaɪbrəri/ | ไลบรารีแบบสแตติก |
| executable/ɪɡˈzekjʊtəbl/ | ไฟล์ที่รันได้ |
| dynamic library/daɪˈnæmɪk ˈlaɪbrəri/ | ไลบรารีแบบไดนามิก |
บรรทัดที่ 11 ที่ทำให้อินเทอร์เน็ตล่ม
- ในเดือนมีนาคม 2016 นักพัฒนาได้ลบ library เล็กๆ ชื่อ
left-padออกจาก repos公开. มันยาวสิบหนึ่งบรรทัด: เพิ่มช่องว่างที่หน้า string - ภายในไม่กี่ชั่วโมง, การ build ล้มเหลวในบริษัททั่วโลก. หลายพันโปรแกรมไม่เคยเขียนสิบหนึ่งบรรทัดนั้น. พวกเขาทั้งหมดยืมมา, และการยืมนี้มองไม่เห็นจนกระทั่งหยุดทำงาน
- นั่นคือวิธีการสร้างซอฟต์แวร์สมัยใหม่ ไลบรารีโปรแกรม คือการยืม which is done on purpose, and this lesson is what it gives a developer, what it costs, and the two ways it can be attached to a program.
ไลบรารีโปรแกรมคืออะไร
- ไลบรารีโปรแกรม คือชุดของ routine ที่เขียนและทดสอบแล้ว subroutines, classes และ modules ที่โปรแกรมสามารถใช้แทนการเขียนเอง
- ไลบรารีคณิตศาสตร์ ไลบรารีกราฟิก ไลบรารีเครือข่าย ไลบรารีการหาเส้นทาง ไลบรารีการบีบอัด: แต่ละตัวแก้ปัญหาหนึ่งในด้านเฉพาะ once, for every program that needs it.
- ซอฟต์แวร์ที่กำลังพัฒนาโดยปกติจะสร้างจาก routine ของไลบรารี เหล่านี้บวกกับโค้ดที่เป็นเอกลักษณ์ของโปรแกรมใหม่

โค้ดใหม่คือส่วนเล็ก; โค้ดยืมคือส่วนใหญ่
ห้องปฏิบัติการแนวคิดการคำนวณ
จัดกลุ่มตัวอย่างที่เป็นรูปธรรมตาม idea การคำนวณที่แสดงออก
Program library คือ:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ไลบรารีให้โค้ดสำเร็จรูปที่ทดสอบแล้ว (คณิตศาสตร์, กราฟิก, เครือข่าย…) ที่โปรแกรมสามารถเรียกใช้แทนการเขียนเอง
ชุดของโค้ดสำเร็จรูป ใช้ซ้ำได้ และทดสอบแล้วคือ program ______
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ไลบรารีประหยัดเวลาและลดข้อผิดพลาด
ข้อดีสำหรับนักพัฒนา
- Routine เหล่านี้ เขียนและทดสอบไว้แล้ว ทำให้การพัฒนาเร็วและประหยัดกว่า
- They are reliable (เชื่อถือได้): ใช้โดยหลายโปรแกรม, ดังนั้นส่วนใหญ่ไร้ข้อผิดพลาด
- นักพัฒนา ไม่ต้องมีความเชี่ยวชาญ ด้านนั้น กราฟิก การเข้ารหัส การหาเส้นทาง และสามารถใช้เวลาไปกับฟีเจอร์ของโปรแกรมเอง
- โปรแกรม บำรุงรักษาง่ายขึ้น เพราะโค้ดร่วมกันอยู่ในที่เดียว และทีมสามารถทำงานขนานกันได้ สมาชิกแต่ละคนใช้ routine เดียวกัน
ประโยชน์ของการใช้ไลบรารีคือ โค้ดนั้น:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
โค้ดในไลบรารีผ่านการทดสอบ ใช้งานกว้างขวาง และเป็นมาตรฐาน — การใช้ซ้ำประหยัดเวลาและเพิ่มความน่าเชื่อถือ
ข้อดีใดบ้างสำหรับผู้พัฒนาเมื่อสร้างซอฟต์แวร์จาก routine ในไลบรารี? เลือก ทุก ข้อที่ถูกต้อง
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Routine ผ่านการทดสอบ ไม่ต้องมีความเชี่ยวชาญ การบำรุงรักษาง่ายขึ้น โค้ด本身的ต้องถูกทดสอบ
ข้อเสีย
- กิจกรรมอาจ ไม่ตรงกับความต้องการที่แท้จริง และนักพัฒนาไม่สามารถแก้ไขได้ ดังนั้นจึงต้องหาทางออกเพื่อรองรับข้อจำกัดของกิจกรรมนั้น
- โปรแกรม ขึ้นอยู่กับไลบรารี: ความผิดพลาด การอัปเดตที่หายไป หรือการถอนไลบรารีออก เช่นกับ
left-padจะกลายเป็นปัญหาของโปรแกรม - ใบอนุญาตของไลบรารีอาจจำกัดวิธีการจำหน่ายหรือแบ่งปันโปรแกรม และการมีกิจกรรมที่ไม่ได้ใช้จะทำให้โปรแกรมมีขนาดใหญขึ้น
ตัวอย่างทำโจทย์: โรぼตในร้านอาหาร
- ทีมหนึ่งกำลังเขียนซอฟต์แวร์สำหรับโรμποตในร้านอาหาร โดยใช้ไลบรารีโปรแกรมที่มีกิจกรรมในการค้นหาเส้นทางสั้นที่สุดระหว่างโต๊ะอาหาร อธิบายประโยชน์ 2 ประการและข้อเสีย 1 ประการต่อทีมนี้
- ประโยชน์: กิจกรรมถูกเขียนและทดสอบไว้แล้ว ทำให้ทีมประหยัดเวลาและมั่นใจในผลลัพธ์ ประโยชน์อีกประการคือ ทีมไม่จำเป็นต้องเข้าใจอัลกอริทึมการค้นหาเส้นทางเอง สามารถใช้เวลาไปพัฒนาคุณสมบัติเฉพาะของโรโบตแทน
- ข้อเสีย: กิจกรรมอาจไม่จัดการกับความต้องการที่แท้จริงของร้านอาหาร เช่น การเคลื่อนย้ายเก้าอี้ ทางเดินแบบทางเดียว และทีมไม่สามารถแก้ไขได้ จึงอาจต้องหาทางออกเพื่อรองรับข้อจำกัด
- เชื่อมโยงแต่ละจุดเข้ากับ ทีมนี้ และ กิจกรรมนี้ คำว่า "ประหยัดเวลา" แบบทั่วไปจะได้คะแนนน้อยกว่า "ประหยัดเวลาในการเขียนและทดสอบอัลกอริทึมการค้นหาเส้นทาง"
ข้อเสียใดสำหรับทีมหุ่นยนต์ที่ใช้ routine หาเส้นทางจากไลบรารี?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ทีมไม่สามารถเปลี่ยนโค้ดในไลบรารีได้ ดังนั้นความไม่ตรงกันใดๆ กับความต้องการของพวกเขาต้องถูก绕过。ไม่จำเป็นต้องเข้าใจอัลกอริทึมเป็นข้อดี ไม่ใช่ข้อเสีย
ไลบรารีแบบสแตติก (Static Libraries)
- ไลบรารีแบบสแตติกจะถูกคัดลอกเข้าไปใน ไฟล์ runnable (executable) เมื่อมีการคอมไพล์และลิงก์โปรแกรม
- จากนั้นโปรแกรมจะทำงานได้อย่างอิสระ ไม่ต้องพึ่งพาไฟล์อื่นในการรัน
- ค่าใช้จ่าย: ทุกโปรแกรมจะมีสำเนาของตัวเอง ทำให้ไฟล์ runnable มีขนาดใหญ่ขึ้น และการอัปเดตไลบรารีrequires สร้างใหม่ทุกโปรแกรมที่ใช้ไลบรารีนั่น
Static library แตกต่างจาก dynamic library เพราะมัน:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Static library ถูกฝังเข้ากับ executable; dynamic library โหลดในช่วง Run time และแชร์ระหว่างโปรแกรม
ไลบรารีแบบไดนามิกและไฟล์ DLL
- ไลบรารีแบบไดนามิก, Dynamic Link Library (DLL) บน Windows หรือไฟล์
.soบน Linux จะยังคงเป็น ไฟล์แยกต่างหาก และจะถูกโหลดเข้าสู่หน่วยความจำก็ต่อเมื่อโปรแกรมเรียกใช้งานเท่านั้น ซึ่งเกิดขึ้นในช่วง 运行时 (run time) - ไฟล์ runnable มีขนาดเล็กลง; โปรแกรมที่กำลังรันหลายตัวสามารถ แชร์สำเนาเดียวกันในหน่วยความจำ; และ DLL สามารถ อัปเดตได้ครั้งเดียว เพื่อแก้ไขปัญหาหรือรองรับอุปกรณ์ใหม่ โดยไม่ต้องคอมไพล์โปรแกรมที่ใช้มันอีกครั้ง
- ใช้หน่วยความจำเฉพาะตอนที่ไลบรารีถูกต้องการ ค่าใช้จ่าย: โปรแกรมจะไม่ทำงานหากขาดไฟล์ DLL หรือมีเวอร์ชันผิด

ถูกคัดลึกลงในช่วงคอมไพล์ หรือถูกโหลดและแชร์ในช่วง运行时
Dynamic library สามารถแชร์ได้โดยหลายโปรแกรมและอัปเดตครั้งเดียวสำหรับทั้งหมด
Difficulty 1/5 · 100 coins + a small bonus on first completion today
เนื่องจากโหลดในช่วง Run time Dynamic library ที่แชร์หนึ่งตัวรองรับหลายโปรแกรม; การอัปเดตมันแก้ปัญหาลงทุกโปรแกรมโดยไม่ต้องCompile ใหม่ทีละตัว
จับคู่คุณสมบัติแต่ละอย่างกับ Static หรือ Dynamic library
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Static linking คัดลอกโค้ดเข้าไปใน executable (ใหญ่กว่า, เป็นตัวเอง); Dynamic linking โหลดไลบรารีที่แชร์ในช่วง Run time (เล็กกว่า, อัปเดตได้ครั้งเดียวสำหรับทั้งหมด)
เรียงลำดับเหตุการณ์ของโปรแกรมที่ใช้ routine DLL
Difficulty 3/5 · 200 coins + a small bonus on first completion today
การโหลดเกิดขึ้นในช่วง运行的 (runtime) ในการเรียกใช้ครั้งแรก และคัดลอกเดียวจะให้บริการแก่ทุกโปรแกรม
ตัวอย่างทำโจทย์: ประโยชน์ของไฟล์ DLL
- นักพัฒนาซอฟต์แวร์ใช้ไฟล์ DLL อธิบายประโยชน์. [4]
- ไฟล์ runnable มีขนาดเล็กลง เนื่องจากโค้ดของไลบรารีไม่ได้ถูกคัดลึกลงไปในมัน
- สำเนา DLL ในหน่วยความจำหนึ่งตัว会被运行的所有使用该程序的程序共享 ช่วยประหยัดหน่วยความจำ
- สามารถอัปเดต DLL เพื่อแก้ไขปัญหาหรือรองรับอุปกรณ์ใหม่โดยไม่ต้องคอมไพล์หรือติดตั้งโปรแกรมที่เรียกใช้มันซ้ำ
- ไลบรารีจะถูกโหลดก็ต่อเมื่อต้องการใช้ จึงใช้หน่วยความจำเฉพาะตอนที่กิจกรรมถูกเรียกใช้
การเลือกแบบสแตติกหรือไดนามิก
- โปรแกรมต้องรันบนเครื่องที่ไม่สามารถติดตั้งอะไรเพิ่มได้ เป็นอุปกรณ์ฝังตัว หรือเป็นไฟล์ดาวน์โหลดเดียว: แบบสแตติก เพราะไฟล์ runnable มีความสมบูรณ์ในตัว
- โปรแกรมจำนวนมากบนระบบเดียวใช้กิจกรรมเดียวกัน หรือกิจกรรมมีการเปลี่ยนแปลงบ่อย: แบบไดนามิก เพราะมีสำเนาแชร์เพียงตัวเดียวซึ่งมีขนาดเล็กกว่า และอัปเดตได้ครั้งเดียวสำหรับทุกคน
- ให้เหตุผลด้วยผลดี-ผลเสีย: มีความสมบูรณ์แต่มีขนาดใหญ่และต้องสร้างใหม่เพื่ออัปเดต หรือมีขนาดเล็กและแชร์กันได้แต่ขึ้นอยู่กับไฟล์ที่มีอยู่จริง
โปรแกรมที่ต้อง运行的จากไฟล์เดียวบนอุปกรณ์ที่ไม่สามารถติดตั้งสิ่งอื่นได้ควรใช้ไดนามิกไลบรารี
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ไดนามิกไลบรารีเป็นไฟล์แยกต่างหากที่จำเป็นต้องมีอยู่ ส่วนสแตติกไลบรารีจะถูกคัดลอกเข้าไปในไฟล์ اجرایی ซึ่งนี่คือสิ่งที่โปรแกรมแบบครบวงจรต้องการ
คะแนนที่หลุดหายไป
- DLL ถูกโหลดในช่วง 运行时 ไม่ใช่ช่วงคอมไพล์ frases เดียวนี้คือเกณฑ์การให้คะแนน
- ประโยชน์เป็นของ นักพัฒนา: เขียนและทดสอบไว้แล้ว ไม่จำเป็นต้องมีความเชี่ยวชาญด้านนั้น การบำรุงรักษาง่ายขึ้น "โปรแกรมรันเร็วขึ้น" ไม่ได้อยู่ในรายการ
- ไลบรารีคือโค้ด ไม่ใช่เครื่องมือ IDE คือเครื่องมือ ส่วนไลบรารีคือสิ่งที่โปรแกรมเรียกใช้
- ข้อเสียต้องเป็นข้อเสียของ การใช้ไลบรารี: แก้ไขไม่ได้ อาจไม่ตรงใจ การพึ่งพา "มีค่าใช้จ่าย" มักไม่ใช่ประเด็นหลัก
คุณเข้าใจแล้ว
- ไลบรารีโปรแกรมคือโค้ดที่ถูกเขียนและทดสอบไว้ล่วงหน้าที่โปรแกรมเรียกใช้แทนการเขียนเอง
- ประโยชน์: พัฒนาได้รวดเร็วและประหยัดกว่า กิจกรรมเชื่อถือได้ ไม่ต้องมีความเชี่ยวชาญในพื้นที่นั้น บำรุงรักษาง่ายขึ้น ทีมงานทำงานพร้อมกันได้; ข้อเสีย: อาจไม่ตรงใจ แก้ไขไม่ได้ การพึ่งพา
- แบบสแตติก: คัดลึกลงไฟล์ runnable ในช่วงคอมไพล์ มีความสมบูรณ์แต่มีขนาดใหญ่และต้องสร้างใหม่เพื่ออัปเดต
- แบบไดนามิก (DLL): ไฟล์แยกต่างหาก โหลดในช่วง运行时 เล็กกว่า แชร์ได้กับหลายโปรแกรม อัปเดตได้ครั้งเดียวสำหรับทุกคน