เมื่อได้ยินคำว่า "ไลบรารี (Library)" คนทั่วไปก็จะคิดถึงห้องสมุด สถานที่สำหรับคนรักการอ่าน แต่หากคุณอยู่ในสายการเขียนโปรแกรม และวิทยาการคอมพิวเตอร์ ความหมายของ Library ก็คงจะต่างออกไป
โดยในทางวิทยาการคอมพิวเตอร์ หรือวิทยาศาสตร์คอมพิวเตอร์นั้น Library เป็นสิ่งที่มีความสำคัญต่อการพัฒนาโปรแกรมเป็นอย่างมาก มีประโยชน์หลากหลายด้าน การพัฒนาโปรแกรมในปัจจุบันนี้ มีการนำ Library มาใช้อย่างแพร่หลาย
ในบทความนี้ เราก็เลยอยากจะมาแนะนำว่า Library (Computing) คืออะไร ?
สำหรับวิทยาการคอมพิวเตอร์แล้ว Library เป็นทรัพยากรแบบ "Read-Only (อ่านได้อย่างเดียว)" ที่ถูกนำมาใช้ในระหว่างขั้นตอนพัฒนาซอฟต์แวร์ที่จะนำไปใช้บนคอมพิวเตอร์
ในอดีต Library จะประกอบไปด้วย Subroutine (หรือที่ปัจจุบันนี้เรียกว่า "ฟังก์ชัน - Function) แต่ในปัจจุบันนี้ได้เพิ่มพวก โค้ดที่สามารถเปิดใช้งานได้โดยตรง (Executable Code) ที่รวมไปถึงคลาส (Class) และ ข้อมูลที่ไม่สามารถเปิดใช้งานได้โดยตรง (Non-Executable Data) อย่างรูปภาพ (Image) และข้อความ (Text) ด้วย นอกจากนี้ ยังอาจหมายความถึงคอลเลคชันของ Source Code ก็ได้
ภายใน Library จะมีโค้ดที่ถูกเขียนเตรียมเอาไว้แล้ว นักพัฒนาสามารถเลือกใช้ฟังก์ชันที่มีใน Library แทนที่จะต้องเขียนฟังก์ชันดังกล่าวขึ้นมาใหม่ด้วยตนเองให้เสียเวลา และอาจเกิดข้อผิดพลาดด้วย
Library มีประโยชน์ต่อการพัฒนาซอฟต์แวร์เป็นอย่างมาก อย่างเช่น หากคุณต้องการใส่ "ระบบส่งอีเมล" ไว้ในซอฟต์แวร์ที่คุณกำลังพัฒนาอยู่ แทนที่คุณจะต้องเขียนโค้ดการทำงานด้วยตนเองทั้งหมด ก็สามารถนำ "ระบบส่งอีเมล" ที่มีอยู่ใน Library มาใช้งานได้เลย
ภาพจาก : https://www.iue.tuwien.ac.at/phd/weinbub/dissertationse12.html
Library ถูกแบ่งออกเป็น 2 หมวดหมู่ คือแบบ Dynamic และแบบ Static
Dynamic Library จะถูกโหลดขึ้นมาในขั้นตอนซอฟต์แวร์กำลัง "Runtime" (ช่วงเวลาที่โปรแกรมทำงาน (หรือกำลังประมวลผล) ไม่ได้เชื่อมโยงกับซอฟต์แวร์ในช่วงที่กำลังอยู่ในสถานะ "Compile Time" (ช่วงเวลาที่เครื่องใช้ในการแปลโปรแกรมแต่ละโปรแกรมก่อนที่จะลงมือทำตามคำสั่งในโปรแกรมนั้น) ช่วยให้ตัวซอฟต์แวร์สามารถเรียกใช้งาน Library ได้โดยตรง ไม่ต้องทำการ "Recompile" ใหม่
Dynamic Library นิยมใช้พัฒนาคุณสมบัติต่าง ๆ ที่อยู่บนแพลตฟอร์ม เพื่อให้ซอฟต์แวร์ต่าง ๆ สามารถแบ่งปันการใช้งาน Library เดียวกัน ร่วมกันได้โดยไม่ต้องทำซ้ำในหน่วยความจำ
Static Library จะ Complied เข้าไปใน Executable Code ของตัวซอฟต์แวร์ ทำให้ตัวมันทำงานอยู่ภายในซอฟต์แวร์ได้อย่างสมบูรณ์ และไม่ได้รับผลกระทบความเปลี่ยนแปลงที่เกิดขึ้นจากภายนอก Static Library จะเชื่อมต่อการทำงานร่วมกับซอฟต์แวร์ในขั้นตอน "Compile Time" ข้อดีของการทำแบบนี้คือ ช่วยเพิ่มประสิทธิภาพของซอฟต์แวร์ เนื่องจากลดภาระการโหลด Library ในขณะที่กำลัง "Runtime"
เราสามารถสร้าง Library ด้วยภาษาโปรแกรมมิ่ง (Programming Languages) ได้แทบทุกภาษา และสามารถนำไปใช้กับซอฟต์แวร์ที่เขียนขึ้นมาด้วยภาษาเดียวกัน หรือคนละภาษาก็ได้ ตัวอย่างเช่น Library ด้วยภาษา "C++" แต่นำไปใช้กับซอฟต์แวร์ที่เขียนด้วยภาษา Python ได้
ถึงแม้ Library จะถูกแบ่งออกเป็น 2 หมวดหมู่ แต่ Library สามารถแบ่งได้ออกเป็นหลายประเภท ดังต่อไปนี้
นี่เป็น Library ที่มีบันทึกภาษาโปรแกรมมิ่งเก็บไว้เป็นค่าเริ่มต้น เตรียมฟังก์ชัน และยูทิลิตี้ขั้นพื้นฐาน ที่จำเป็นสำหรับซอฟต์แวร์ส่วนใหญ่ ยกตัวอย่างเช่น C Standard Library จะมีฟังก์ชันสำหรับ Input/Output, String Manipulation, Memory Allocation, Mathematical Operation ฯลฯ
สำหรับ Library ประเภท บุคคลที่สาม (3rd-Party) นี้ ถูกพัฒนาขึ้นมาโดยองค์กร หรือนักพัฒนาอิสระ แตกต่างจาก Standard Library ที่มักจะพัฒนาขึ้นมาโดยผู้สร้างภาษาโปรแกรมมิ่งนั้น ๆ ภายใน Third-Party Library จะรวบรวมฟังก์ชันเพิ่มเติม ที่ไม่มีอยู่ใน Standard Library และอาจเผยแพร่ในรูปแบบของ เปิดเผยซอร์สโค้ด (Open-Source) หรือเชิงพาณิชย์ก็ได้
แนวคิดของ Computer Library สามารถย้อนกลับไปได้ในเครื่อง Analytical Engine ที่สร้างโดย Charles Babbage มันเป็นเครื่องจักรตัวแรกของโลกที่สามารถคำนวณลอจิกทางคณิตศาสตร์, ควบคุมแนวทางในการค้นหาผลลัพธ์ได้หลายรูปแบบ และมีหน่วยความจำที่สามารถบันทึกเก็บไว้ได้ในรูปแบบ บัตรตอก (Punch Card) ซึ่งแนวคิดดังกล่าวได้กลายเป็นรากฐานในการพัฒนาคอมพิวเตอร์เมื่อโลกเริ่มเข้าสู่ยุคดิจิทัล
สูตรการคำนวณที่ถูกบันทึกไว้ใน Punch Card เพื่อนำกลับมาใช้ใหม่ได้อีกครั้ง ในทางเทคนิคแล้วก็คือ Library นั่นเอง
Analytical engine ค.ศ. 1837 (พ.ศ. 2380) โดย Charles Babbage
ภาพจาก : https://en.wikipedia.org/wiki/Analytical_engine
ในปี ค.ศ. 1947 (พ.ศ. 2490) Herman Goldstine และ John von Neumann นักฟิสิกส์ และนักวิทยาศาสตร์ ที่กำลังพัฒนาเครื่อง IAS Machine เครื่องคอมพิวเตอร์แบบอิเล็กทรอนิกส์เครื่องแรกของโลก ที่ถูกสร้างขึ้นในสถาบันวิจัย Institute for Advanced Study (IAS) ถึงในช่วงเวลานั้น ตัวเครื่องยังไม่ถูกนำมาใช้งานจริง แต่พวกเข้าก็วางแผนเอาไว้ล่วงหน้าแล้วว่า มันจะต้องมีระบบ Library ในรูปแบบเทปแม่เหล็ก เทปแต่ละม้วนจะบันทึกคอมพิวเตอร์โค้ดสำหรับสั่งงานพื้นฐานต่าง ๆ เอาไว้
IAS Machine
ภาพจาก : https://en.wikipedia.org/wiki/IAS_machine
ในช่วงเวลาเดียวกัน ค.ศ. 1947 (พ.ศ. 2490) Maurice Wilkes และทีมของเขา ได้แรงบันดาลใจจากแนวคิดของ John von Neumann นำมาสร้างเป็น Electronic Delay Storage Automatic Calculator (EDSAC) มันเป็นเครื่องเก็บ Punch Tape (สื่อเก็บข้อมูลที่ใช้ในยุคนั้น) ที่บันทึกโค้ดคำสั่งประเภท Subroutine เอาไว้จำนวนมาก ต่อมาในปี ค.ศ. 1951 (พ.ศ. 2494) ทางทีมก็ได้เผยแพร่หนังสือวิธีการเตรียมโค้ดเพื่อใช้ในคอมพิวเตอร์แบบดิจิทัล ซึ่งในรายละเอียดก็มีทั้งการสร้าง และวัตถุประสงค์ของการใช้ Library
ภาพจาก : https://en.wikipedia.org/wiki/EDSAC
ในปี ค.ศ. 1959 (พ.ศ. 2502) ภาษา Common Business-Oriented Language (COBOL) ถูกพัฒนาขึ้นมา และมันก็มีระบบอำนวยความสะดวกในการใช้งานที่เปรียบเสมือนระบบ Library อยู่ในตัว แต่ว่า Jean Sammet หนึ่งในผู้สร้างภาษา COBOL กลับให้ความเห็นว่า ระบบที่มีใน COBOL ยังไม่ดีพอสำหรับการเป็น Library
JOVIAL เป็น High-Level Programming Language ที่พัฒนาขึ้นมาในปี ค.ศ. 1960 (พ.ศ. 2503) โดยมีรากฐานมาจากภาษา ALGOL 58 มันถูกสร้างมาเพื่อใช้กับระบบ Embeddes Systems โดยเฉพาะ แต่จุดเด่นอยู่ที่คุณสมบัติ Communication Pool (COMPOOL) ที่ทำหน้าที่เป็น Library สำหรับ Header Files
อีกหนึ่งสิ่งที่มีบทบาทสำคัญต่อการพัฒนาระบบ Library ที่เราใช้งานกันอยู่ในปัจจุบันนี้มาจากระบบ Subprograms ของภาษา FORTRAN ที่สามารถ Complied แยกส่วนกันอย่างอิสระ อย่างไรก็ตาม พวกมันยังขาดความสามารถในการเชื่อมโยงกัน ซึ่งภายหลังปัญหานี้ได้ถูกแก้ใน Fortran-90
ในช่วงกลางยุค 60 ระบบ Macro Library เป็นที่แพร่หลายอย่างมาก โดยเริ่มต้นจากเครื่อง IBM System/360 ภายในนั้นก็จะบรรจุชุดคำสั่งประเภท Text elements เอาไว้เพื่ออำนวยความสะดวกในการใช้งาน
ภาพจาก : https://en.wikipedia.org/wiki/IBM_System/360
ภาษาแรกที่รองรับการเขียนโปรแกรมเชิงวัตถุ หรือ Object-Oriented Programming Language คือภาษา Simula ที่ถูกพัฒนาขึ้นมาในปี ค.ศ. 1965 (พ.ศ. 2508) มันรองรับการเพิ่ม Classes เข้าไปใน Library ผ่านการ Complier
มาดูตัวอย่าง Library ที่คุณมักพบเจอเวลาที่เขียน Python, JavaScript ฯลฯ กัน
NumPy เป็น Library ที่นิยมใช้ในการสร้าง Arrays ที่มีความซับซ้อนสูง อย่างในการพัฒนา Machine Learning ตัว Numpy จะช่วยให้การแบ่ง และจัดระเบียบข้อมูลเป็นเรื่องง่าย
นี่เป็น Library ที่ทำงานร่วมกับ NumPy เพื่อช่วยในการจัดการฐานข้อมูลขนาดใหญ่ มีระบบกราฟิกช่วยในการแสดงแผนภูมิข้อมูลที่ง่ายต่อการเข้าใจ
ภาษาหลัก : Python หรือ C++
TensorFlow เป็น Library ที่พัฒนาขึ้นมาโดย Google เพื่อช่วยอำนวยความสะดวกในการสร้าง และฝึกฝนโมเดล Machine Learning และ Neural Networks
ภาษาหลัก : Python
Keras ก็เป็น Library ที่สร้างขึ้นมาเพื่อใช้ในการสร้าง และฝึกฝนระบบ Machine Learning หรือ Neural Network เช่นกัน ทำงานโดยมี TensorFlow อยู่เบื้องหลัง แต่ว่าปรับการใช้งานให้ง่ายขึ้น
ภาษาหลัก : Python
ใช้ใน Python โดยคุณสมบัติหลักของ Pillow Libray คือ การสร้างภาพแบบ Bitmap นั่นเอง
ภาษาหลัก : C++
SFML ย่อมาจาก Simple And Fast Multimedia Library เป็น Library ที่ช่วยในการสร้างรูปภาพ, เสียงเอฟเฟค หรือแม้กระทั่งการเชื่อมต่อระหว่างคอมพิวเตอร์
ภาษาหลัก : JavaScript
p5.js เป็นหนึ่งใน Library ที่เป็นที่รู้จักมากที่สุดของ JavaScript Library มีโค้ด Buil-in ถูกเก็บเอาไว้เป็นจำนวนมาก
|
แอดมินสายเปื่อย ชอบลองอะไรใหม่ไปเรื่อยๆ รักแมว และเสียงเพลงเป็นพิเศษ |