Ngôn ngữ lập trình bậc cao – Cao thấp do đâu?

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?





Nhiều không kể xiết nhưng yếu tố nào xác định ngôn ngữ lập trình bậc cao, ngôn ngữ lập trình bậc thấp?


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).





Đ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).



    .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



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





4. Tham khảo




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àng thấp càng hại não, độ khó hiểu càng tăng


Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn


Đừng bỏ lỡ hàng loạt IT job hot tại TopDev