UNIX đến từ đâu?

Xin chào tất cả mọi người 🙂 những tuần này tôi rất vui khi đọc một số sách về lập trình, sự thật là cách tốt nhất để học lập trình là luôn có sách, bất kỳ bài báo, hướng dẫn, hướng dẫn nào mà người ta có thể tìm thấy (kể cả của tôi) đều là điểm chuẩn khi so sánh chúng với một cuốn sách thực về chủ đề này. Bây giờ, chúng ta cũng phải định nghĩa thế nào là một cuốn sách "thật", vì không phải tất cả các cuốn sách thường hay, và nhiều cuốn thậm chí có thể đắt hơn giá trị thực sự và lãng phí thời gian.

Trong suốt những năm qua, danh sách những cuốn sách tôi đã đọc và danh sách những cuốn sách tôi có thể giới thiệu đã khác nhau khá nhiều, nhưng không nghi ngờ gì nữa, chúng tôi có một số cuốn sách yêu thích của tôi (không theo thứ tự cụ thể):

  • Hacker đạo đức được chứng nhận CEH của Matt Walker.
  • Bắt đầu Python: Từ Người mới đến Chuyên nghiệp của Magnus Lie Hetland.
  • Hacking: nghệ thuật khai thác của Jon Erickson.
  • Bắt đầu với Arduino bởi Massimo Banzi.
  • Tìm hiểu bash Shell của Cameron Newbam & Bill Rosenblatt.
  • Tìm hiểu các trình biên tập vi và vim của Arnold Robbins, Elbert Hannah & Linda Lamb.
  • Linux Kernel in a Nutshell của Greg Kroah-Hartman (một nhà phát triển Gentoo cũng vậy).
  • Modern C của Jens Gustedt
  • Sổ tay Shellcoder của Chris Anley, John Heasman, Felix «FX» Linder & Gerardo Richarte.
  • Ngôn ngữ lập trình C của Brian W. Kernighan & Dennis M. Ritchie (người tạo ra C)
  • Gỡ lỗi với GDB bởi Richard Stallman, Roland Pesch, Stan Shebs, et al.
  • Hacking Linux được phơi bày: Bí mật và giải pháp bảo mật Linux từ một nhóm lớn các nhà nghiên cứu ISECOM, bao gồm Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (một cựu nhà phát triển Gentoo khác), 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 & et al.
  • Hệ điều hành: Phương pháp tiếp cận dựa trên khái niệm của Dhananjay M. Dhamdhere
  • Pro Git của Scott Chacon và Ben Straub
  • Chuyên gia lập trình C: Bí mật sâu sắc của Peter Van Der Linden.

Tôi có thể đánh giá cao về từng cuốn sách này, nhưng hôm nay chúng ta sẽ lấy một số đoạn từ cuốn cuối cùng trong danh sách, vì nhiều đoạn mã trong số này đã thu hút tôi và giúp tôi hiểu rõ hơn về một số bí mật phức tạp của C và lập trình nói chung 🙂

Unix và C

Khi chúng ta nói về UNIX, lịch sử gắn liền với nguồn gốc của hệ thống này và sự phát triển của ngôn ngữ mà cho đến ngày nay là một trong những ngôn ngữ được sử dụng nhiều nhất trong quá trình phát triển nó và các dẫn xuất của nó (bao gồm cả Linux). Và thật kỳ lạ, hai điều này được sinh ra từ một "sai lầm".

multrics Đây là một dự án lớn tập hợp các phòng thí nghiệm Bell, General Electric và MIT để tạo ra một hệ điều hành. Chúng ta đang nói về năm 1969, vì vậy phần cứng của thời điểm đó không thể hỗ trợ lượng phần mềm cần thiết để chạy hệ thống.

Mãi cho đến năm 1970, một vài kỹ sư của Bell mới bắt đầu làm việc trên một hệ điều hành đơn giản, nhanh và nhẹ cho PDP-7. Toàn bộ hệ thống đã được viết bằng Nhà lắp ráp và đã được gọi UNIX như một sự bắt chước của multrics vì anh ấy chỉ muốn làm một vài việc, nhưng để làm tốt chúng thay vì công việc lãng phí to lớn như ý nghĩa thứ hai. Bây giờ bạn có thể hiểu tại sao Kỷ nguyên bắt đầu từ ngày 1 tháng XNUMX năm 1970. 🙂 Một sự thật khá tò mò đối với tôi. Vào thời điểm đó, vẫn chưa có cuộc nói chuyện về bản thân chữ C, mà là B mới vì ý tưởng của Ritchie đến từ ngôn ngữ B đã được sử dụng vào thời điểm đó.

Đầu C

Trong những năm (1972-3), thuật ngữ C bắt đầu được sử dụng kể từ khi ngôn ngữ mới bắt đầu hình thành, và trong khoảng thời gian này, một sự thật kỳ lạ khác ra đời, nhiều lập trình viên và người lập trình nói đùa rằng:

Các lập trình viên biết rằng bạn bắt đầu đếm từ 0 thay vì 1.

Chà, điều này không hoàn toàn đúng 🙂 lý do thực sự tại sao nó được coi là như vậy cho đến ngày nay là vì khi tạo ra nó, đối với các nhà biên dịch, việc tính toán một mảng bằng cách sử dụng bù đắp, những điều này cho biết khoảng cách tồn tại từ một điểm gốc đến mục tiêu mong muốn, đó là lý do tại sao:

array[8]=2;

Nó cho chúng ta biết rằng phần tử của mảng được định nghĩa là 2, bởi vì 8 đơn vị được thêm vào mảng để đạt được không gian bộ nhớ nơi phần tử 2. Trước C, nhiều ngôn ngữ bắt đầu đếm từ 1, nhờ C, bây giờ hầu hết đều bắt đầu bằng 0 🙂 vì vậy nó không phải là lỗi của các lập trình viên, mà là của những người viết trình biên dịch là như vậy.

Vỏ Bourne

Đây là một chủ đề, mặc dù không liên quan trực tiếp đến C, nhưng có thể giúp nhiều người hiểu tại sao lập trình Shell lại đặc biệt đến vậy, và chắc chắn người ta tò mò muốn biết. Steve Bourne đã viết một trình biên dịch cho Algol-68 vào mùa giải đó, đây là một ngôn ngữ mà các phím ( {} ) được thay thế bằng các từ, vì vậy chúng ta có thể định nghĩa nó như sau trong C:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

Đây chỉ là một số ví dụ về những gì Algol hiểu, nhưng nếu chúng ta áp dụng nó vào lập trình shell ngày nay, bạn sẽ hiểu tại sao trong shell chương trình của bạn yêu cầu fi cho mỗi if 🙂 chắc chắn thú vị.

Bắt đầu đọc

Tôi không thể cho bạn biết tất cả các chi tiết của cuốn sách, đặc biệt là vì nhiều chủ đề trong số này đã là các chủ đề lập trình đòi hỏi bạn phải có kiến ​​thức nền tảng trước đó, nhưng tôi nghĩ tôi sẽ chia sẻ với bạn một số giai thoại kỳ lạ mà tôi tìm thấy trong suốt quá trình 🙂 Tôi chưa có Thời gian để làm một số bài báo nằm trong danh sách việc cần làm bởi vì những cuốn sách cuối cùng này đơn giản là cuốn hút tôi và tôi đang tận hưởng chúng mỗi ngày và hơn hết là cố gắng hiểu chúng một cách đầy đủ nhất. Xin chào và sắp tới tôi sẽ có thể chia sẻ với các bạn nhiều chủ đề hơn, lời chào.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   John dijo

    Bài viết của bạn rất thú vị đối với tôi. Cảm ơn rất nhiều.

  2.   HO2Gi dijo

    Rất thú vị như mọi khi.

  3.   Jose Rafael dijo

    Rất thú vị những lời giải thích là tốt.

  4.   Alex dijo

    Tuyệt vời

  5.   danielga dijo

    Hấp dẫn !!! Cảm ơn rất nhiều.

  6.   2 dijo

    văn hóa học? nó sẽ không phải là đa hợp (https://en.wikipedia.org/wiki/Multics)

    ngôn ngữ có chỉ mục từ 1 là một phát minh của satan ...

    1.    ChrisADR dijo

      Lưu ý thú vị 🙂 Tôi cho rằng tại một thời điểm nào đó trong lịch sử, cả hai thuật ngữ đã được sử dụng:

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

      và rõ ràng là cùng một cuốn sách được viết vào giữa những năm 90.

      Cảm ơn vì đã làm rõ lời chào

      1.    2 dijo

        wa, thật là kỳ lạ, bạn đã làm tôi nghi ngờ, tôi đã xem trong một bản sao "mua" của Lập trình Expert C: Bí mật sâu sắc và có đa số đang đến, đây là lần đầu tiên tôi nghe thấy multrics. Thật tò mò làm sao, nó gợi nhớ một chút về con thỏ trix

        1.    ChrisADR dijo

          hahaha chắc chắn tò mò, tôi đã kiểm tra bản sao tiếng Anh của mình về những bí mật sâu sắc, ở đó nó cũng nói Multrics (vì bạn cũng đã khiến tôi nghi ngờ) ... có lẽ đó là một biểu hiện của thời gian 😛

          Liên quan

  7.   ED774 dijo

    Đóng góp lớn

  8.   Vô danh dijo

    Điều thú vị là, mặc dù chắc chắn, Multrics là do in nhầm, vì tên ban đầu của hệ điều hành đó là Multics, và Unix ban đầu được gọi là Unics, chính xác là ám chỉ hệ điều hành tuyệt vời đó, cuối cùng và theo ngữ âm, Unics se được chuyển thành Unix, bây giờ, bạn chỉ cần nhắc đến tên của người được coi là tác giả của Unix; Ken Thompson, truyền thuyết kể rằng cả Thompson và Ritchie đều ở quán cà phê Bell Labs bình luận về các dự án của họ và chính Ritchie đã đề nghị với Thomposon rằng anh ấy viết lại chương trình Unics with C, ngôn ngữ mà anh ấy đã viết ... và phần còn lại , là lịch sử. 😉

    Nhân tiện, trước đây tất cả các chương trình đều được viết bằng hướng dẫn của máy, điều này khiến chúng hoàn toàn phụ thuộc vào phần cứng, sự đổi mới của C, ngoài việc giúp viết chương trình dễ dàng hơn, là ngôn ngữ độc lập với phần cứng thực hiện trình biên dịch, một triết lý mà nhiều năm sau đó sẽ áp dụng Java, theo nghĩa là các chương trình không phụ thuộc vào hệ điều hành, thêm vào đó là máy ảo java nổi tiếng.

    1.    ChrisADR dijo

      Điều tồi tệ của truyền thuyết là chúng bóp méo lịch sử, theo nhiều cách khác nhau ... và chúng có thể khiến bạn nghĩ rằng có điều gì đó xảy ra khi nó không ... giống như thực tế cuộc trò chuyện hiện có giữa Thompson và Ritchie (mà tôi đã bỏ qua tùy ý) vì nó dẫn đến lỗi lịch sử và kỹ thuật (C không phải trước UNIX) ...

      Và đối với điều thứ hai ... một truyền thuyết khác bóp méo thực tế, vì trước C đã có B, A, pascal, Ada, algol-60, PL / 1 và một số khác là ngôn ngữ lập trình đúng (rất khác với Assembly và phương ngữ của họ theo kiến ​​trúc phụ thuộc vào phần cứng của bộ xử lý) nên C đã không "đổi mới" theo nghĩa này, anh ấy chỉ đơn giản áp dụng các giải pháp đã tồn tại ở các ngôn ngữ khác và cuối cùng thì nó trở nên phổ biến nhanh hơn và tốt hơn những thứ này ... Phần duy nhất Sự thật là Java đã dựa trên khái niệm về tính di động này để tạo ra máy ảo của nó sau này, nhưng nó không chỉ dựa vào C cho việc này mà còn dựa trên các mô hình khác, nếu không chúng ta sẽ không có mô hình lập trình hướng đối tượng trong java ...

      Tôi cảm thấy rằng tôi nên làm rõ sự việc bởi vì bất cứ ai ít thông thạo hơn cũng có thể coi đó là sự thật và sau đó tin rằng nó đã xảy ra như thế này ... lời chào 🙂

  9.   Ignatius Esquivel dijo

    Như mọi khi, bài viết rất thú vị, cảm ơn vì đã đóng góp.