Avatar
1
tvd12 Enlightened
tvd12 Enlightened
Ngôn ngữ lập trình được tạo ra như thế nào?
Thực sự mình cũng rất muốn hiểu ngôn ngữ lập trình được tạo ra ntn. Bạn có thể nói sơ qua hoặc cho mình vài link để tìm hiểu được không. Tks
  • Answer
programming-language
Remain: 5
1 Answer
Avatar
tvd12 Enlightened
tvd12 Enlightened
Để giải thích ngôn ngữ lập trình được tạo ra như thế nào, trước hết chúng ta phải hiểu kiến trúc máy tính 1 chút đã. Có nhiều loại kiến trúc máy tính, tuy nhiên ở đây chúng ta sẽ chọn một kiến trúc máy tính (đặt tên là YM) đơn giản với 3 thành phần:
  1. RAM: để lưu các câu lệnh, và dữ liệu.
  2. CPU: để thực hiện việc tính toán. Bản chất bên trong CPU là các transistor có 2 trạng thái 0 và 1. Từ các transistor này sẽ tạo ra các hàm phần cứng thông qua các phép tính AND, OR, XOR, NOT. Hãy giả sử CPU của chúng ta đã có sẵn hàm ADD để cộng 2 số, hàm GET để lấy dữ liệu từ bộ nhớ, hàm STORE để lưu dữ liệu vào bộ nhớ.
  3. Clock: đề đặn yêu cầu CPU lấy câu lệnh, và dữ liệu từ RAM và thực thi - Gọi là xung nhịp.

Bây giờ hãy giải sử chúng ta cần cộng 3 số: 1 + 2 + 3 thì máy tính YM sẽ thực thi thế nào? Đầu tiên chúng ta phải nạp vào RAM chương trình thế này:

ADD 1 2             // Thực thi hàm cộng 1 2 ở xung nhịp đầu tiên
STORE 0xF           // Lưu kết quả hàm cộng vào RAM ở địa chỉ ô nhớ 0xF ở xung nhịp thứ 2
ADD GET(0XF) 3      // Lấy dữ liệu từ RAM ở địa chỉ ô nhớ 0XF và cộng với 3 ở xung nhịp thứ 3
STORE 0XF           // Lưu kết quả vào RAM ở địa chỉ ô nhớ 0XF ở xung nhịp thứ 4

Clock sẽ kích hoạt để CPU sẽ thực hiện theo các bước ở như trong comment.

Thì những gì bạn nhìn thấy ở trên đây chính là ngôn ngữ lập trình, và ta có thể gọi nó với từ thân thương đó là assembly.

Tuy nhiên ngôn ngữ assembly này tương đối khó hiểu vì nó không phải ngôn ngữ tự nhiên. Vậy bây giờ chúng ta cần tạo ra một loại ngôn ngữ lập trình mới có tên là C, lúc này chúng ta có thể viết ngắn gọn chương trìn của chúng ta thành:

int add123() {
    return 1 + 2 + 3;
}

Và nhiệm vụ của chúng ta bây giờ là phải tạo ra trình dịch (complier) để dịch return 1 + 2 + 3; thành chương trình assembly ở trên bằng chính ngôn ngữ assembly. Và chúng ta gọi C là ngôn ngữ biên dịch

Đến đây bạn đã dễ hiểu hơn rồi đúng không?

Tuy nhiên chúng ta thấy rằng ngôn ngữ biên dịch khá bất tiện, cứ phải viết mã rồi dịch rồi khởi động lại chương trình thì mới được, vậy nên chúng ta sẽ sẽ tạo ra ngôn ngữ tên là JavaScript, và nhiệm vụ bây giờ của chúng ta là phải tạo ra một cái máy ảo để đi thông dịch cái chương trình javascript ở dạng string sang các câu lệnh của máy ảo ví dụ:

console.log(1 + 2 + 3) thì bên code của máy ảo có thể là:
void main() {
    String script = readScriptFromFile();
    String[] strs = script.split(" + ");
    printf(add123(str[0].toInt(), str[1].toInt(), str[2].toInt()));
}

Máy ảo này chúng ta có thể viết bằng C cho đơn giản, và máy ảo cũng sẽ phức tạp hơn ví dụ ở trên rất nhiều.

Một trong những design pattern quan trọng nhất để tạo ra được ngôn ngữ lập trình đó chính là command design pattern anh em nhé.

  • 0
  • Reply