Khi bắt đầu học làm một lập trình viên thì việc đầu tiên mà bạn tiếp xúc và cần phải biết đó là ngôn ngữ lập trình. Hiện nay các ngôn ngữ được sử dụng phổ biến như: C/ C ++ hoặc Java và bạn có thấy chúng khó học không nhưng sau đây chúng tôi sẽ giới thiệu cho bạn một loại ngôn ngữ vô cùng phức tạp đó là Malbolge.
Nếu chúng ta nói để viết một chương trình in “Hello World” Chỉ sử dụng khoảng trắng, tab và ký tự đặc biệt thì sao? Khi đó bạn thật sự cần một ngôn ngữ đó là ngôn ngữ lập trình trên thế giới nơi bạn cần viết mã bằng một số lệnh hoặc cú pháp không thể đọc và không thể hiểu được. Chúng không phải là ngôn ngữ tự nhiên.
Chúng cũng được coi là ngôn ngữ lập trình khó nhất trên thế giới và có thể đây là lần đầu tiên bạn biết về các ngôn ngữ này. Chúng ta cùng điểm qua những ngôn ngữ phức tạp nhất thế giới này nhé.
Khái niệm Malbolge là gì?
Malbolge là một ngôn ngữ lập trình bí truyền phát minh bởi Ben Olmstead vào năm 1998, được đặt tên theo vòng tròn thứ tám của địa ngục trong Dante’s Inferno, các Malebolge nó được coi là một trong năm ngôn ngữ khó nhất trên thế giới.
Nó được thiết kế đặc biệt để gần như không thể sử dụng, thông qua một ‘hoạt động điên rồ’ phản trực quan, số học cơ số ba và mã tự thay đổi.
Nó được xây dựng dựa trên độ khó của các ngôn ngữ bí truyền trước đó (chẳng hạn như Brainfuck và Befunge), nhưng đưa khía cạnh này lên cực điểm, dựa trên lịch sử vướng mắc của khoa học máy tính và mã hóa. Mặc dù thiết kế này có thể viết các chương trình Malbolge hữu ích.
Tuy nhiên thì tác giả của ngôn ngữ lập trình Malbolge chưa bao giờ viết bất kỳ chương trình nào sử dụng ngôn ngữ này. Mã “hello world” trong Malbolge nó xuất hiện gần hai năm sau khi Olmstead phát minh ra ngôn ngữ này.
Một số chương trình mẫu Malbolge
Hello world!
Chương trình này hiển thị ” Hello, World. “. [số 8]
(= <`# 9] ~ 6ZY327Uv4-QsqpMn & + Ij” ‘E% e {Ab ~ w = _:] Kw% o44Uqp0 / Q? XNvL: `H% c # DD2 ^ WV> gY; dts76qKJImZkj
Cat Program
Chương trình này đọc một chuỗi từ người dùng và in chuỗi đó, tương tự như Unix cat .
(= BA # 9 “= <;: 3y7x54-21q / p -, + *)”! H% B0 /. ~ P <<
🙁 8 &
66 # “! ~} | {Zyxwvu
gJk
Thiết kế
Malbolge là ngôn ngữ máy cho một máy ảo bậc ba, trình thông dịch Malbolge .
Trình thông dịch tiêu chuẩn và thông số kỹ thuật chính thức không khớp hoàn toàn. Một điểm khác biệt là trình biên dịch ngừng thực thi với dữ liệu nằm ngoài phạm vi 33–126. Mặc dù ban đầu đây được coi là một lỗi trong trình biên dịch, Ben Olmstead tuyên bố rằng đó là dự định và trên thực tế có “một lỗi trong đặc điểm kỹ thuật”
Đăng ký
Malbolge có ba thanh ghi, a, c và d. Khi một chương trình bắt đầu, giá trị của cả ba thanh ghi đều bằng không.
a là viết tắt của ‘tích lũy’, được đặt thành giá trị được ghi bởi tất cả các thao tác ghi trên bộ nhớ và được sử dụng cho I/O tiêu chuẩn. c, con trỏ mã, là đặc biệt: nó trỏ đến lệnh hiện tại. d là con trỏ dữ liệu. Nó tự động tăng lên sau mỗi lệnh, nhưng vị trí mà nó trỏ đến được sử dụng cho các lệnh thao tác dữ liệu.
Ký hiệu con trỏ
d có thể giữ một địa chỉ bộ nhớ; [d] là thanh ghi gián tiếp ; giá trị được lưu trữ tại địa chỉ đó. [c] cũng tương tự.
Bộ nhớ
Máy ảo có 59.049 (3 10 ) vị trí bộ nhớ mà mỗi vị trí có thể chứa một số ba phần mười trit . Mỗi vị trí bộ nhớ có địa chỉ từ 0 đến 59048 và có thể giữ giá trị từ 0 đến 59048. Việc tăng vượt quá giới hạn này sẽ trở về 0.
Trước khi chương trình Malbolge bắt đầu, phần đầu tiên của bộ nhớ sẽ được lấp đầy bởi chương trình. Tất cả các khoảng trắng trong chương trình đều bị bỏ qua và để làm cho việc lập trình trở nên khó khăn hơn.
Phần còn lại của bộ nhớ được lấp đầy bằng cách sử dụng phép toán điên rồ trên hai địa chỉ trước đó ( [m] = crz [m – 2], [m – 1] ). Bộ nhớ được lấp đầy theo cách này sẽ lặp lại sau mỗi mười hai địa chỉ (các chữ số bậc ba riêng lẻ sẽ lặp lại sau mỗi ba hoặc bốn địa chỉ, vì vậy một nhóm chữ số bậc ba được đảm bảo lặp lại sau mỗi mười hai).
Vào năm 2007, Ørjan Johansen đã tạo ra Malbolge Unshackled, phiên bản của Malbolge không có giới hạn bộ nhớ tùy ý. Hy vọng là tạo ra một ngôn ngữ Turing-Complete trong khi vẫn giữ được nhiều tinh thần của Malbolge. Không có quy tắc nào khác được thay đổi và tất cả các chương trình Malbolge không đạt đến giới hạn bộ nhớ đều hoàn toàn hoạt động.
Những ngôn ngữ lập trình khó nhất trên thế giới
Ngôn ngữ lập trình Brainfuck
Như tên gọi của nó, ngôn ngữ này thực sự phức tạp và lập trình bằng ngôn ngữ này thực sự khó khăn.
Brainfuck được Urban Muller tạo ra vào năm 1993 bởi Urban Muller với mục đích chính tạo ra ngôn ngữ này là để viết các dòng mã tối thiểu. Ngôn ngữ này hoạt động trong một mảng các ô nhớ và chỉ có 8 lệnh được định nghĩa trong ngôn ngữ này để viết bất kỳ chương trình nào.
Ngôn ngữ lập trình Cow
Cow là ngôn ngữ lập trình được tạo ra bởi Sean Heber vào năm 2003.
Ngôn ngữ này bao gồm 12 hướng dẫn và điều thú vị nhất về ngôn ngữ này là từ khóa ‘MoO’ (tiếng kêu của một con bò) hoặc đó là các biến thể được sử dụng trong ngôn ngữ này. Viết bất kỳ ký tự hoặc từ khác được coi là một comment trong ngôn ngữ này. Nó dựa trên ngôn ngữ được sử dụng trong Turing Machine.
Ngôn ngữ lập trình Intercal
Ngôn ngữ này được tạo ra vào năm 1972 bởi Don Woods và James M. Lyon và cả hai đều là sinh viên tại Đại học Princeton.
Ngôn ngữ này không có bất kỳ từ viết tắt nào có thể phát âm được. Những người tạo ra ngôn ngữ lập trình này bao gồm các từ khóa như: Read out, Ignore, Please, Forget và Likewise để làm cho ngôn ngữ này thân thiện với người dùng.
Điều thú vị về ngôn ngữ này là nó mong đợi 4 từ khóa trong code để kiểm tra tính lịch sự của lập trình viên. Nếu nó sẽ ít hơn thì mã không được thực thi bởi vì nó sẽ xem xét việc lập trình viên không đủ lịch sự.
Ngôn ngữ Lập trình Whitespace
Ngôn ngữ này được giới thiệu bởi Edwin Brady và Chris Morris vào ngày 01/04/2003. Ngày nó được giới thiệu mọi người nghĩ đó là một trò đùa nhưng thực ra nó không phải.
Để lập trình ngôn ngữ này bạn chỉ được phép sử dụng khoảng trắng, tab và đường dẫn. Bất kỳ ký tự nào khác khác sẽ bị bỏ qua bởi trình thông dịch.
Bạn đang ấp ủ ước mơ thành lập trình viên chuyên nghiệp? Bạn đang muốn tìm hiểu nguồn gốc hình thành ngôn ngữ lập trình cũng như tất cả các ngôn ngữ lập trình trên thế giới? Hãy dành thời gian nghiên cứu về ngôn ngữ Malbolge cũng như 1 trong 5 ngôn ngữ trên nhé, Sau khi có thể viết được chương trình Hello World bằng các ngôn ngữ này thì chắc chắn rằng: Ngôn ngữ Lập trình Java sẽ trở nên quá dễ dàng đối với bạn.
Xem thêm: Các loại ngôn ngữ lập trình phổ biến nhất hiện nay