Bắt đầu với một ngôn ngữ lập trình đòi hỏi cần có những kiến thức tổng quan về nó, trong thế giới của ngôn ngữ lập trình chia thành ngôn ngữ lập trình bậc cao (High level programming languages) và ngôn ngữ lập trình cấp thấp (Low level programming languages).
Vậy điều gì dẫn tới sự khác biệt này, liệu rằng thấp ở đây là trình độ thấp hay dễ hơn, còn cao thì khó và cần năng lực cao hơn để có thể nắm bắt?
Câu trả lời cho câu hỏi hóc búa này sẽ được giải đáp thông qua bài viết dưới đây.
1. Hiểu ngôn ngữ lập trình bậc cao từ bậc thấp
Về Low level programming languages (LLP). Bắt đầu với định nghĩa khô khan từ wiki nha anh em.
A low-level programming language is a programming language that provides little or no abstraction from a computer’s instruction set architecture—commands or functions in the language map that are structurally similar to processor’s instructions
Ngôn ngữ lập trình cấp thấp là ngôn ngữ cung cấp ít hoặc không có sự trừu tượng (abstraction) từ kiến trúc máy tính. Nói chung điều này đề cập tới mã máy hoặc hợp ngữ
Tới đây với người mới bắt đầu tìm hiểu ngôn ngữ lập trình thì vẫn hơi trừu tượng và khó hiểu. Để hình dung đúng về Low level programming, ta cần thêm một đoạn thông tin khác.
Generally, this refers to either machine code or assembly language. Because of the low (hence the word) abstraction between the language and machine language, low-level languages are sometimes described as being “close to the hardware”. Programs written in low-level languages tend to be relatively non-portable, due to being optimized for a certain type of system architecture.
Về tổng quan, ngôn ngữ lập trình cấp thấp là ngôn ngữ lập trình cung cấp ít hoặc không có sự trừu tượng từ kiến trúc tập lệnh của máy tính — các lệnh hoặc chức năng trong bản đồ ngôn ngữ có cấu trúc tương tự như lệnh của bộ xử lý.
Rồi ngon, từ khóa là đây chứ đâu, anh em bám vào 2 cái “không có sự trừu tượng” và “có cấu trúc tương tự lệnh bộ xử lý”. Nắm được hai từ khóa này cũng là yếu tố then chốt giúp ta hiểu về Ngôn ngữ lập trình bậc cao.
1.1 Sự trừu tượng và cấu trúc
Không có sự trừu tượng nói tới việc ngôn ngữ này không gần với ngôn ngữ tự nhiên, còn cấu trúc tương tự lệnh bộ xử lý là đang muốn nói tới mã máy.
Một ví dụ cụ thể của cấu trúc tương tự lệnh bộ xử lý là mã máy (assembly code).
Ví dụ mã máy phía trên đây nhìn phát hiểu ngay là không gần ngôn ngữ tự nhiên. Bạn nào ở bắc thì là “cậu, tớ”, bạn nào ở miền trung là “mô, chi, tê, răng, rứa”, bạn nào ở miền nam thì “mèn đét ơi”. Đấy, những cái đấy là ngôn ngữ gần với tự nhiên.
Điểm này là điểm cốt lõi để phân biệt giữa LLP (ngôn ngữ lập trình bậc thấp) và HLP (ngôn ngữ lập trình bậc cao).
Dưới đây là ví dụ hàm khai báo 2 biến a và b, thực hiện in ra màn hình phép tính a + b. Điều cực kì đơn giản với bạn với C++ hay Java.
.section __TEXT, __text, regular, pure_instructions .macosx_version_min 10, 12 .global _main .align 4, 0x90 _main: ## @main .cfi_startproc ## BB#0: pushq %rbp Ltmp0: .cfi_def_cfa_offset 16 Ltmp1: .cfi_offset %rbp, -16 movq %rsp, %rbp Ltmp2: .cfi_def_cfa_register %rbp subq $16, %rsp leaq L_.str(%rip), %rdi leaq _s(%rip), %rsi movl $2000, -4(%rbp) ## imm = 0x7D0 movl $17, -8(%rbp) movl -4(%rbp), %eax addl -8(%rbp), %eax movl %eax, %edx movb $0, %al callq _printf xorl %edx, %edx movl %eax, -12(%rbp) ## 4-byte Spill movl %edx, %eax addq $16, %rsp popq %rbp retq .cfi_endproc .section __DATA, __data .global _s ## @s _s: .asciz "GeeksforGeeks" .section __TEXT, __cstring, cstring_literals L_.str: ## @.str .asciz "%s %d n" .subsections_via_symbols
2. Ngôn ngữ lập trình bậc cao (HLP)
Một khi đã hiểu về ngôn ngữ lập trình bậc thấp, ta sẽ dễ dàng hiểu về ngôn ngữ lập trình bậc cao. Cũng vẫn phải bắt đầu với định nghĩa.
A high-level programming language is a programming language with strong abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language elements, be easier to use, or may automate
Ngôn ngữ lập trình bậc cao là ngôn ngữ lập trình có tính trừu tượng hóa mạnh mẽ từ các chi tiết của máy tính. Ngược lại với các ngôn ngữ lập trình cấp thấp, nó có thể sử dụng các yếu tố ngôn ngữ tự nhiên, dễ sử dụng hơn hoặc có thể tự động hóa
Cùng xem xét ví dụ dưới đây (ngôn ngữ lập trình Java). Đọc từ nào hiểu từ đó, dễ như ăn chè, sau anh em cuộn xuống xem đoạn code đơn giản hơn mà viết bằng assembly nha. Hết hồn hà.
import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { // Tạo scanner instance // Nhập từ bàn phím Scanner reader = new Scanner(System.in); System.out.print("Nhập số: "); // nextInt() đọc giá tị số từ bàn phím int number = reader.nextInt(); // println() in ra ngoài màn hình System.out.println("You entered: " + number); } }
Lấy một ví dụ khác về phép bình phương trong toán học. Với C++, ta đơn giản nhân 2 số với nhau để có giá trị bình phương.
int square(int num) { return num * num; }
Cũng với hàm xử lý này, nếu chuyển qua ngôn ngữ máy. Kiểu nhìn thấy là lạy chúa trên cao, cái gì thế này.
square(int): push rbp mov rbp, rsp mov DWORD PTR [rbp-4], edi mov eax, DWORD PTR [rbp-4] imul eax, eax pop rbp ret
Một số ngôn ngữ lập trình cấp cao phổ biến là C, C++, Python và Java.
3. Sự khác biệt
Sau khi đã hiểu rõ và nắm bắt được điểm cốt lõi để phân biệt ngôn ngữ lập trình cấp thấp và ngôn ngữ lập trình bậc cao. Anh em cùng đi sâu hơn tìm hiểu sự khác biệt của 2 ông thần này nha:
Ngôn ngữ lập trình cấp cao | Ngôn ngữ lập trình cấp thấp |
It is programmer friendly language. Là ngôn ngữ thân thiện với ngôn ngữ tự nhiên. | It is a machine friendly language. Ngôn ngữ thân thiện với mã máy. |
High level language is less memory efficient. Sử dụng bộ nhớ kém hiệu quả hơn | Low level language is high memory efficient. Sử dụng bộ nhớ hiểu quả |
It is easy to understand. Dễ hiểu, rõ là vậy rồi | It is tough to understand. Khó hiểu, cũng rõ là vậy lun. |
It is simple to debug. Dễ để debug tìm lỗi | It is complex to debug comparatively. Khó để debug và tìm kiếm lỗi |
It is simple to maintain. Dễ dàng để bảo trì nâng cấp | It is complex to maintain comparatively. Khó để bảo trì nâng cấp |
It is portable. Có thể chạy ở nhiều môi trường | It is non-portable. Thường set cứng và khó thay đổi |
It can run on any platform. Có thể chạy trên bất cứ nền tảng nào | It is machine-dependent. Phụ thuộc vào máy |
Từ sự so sánh trên đây, ngôn ngữ lập trình cấp thấp cũng không hẳn là “thấp” ở một số tiêu chí, nếu xét về sử dụng và quản lý memory, một số ngôn ngữ lập trình cấp cao vẫn chưa thể so kèo được với “ngôn ngữ lập trình cấp thấp”.
4. Tham khảo
- High- and low-level languages
- Difference between High Level and Low level languages
- Why Php Laravel is so strong, so good?
Bonus cho anh em meme về Ngôn ngữ lập trình bậc cao nha. Càng thấp càng hại não, càng nhức đầu
Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!
Tác giả: Kiên Nguyễn
Xem thêm:
- Học Python: Từ Zero đến Hero (phần 1)
- Học lập trình Java từ đâu và như thế nào?
- Tài liệu lập trình C/C++ và các bước tự học lập trình
Đừng bỏ lỡ hàng loạt IT job hot tại TopDev