- vừa được xem lúc

Ngôn ngữ lập trình là gì ? Trình biên dịch là gì ? Trình thông dịch là gì ? Chương trình java được biên dịch và thông dịch như thế nào ?

0 0 7

Người đăng: Hiếu Trần Đức

Theo Viblo Asia

[Góc học cùng mình]

Chắc hẳn chúng ta đã quen với rất nhiều ngôn ngữ như C, C++, Java, Python, Ruby, JavaScript, PHP, Swift, Kotlin điểm chung chúng là đều là ví dụ cho "High-level programming language" (Ngôn ngữ lập trình bậc cao)

Nhắc đến "Ngôn ngữ lập trình bậc cao" chắc các bạn cũng suy đoán được sẽ còn những "Low-level programming language" (Ngôn ngữ lập trình bậc thấp) đôi khi được gọi là "Machine language" (Ngôn ngữ máy) hay "Assembly language" (hợp ngữ) Một cách đơn giản, chúng ta có thể hiểu rằng máy tính chỉ có thể thực hiện các chương trình được viết bằng ngôn ngữ bậc thấp. Do đó, các chương trình viết bằng ngôn ngữ bậc cao cần được xử lý trước khi chạy. Bước này tốn thêm thời gian và là một hạn chế nhỏ của các ngôn ngữ bậc cao.

Tuy nhiên, lợi ích lại rất lớn:

  1. "Dễ lập trình" việc lập trình bằng ngôn ngữ bậc cao dễ hơn nhiều Chương trình được viết bằng ngôn ngữ bậc cao được viết "Nhanh hơn", nội dung chương trình "ngắn hơn" dễ "đọc" hơn và nhiều khả năng "chính xác hơn"

  2. "Khả Chuyển" các ngôn ngữ bậc cao có tính "portability" (khả chuyển) được hiểu theo nghĩa chạy được trên nhiều hệ máy tính khác nhau mà ít hoặc không cần phải sửa đổi (trong khi đó các ngôn ngữ bậc thấp chỉ có thể chạy trên một loại máy tính và phải được viết lại nếu muốn chạy trên các hệ máy khác)

Vì những lợi ích này, hầu hết các chương trình được viết bằng ngôn ngữ bậc cao. Ngôn ngữ bậc thấp được sử dụng chỉ cho các ứng dụng đặc biệt.

Ví dụ, trong lĩnh vực phát triển phần mềm nhúng, lập trình viên có thể sử dụng "ngôn ngữ hợp ngữ" để viết mã cho các vi điều khiển nhúng trong các thiết bị điện tử như ô tô, thiết bị y tế hoặc thiết bị gia dụng thông minh.

Vậy làm sao để máy tính hiểu các ngôn ngữ bậc cao ?

Có hai loại chương trình có nhiệm vụ chuyển đổi ngôn ngữ bậc cao thành dạng ngôn ngữ bậc thấp: "Trình thông dịch" và "Trình biên dịch."

  • "Trình thông dịch" (Interpreter) là một chương trình máy tính, có nhiệm vụ đọc một chương trình bậc cao và thực hiện nó theo đúng những gì chương trình chỉ định. Nó xử lý chương trình một cách "dần dần" theo "tuần tự", nghĩa là đọc câu lệnh đến đâu thì thực hiện đến tính toán tới đó
  • "Trình biên dịch" (Compiler) : là chương trình máy tính , có nhiệm vụ đọc chương trình và dịch nó "hoàn toàn" trước khi thực hiện bất kì một câu lệnh nào trong chương trình chương trình sau khi được dịch sẽ gọi là "Object code" (mã đối tượng) hoặc "Executable program"(chương trình chạy)

Thông thường máy sẽ thực hiện biên dịch trước sau đó mới chạy mã lênh đã biên dịch. Khi đó, trương trình bậc cao sẽ được gọi là "Source Code" (Mã nguồn)

Mình sẽ lấy ví dụ về ngôn ngữ Java. Chương trình java vừa được biên dịch lẫn thông dịch. Thay vì chuyển trương trình sang ngôn ngữ máy, trình biên dịch Java phát sinh ra "Java bytecode" "mã byte". Mã byte dễ thông dịch (và thông dịch cũng nhanh), giống như mã máy, song nó còn "khả chuyển", như một ngôn ngữ bậc cao . Vì vậy ta có thể biên dịch một chương trình trên máy này, đưa mã byte sang máy khác, sau đó thông dịch mã byte này trên máy mới. ('write once and run anywhere')

Thực tế trong nhập môn java ta có thể thấy file "mã nguồn" x.java Trình biên dịch đọc mã lệnh rồi phát sinh byte code Java file x.class. Quá trình biên dịch này sẽ kiểm tra cú pháp và kiểm tra lỗi trong mã nguồn ,lúc này trình thông dịch java sẽ đọc byte code này và đưa ra kết quả trên màn hình console hoặc ghi vào một tệp nếu bạn đã cài đặt mã để làm như vậy.

Mặc dù quá trình này có vẻ phức tạp, nhưng đa số các môi trường phát triển chương trình đều giúp bạn tự động thực hiện các bước kể trên. Thông thường bạn sẽ chỉ phải viết một chương trình rồi ấn nút hoặc gõ vào một câu lệnh để biên dịch và chạy. Tuy nhiên, Ta vẫn cần biết những bước nào đang được máy thực hiện ngầm, để ngỡ có trục trặc thì ta có thể hình dung ra sai ở khấu nào

Nguồn thao khảo "Think Java: How to think like a computer scientist" "www.javatpoint.com"

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tại sao Rails lại dùng cả Webpack lẫn Sprocket?

Khi Rails 6 được ra mắt, có thể bạn đã từng tự hỏi. WTF, sao Webpack đã được add vào rồi, mà Sprocket vẫn tồn tại thế kia . Chẳng phải Webpack và Sprocket được dùng để giải quyết chung một công việc hay sao. Hoặc cả đây:.

0 0 47

- vừa được xem lúc

Tìm hiểu chung về LLVM

Không hề khó khăn khi nhận thấy rằng các ngôn ngữ lập trình được tạo ra cũng như cải tiến với tốc độ ngày một cao. Rust của Mozilla, Swift của Apple hay Kotlin của Jetbrain và nhiều ngôn ngữ khác cung cấp cho các nhà phát triển một loạt các lựa chọn mới về tốc độ, độ an toàn, sự tiện lợi, tính di độ

0 0 20

- vừa được xem lúc

Sự khác nhau giữa trình biên dịch và trình thông dịch

Trình biên dịch là trình dịch chuyển đổi từ ngôn ngữ nguồn (các ngôn ngữ lập trình bậc cao) thành ngôn ngữ đối tượng (ví dự như ngôn ngữ máy). Ngược lại với trình biên dịch, trình thông dịch là một ch

0 0 34

- vừa được xem lúc

002: JVM Compiler với C1 Compiler và C2 Compiler

Bài viết nằm trong series Java memory management & performance. Một ví dụ dễ hiểu như sau, ta có một văn bản bằng tiếng Anh, và muốn nó được dịch sang ngôn ngữ tiếng Nhật để được thực thi.

0 0 38

- vừa được xem lúc

003: JVM Code cache và Ahead of Time Compiler

Bài viết nằm trong series Java memory management & performance. Bài viết hôm nay sẽ tìm hiểu kĩ hơn về JVM Code cache, tuning JVM Code cache size và AoT Compiler.

0 0 26

- vừa được xem lúc

Bạn có thực sự hiểu JVM chạy thế nào?

Xin chào a/e đã đang và sẽ thành dev Java như em, chắc 99% mọi người đều biết jvm là máy ảo, java là ngôn ngữ biên dịch,… nhưng an hem có thực sự hiểu cơ chế hoạt động của java và jvm. Tại sao java lạ

0 0 132