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

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

Unix และ C

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

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

จนกระทั่งปี 1970 วิศวกรของ Bell สองคนเริ่มทำงานกับระบบปฏิบัติการที่เรียบง่ายรวดเร็วและมีน้ำหนักเบาสำหรับ PDP-7 ระบบทั้งหมดได้รับการเขียนใน ผู้ประกอบ และได้รับการเรียก ยูนิกซ์ เป็นการล้อเลียน หลายเมตริก เนื่องจากเขาต้องการทำเพียงไม่กี่อย่าง แต่ต้องทำให้ดีแทนการทำงานที่สูญเปล่ามหาศาลอย่างที่สองหมายถึง ตอนนี้คุณสามารถเข้าใจว่าทำไม ยุค เริ่ม 1 มกราคม 1970. 🙂เป็นเรื่องที่น่าสงสัยสำหรับฉัน ในเวลานั้นยังไม่มีการพูดถึง C แต่เป็นของ ใหม่ 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 🙂น่าสนใจอย่างแน่นอน

เริ่มอ่าน

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


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   จอห์น dijo

    บทความของคุณน่าสนใจสำหรับฉันมาก ขอบคุณมาก.

  2.   โฮทูกิ dijo

    น่าสนใจมากเช่นเคย

  3.   Jose Rafael dijo

    คำชี้แจงที่น่าสนใจเป็นสิ่งที่ดี

  4.   อเล็กซ์ dijo

    Excelente

  5.   แดเนียลก้า dijo

    น่าสนใจ !!! ขอบคุณมาก.

  6.   ที่สอง dijo

    หลายเมตริก? มันจะไม่เป็นแบบมัลติ (https://en.wikipedia.org/wiki/Multics)

    ภาษาที่มีดัชนีตั้งแต่ 1 เป็นสิ่งประดิษฐ์ของซาตาน ...

    1.    คริส ADR dijo

      หมายเหตุที่น่าสนใจ🙂ฉันคิดว่า ณ จุดหนึ่งในประวัติศาสตร์มีการใช้ทั้งสองคำ:

      https://www.landley.net/history/mirror/collate/unix.htm

      และเห็นได้ชัดว่าเป็นหนังสือเล่มเดียวกันกับที่เขียนในช่วงกลางยุค 90

      ขอบคุณสำหรับคำทักทายที่ชัดเจน🙂

      1.    ที่สอง dijo

        สิ่งที่แปลกจริงๆคุณทำให้ฉันสงสัยฉันได้ดูสำเนา "ซื้อ" ของ Expert C Programming: ความลับลึก ๆ และมี multics มาด้วยนี่เป็นครั้งแรกที่ฉันได้ยินว่า multrics มันทำให้นึกถึงกระต่ายทริกซ์ตัวน้อยแค่ไหน

        1.    คริส ADR dijo

          ฮ่า ๆ ๆ อยากรู้อยากเห็นอย่างแน่นอนฉันตรวจสอบสำเนาลับในภาษาอังกฤษของฉันแล้วมันยังบอกว่า Multrics (เพราะคุณทำให้ฉันสงสัยด้วย) ... อาจจะเป็นการแสดงออกของเวลา😛

          ความนับถือ

  7.   ED774 dijo

    ผลงานที่ยอดเยี่ยม

  8.   ไม่ระบุชื่อ dijo

    ที่น่าสนใจแม้ว่า Multrics นั้นเกิดจากการพิมพ์ผิดเนื่องจากชื่อเดิมของระบบปฏิบัติการนั้นคือ Multics และ Unix เดิมเรียกว่า Unics ซึ่งหมายถึงระบบปฏิบัติการที่ยอดเยี่ยมนั้นในที่สุดและโดยการออกเสียง Unics เปลี่ยนเป็น Unix ตอนนี้คุณต้องพูดถึงชื่อของผู้ที่ถือว่าเป็นผู้เขียน Unix เท่านั้น Ken Thompson มีตำนานเล่าว่าทั้ง Thompson และ Ritchie อยู่ในโรงอาหารที่ Bell Labs เพื่อแสดงความคิดเห็นเกี่ยวกับโครงการของพวกเขาและ Ritchie แนะนำให้ Thomposon เขียนโปรแกรม Unics ด้วย C ซึ่งเป็นภาษาที่เขาเขียน ... และส่วนที่เหลือ เป็นประวัติศาสตร์ 😉

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

    1.    คริส ADR dijo

      สิ่งที่ไม่ดีเกี่ยวกับตำนานคือพวกเขาบิดเบือนประวัติศาสตร์มากกว่าหนึ่งวิธี ... และพวกเขาสามารถทำให้คุณคิดว่ามีบางอย่างเกิดขึ้นเมื่อมันไม่ได้ ... เช่นเดียวกับการสนทนาระหว่าง ธ อมป์สันและริตชี่ (ซึ่งฉันไม่ได้ใส่ไว้ตามต้องการ) เนื่องจากมันนำไปสู่ ถึงข้อผิดพลาดทางประวัติศาสตร์และทางเทคนิค (C ไม่ใช่ก่อนหน้า UNIX) ...

      และสำหรับประการที่สอง ... อีกตำนานหนึ่งที่บิดเบือนความเป็นจริงเนื่องจากก่อนหน้า C มี B, A, pascal, Ada, algol-60, PL / 1 และอีกสองสามภาษาที่เขียนโปรแกรมได้อย่างถูกต้อง (แตกต่างจาก Assembly มาก และภาษาถิ่นตามสถาปัตยกรรมที่ขึ้นอยู่กับฮาร์ดแวร์ของโปรเซสเซอร์) ดังนั้น C จึงไม่ "คิดค้น" ในแง่นี้เขาเพียงแค่นำโซลูชันที่มีอยู่แล้วในภาษาอื่น ๆ มาใช้และในที่สุดมันก็ได้รับความนิยมเร็วกว่าและดีกว่าสิ่งเหล่านี้ ... ส่วนเดียว ความจริงก็คือ Java ใช้แนวคิดของการพกพานี้เพื่อสร้างเครื่องเสมือนในภายหลัง แต่ไม่เพียง แต่พึ่งพา C สำหรับสิ่งนี้ แต่ตามแบบจำลองอื่น ๆ มิฉะนั้นเราจะไม่มีกระบวนทัศน์การเขียนโปรแกรมเชิงวัตถุใน java ...

      ฉันรู้สึกว่าฉันควรจะชี้แจงสถานการณ์เพราะใครก็ตามที่มีความเชี่ยวชาญน้อยกว่าก็สามารถถือได้ว่าเป็นความจริงแล้วเชื่อว่ามันเกิดขึ้นแบบนี้ ... ทักทาย🙂

  9.   อิกนาซิโอเอสควิเวล dijo

    เช่นเคยบทความน่าสนใจมากขอบคุณสำหรับการมีส่วนร่วม