Phần 1: Lịch sử của C#Lịch sử tóm tắt của máy vi tínhNgày xửa ngày xưa, ở một vùng đất thần bí xa xôi, một số người tưng tửng đề nghị phát minh ra toán học. Đương nhiên, ở thời kỳ đó, không có thứ gọi là máy tính hay máy vi tính, vì vậy con người phải tính toán bằng tay, trên giấy.
Nội dung trích xuất từ tài liệu:
Lập trình C# - Phần 1: Lịch sử của C # (THPT Chuyên Lê Hồng Phong)Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSCLập trình C#Dịch từ cuốn sách Beginning C Sharp Game ProgrammingPhần 1: Lịch sử của C#Lịch sử tóm tắt của máy vi tínhNgày xửa ngày xưa, ở một vùng đất thần bí xa xôi, một số người tưng tửng đề nghị phát minh ra toánhọc. Đương nhiên, ở thời kỳ đó, không có thứ gọi là máy tính hay máy vi tính, vì vậy con người phảitính toán bằng tay, trên giấy. Bên cạnh việc phải sử dụng bộ não (một điều khủng khiếp!), tay bạn cóthể bị co cứng sau vài trăm phép tính. Điều đó chẳng có gì thú vị!Để giải quyết vấn đề đó, một số người nảy ra một ý tưởng thiên tài đó là tạo ra một cái máy để làmtoán thay bạn, thay thế việc viết và suy nghĩ một cách chán ngắt. Con người tạo ra máy vi tính, vàthấy nó rất là tốt. Và bây giờ, chúng ta không cần phải chờ như một số người tội nghiệp để thực hiệnvài trăm phép tính trên giấy; thay vào đó, chúng ta có một cái máy có thể thực hiện nó trong mộtkhoảng thời gian rất ngắn, và với các kết quả vô cùng chính xác.Ngôn ngữ máy (Machine language) và hợp ngữ (Assemblylanguage)Trong những thời kỳ trước đây, máy vi tính rất là đơn giản. Các máy vi tính sớm nhất chỉ hỗ trợ támlệnh khác nhau, và chỉ có thể thực thi vài chục lệnh. Cơ bản, một lập trình viên tạo ra một danh sáchsố, đưa nó vào máy vi tính, và chạy nó; các số biểu thị các lệnh. Ví dụ đơn giản, số 0 có thể biểu thịmột lệnh cộng, và số 1 biểu thị cho lệnh nhân. Chương trình được viết theo kiểu đó được gọi là viếttheo ngôn ngữ máy.Với các máy đơn giản như những máy vi tính đầu tiên, một người khá dễ dàng khi nhớ số nào biểu thịcho lệnh nào – và dù sao đi nữa thì cũng chỉ có tám lệnh. Tuy nhiên, máy vi tính trở nên phức tạp hơn.Người ta bắt đầu thêm nhiều và nhiều lệnh hơn nữa, và chúng ta sớm có vài chục lệnh, thậm chí lêntới một trăm. Rất ít người có thể nhớ hết được nhiều lệnh như vậy, và tra cứu chúng bằng tay là mộtcông việc vô cùng tẻ nhạt. Vậy là hợp ngữ ra đời. Một hơp ngữ là một ngôn ngữ cần thiết để thôngdịch trực tiếp các lệnh dựa trên các từ sang ngôn ngữ máy. Ví dụ, một máy vi tính được đề cập ở trên,có mã máy để nhân 6 lần 7 như sau:1 6 7với 1 biểu thị lệnh và hai số đằng sau biểu thị dữ liệu của nó. Đương nhiên, việc tra cứu hàng trămdòng lệnh của thể làm đau mắt bạn (và cả não nữa), vì vậy, hợp ngữ có thể là cái gì đó như thế này:MUL 6, 7Ah, bây giờ nó dễ chịu hơn với đôi mắt của chúng ta! Ít nhất bây giờ bạn có thể nói ngay tức thời làbạn muốn nhân 6 với 7. Máy vi tính có chương trình gọi là trình dịch hợp ngữ, nó có thể dịch trực tiếptừ hợp ngữ sang ngôn ngữ máy. Trình dịch hợp ngữ là một chương trình rất là đơn giản; về cơ bản,những gì chúng làm là tìm tên lệnh và thay thế chúng bằng những số biểu thị lệnh đó.Lập trình C# - Phần 1: Lịch sử của C# Trang 1Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSCTính di độngVà bây giờ, hãy nói về tính di động. Tính di động đặc trưng cho khả năng di chuyển một chương trìnhtừ máy vi tính này sang một máy khác. Tính di động, cho đến ngày nay, vẫn là một cái mụn nhọt lớndưới mông. Bạn có thể thấy, có một số người tạo ra máy vi tính ở trong thời xưa, và gần như khôngmáy tính nào làm việc cùng nhau. Vì vậy, bạn có một cái máy có thể hiểu là 1 tức là lệnh nhân, nhưngmột cái máy khác có thể áp dụng chúng một cách ngớ ngẩn, và nói rằng 2 mới biểu thị phép nhân.Hợp ngữ giúp giải quyết một vài vấn đề. Bạn có thể cho rằng hầu hết các máy đều có các lệnh cộngtrừ nhân chia, và cơ bản là bạn cần một trình dịch hợp ngữ cho máy A để dịch “MUL” ra 1, và mộttrình dịch khác cho máy B để dịch “MUL” ra 2.Về lý thuyết, bạn có thể mang một chương trình viết bằng hợp ngữ sang nhiều máy khác nhau, giả dụnhư các máy tính này đều có một trình dịch hợp ngữ có thể hiều cú pháp hợp ngữ của bạn đang dùng.Nhưng điều này nhanh chóng trở nên tồi tệ. Có thể thấy, máy vi tính trở nên phức tạp hơn nữa, và tấtcả các công ty máy vi tính đều muốn thêm càng nhiều lệnh trong một bộ xử lý càng tốt. Nhưng khôngcông ty nào muốn chấp nhận lệnh nào họ nên dùng. Một số máy vi tính có các lệnh để thực hiện phéptoán trên số phẩy động, nhưng một số khác thì không. Một số có thể thực hiện phép tính thập phân vàmột số khác nữa thì không. Và có những máy cho phép hàng tá cách để truy cập vào bộ nhớ, và mộtsố khác thì chỉ có một cách.Houston, chúng ta có vấn đề. Trình dịch hợp ngữ không thể di chuyển chương trình từ một nền tảngsang một nền tảng khác được nữa. Và vì thế, thay vì tạo ra một chương trình cho tất cả mọi máy,nhiều lập trình viên học cách để sử dụng một máy, và tạo chương trình chỉ cho máy đó. Muốn chạymột chương trình tạo ở máy A trên máy B? Trông chờ vận may? Điều đó sẽ chẳng bao giờ xảy ra.Ngôn ngữ cấp cao cứu ngày hôm nayBước vào ngôn ngữ cấp cao, chính xác. Đây là những ngôn ngữ có độ phức tạp cao có thể được mô tảbằng các biểu thức toán học, nhưng không đi vào tất cả những chi tiết bừa bộn để thực hiện chúng.Bạn có thể biểu diễn một thứ nào đó như thế này:int i = 6 * 7;Trong một ngôn ngữ giống C (một trong những ngôn ngữ cấp cao sớm nhất và phổ biến nhất), mộtchương trình được gọi là trình biên dịch sẽ dịch những văn bản đó thành mã máy cho bạn. Bạn thựcsự không cần phải biết điều gì đang xảy ra – những gì cần biết là bạn tạo ra một con số lưu trữ kết quả6 nhân 7.Thật không may, những ngôn ngữ cấp cao đã thất bại trong việc tạo ra một chường trình có tính diđộng hoàn hảo. Vấn đề là mỗi trình biên dịch là khác nhau, và thực hiện cái việc khác nhau. Mỗi hệđiều hành sẽ có một Giao diện Lập trình Ứng dụng (API – Application Programming Interface) khácnhau và không thể sử dụng trên máy khác. Nếu bạn tạo một chương trình Windows, bạn có thể xử lývới WIN32 API, nhưng không thể làm cho nó hoạt động trên một máy ...