UNIX มาจากไหน?

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

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

  • CEH Certified Ethical Hacker โดย Matt Walker
  • เริ่มต้น Python: จากมือใหม่สู่มืออาชีพโดย Magnus Lie Hetland
  • การแฮ็ก: ศิลปะแห่งการหาประโยชน์โดย Jon Erickson
  • เริ่มต้นกับ Arduino โดย Massimo Banzi
  • การเรียนรู้ bash Shell โดย Cameron Newbam & Bill Rosenblatt
  • เรียนรู้บรรณาธิการ vi และ vim โดย Arnold Robbins, Elbert Hannah และ Linda Lamb
  • Linux Kernel แบบสรุปโดย Greg Kroah-Hartman (ผู้พัฒนา Gentoo ด้วย)
  • Modern C โดย Jens Gustedt
  • คู่มือ Shellcoder โดย Chris Anley, John Heasman, Felix « FX » Linder & Gerardo Richarte
  • ภาษาการเขียนโปรแกรม C โดย Brian W.Kernighan & Dennis M. Ritchie (ผู้สร้าง C)
  • การแก้จุดบกพร่องด้วย GDB โดย Richard Stallman, Roland Pesch, Stan Shebs และอื่น ๆ
  • Hacking Linux Exposed: ความลับและโซลูชันด้านความปลอดภัยของ Linux จากกลุ่มนักวิจัย ISECOM จำนวนมาก ได้แก่ Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (อดีตผู้พัฒนา Gentoo คนอื่น), Thomas Bader, Simon Biles, Colby Clark, Raoul Chiesa , Pablo Endres, Richard Feist, Andrea Ghirardini, Julian "HammerJammer" Ho, Marco Ivaldi, Dru Lavigne, Stephane Lo Presti, Christopher Low, Ty Miller, Armand Puccetti และคณะ
  • ระบบปฏิบัติการ: แนวทางตามแนวคิดโดย Dhananjay M. Dhamdhere
  • Pro Git โดย Scott Chacon และ Ben Straub
  • ผู้เชี่ยวชาญการเขียนโปรแกรม C: ความลับลึก ๆ โดย Peter Van Der Linden

ฉันสามารถคลั่งไคล้หนังสือแต่ละเล่มได้ แต่สำหรับวันนี้ เราจะนำข้อความบางส่วนจากเล่มสุดท้ายในรายการ เนื่องจากเกร็ดเล็กเกร็ดน้อยเหล่านี้ทำให้ฉันหลงใหลและช่วยให้ฉันเข้าใจความลับบางอย่างที่ซับซ้อนของ C และการเขียนโปรแกรมใน ทั่วไป 

Unix และ C

เมื่อเราพูดถึง UNIX ประวัติศาสตร์เกี่ยวพันกับที่มาของระบบนี้และการพัฒนาของภาษาที่จนถึงทุกวันนี้เป็นภาษาที่ใช้มากที่สุดในการพัฒนาและอนุพันธ์ (รวมถึง Linux) และน่าแปลกที่ทั้งสองเกิดจาก "ความผิดพลาด"

หลายเมตริก เป็นโครงการขนาดใหญ่ที่รวบรวม Bell Laboratories, General Electric และ MIT เพื่อสร้างระบบปฏิบัติการระบบดังกล่าวมีข้อผิดพลาดมากมายและหนึ่งในข้อผิดพลาดด้านประสิทธิภาพที่สำคัญที่สุดที่ทำให้ระบบใช้งานไม่ได้จริง เรากำลังพูดถึงปี 1969 ดังนั้นฮาร์ดแวร์ในยุคนั้นจึงไม่สามารถรองรับจำนวนซอฟต์แวร์ที่จำเป็นในการรันระบบได้

จนกระทั่งปี 1970 วิศวกรของ Bell สองคนเริ่มทำงานกับระบบปฏิบัติการที่เรียบง่ายรวดเร็วและมีน้ำหนักเบาสำหรับ PDP-7 ระบบทั้งหมดได้รับการเขียนใน ผู้ประกอบ และได้รับการเรียก ยูนิกซ์ เป็นการล้อเลียน หลายเมตริก เนื่องจากเขาต้องการทำเพียงไม่กี่อย่าง แต่ต้องทำให้ดีแทนการทำงานที่สูญเปล่ามหาศาลอย่างที่สองหมายถึง ตอนนี้คุณสามารถเข้าใจว่าทำไม ยุค เริ่ม 1 มกราคม 1970-  ข้อเท็จจริงที่ค่อนข้างน่าสงสัยสำหรับฉัน ในเวลานั้นยังไม่มีการพูดถึงตัว C เลย แต่พูดถึงตัว a ใหม่ B เนื่องจากความคิดของ Ritchie มาจากภาษา B ที่ใช้อยู่แล้วในเวลานั้น

ต้นค

ในช่วงหลายปีที่ผ่านมา (1972-3) คำว่า C เริ่มใช้เมื่อภาษาใหม่เริ่มเป็นรูปเป็นร่างและในช่วงเวลานี้ความจริงที่น่าสงสัยก็เกิดขึ้นโปรแกรมเมอร์และนักเขียนโปรแกรมตลกหลายคนกล่าวว่า:

โปรแกรมเมอร์รู้ว่าคุณเริ่มนับจาก 0 แทนที่จะเป็น 1

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

array[8]=2;

มันบอกเราว่าองค์ประกอบ ของอาร์เรย์ถูกกำหนดให้เป็น 2 เนื่องจากมีการเพิ่ม 8 หน่วยในอาร์เรย์เพื่อเข้าถึงพื้นที่หน่วยความจำที่จะจัดเก็บองค์ประกอบ 2 ก่อนภาษา C หลายภาษาเริ่มนับจาก 1 ต้องขอบคุณ C ตอนนี้เกือบทั้งหมดเริ่มต้นด้วย 0  ดังนั้นจึงไม่ใช่ความผิดของโปรแกรมเมอร์ แต่เป็นความผิดของผู้เขียนคอมไพเลอร์ที่เป็นเช่นนี้

เปลือกบอร์น

นี่เป็นหัวข้อที่แม้ว่าจะไม่เกี่ยวข้องโดยตรงกับ C แต่ก็สามารถช่วยได้มากกว่าหนึ่งในการทำความเข้าใจว่าเหตุใดการเขียนโปรแกรมเชลล์จึงเป็นเรื่องแปลกและเป็นเรื่องที่อยากรู้อย่างแน่นอน Steve Bourne เขียนคอมไพเลอร์สำหรับ Algol-68 ในฤดูกาลนั้นซึ่งเป็นภาษาที่คีย์ ( {} ) ถูกแทนที่ด้วยคำดังนั้นเราจึงกำหนดได้ดังนี้ใน C:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

นี่เป็นเพียงตัวอย่างบางส่วนของสิ่งที่ Algol เข้าใจ แต่ถ้าเรานำไปใช้กับการเขียนโปรแกรมเชลล์วันนี้คุณจะเข้าใจว่าทำไมในเชลล์โปรแกรมของคุณจึงต้องการ fi สำหรับแต่ละ if  น่าสนใจอย่างแน่นอน.

เริ่มอ่าน

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


เพิ่มเป็นแหล่งที่มาที่ต้องการ