INTERCAL: Ngôn ngữ lập trình không thực dụng

INTERCAL: Ngôn ngữ lập trình không thực dụng

Hello World trong Intercal trên VSCode.

Phần lớn các ngôn ngữ lập trình và trình biên dịch đều được thiết kế để thực dụng. Đôi khi thực tế không đáp ứng được kỳ vọng — hiệu năng kém hơn dự đoán, cú pháp khó hiểu hoặc các tối ưu của trình biên dịch lại làm hỏng mã — nhưng chúng vẫn được tạo ra sao cho hữu dụng.

INTERCAL lại cố gắng lật ngược mọi quy ước và giả định thông thường, vì vậy nó trở thành một ngôn ngữ không thực dụng nhưng lại vừa thú vị vừa hài hước.

INTERCAL là gì?

Ngôn ngữ lập trình được tạo ra để khác biệt

Hello World trong Intercal.

INTERCAL được phát triển tại Đại học Princeton bởi Don Woods và James M. Lyon vào năm 1972. Tên đầy đủ của nó là “Compiler Language With No Pronounceable Acronym” (Ngôn ngữ Biên dịch Với Viết Tắt Không Thể Phát Âm).

Trong hầu hết các trường hợp, tên một ngôn ngữ lập trình không tiết lộ gì nhiều.

  • C không cho biết gì.
  • Python? Rắn có gì liên quan?
  • Fortran — viết tắt của “Formula” và “Translation” — gợi ý mục đích sử dụng, nhưng không cho biết thực tế khi lập trình bằng nó sẽ như thế nào.

Ngược lại, INTERCAL với nghĩa “Compiler Language with No Pronounceable Acronym” đã truyền tải đúng những gì người dùng nên mong đợi: cả về hiệu năng lẫn trải nghiệm lập trình.

Lập trình trong INTERCAL ra sao?

Mục tiêu của INTERCAL là tạo ra một ngôn ngữ hoàn toàn khác biệt so với các ngôn ngữ thời bấy giờ. Trong thập niên 1970, điều đó đồng nghĩa với việc cố ý tránh các chuẩn mực phổ biến trong FORTRAN, COBOL và BASIC.

Ở khía cạnh này, các nhà sáng tạo đã thành công. Biến — yếu tố không thể thiếu trong hầu hết ngôn ngữ — không được đặt tên bằng từ ngữ dễ hiểu; thay vào đó chúng được ký hiệu bằng dấu chấm và có một số nguyên làm tên. Vì vậy, thay vì biến 16‑bit đầu tiên là variable_1, trong INTERCAL nó sẽ là .1. Biến thứ hai là .2, cứ như vậy.

Bí mật:  Nvidia Trở Thành Công Ty Đầu Tiên Cán Mốc Vốn Hóa 5.000 Tỷ USD

Để tạo một biến 32‑bit, bạn phải dùng dấu hai chấm (:) thay cho dấu chấm, còn gọi là “spot” trong INTERCAL. Lý do? Rõ ràng: nếu một spot là biến 16‑bit, thì hai spot xếp chồng lên nhau sẽ tạo thành biến 32‑bit — chính là dấu hai chấm.

Giá trị cho biến được gán bằng toán tử mũi tên trái (<-). Mũi tên trái cho biết giá trị sẽ “đi vào” biến. Cách này hoàn toàn ngược lại với trực giác thông thường, gây cảm giác vừa bực bội, vừa hài hước, lại vừa thú vị.

Các quy ước lạ không dừng lại ở biến đơn. Mảng 16‑bit được ngăn cách bằng dấu phẩy, trong khi mảng 32‑bit dùng dấu chấm phẩy (;) kết hợp với spot.

Những phần còn lại của ngôn ngữ cũng kỳ quặc không kém

Nếu muốn bỏ qua (skip) một dòng — ví dụ khi viết lời debug và comment nó đi — bạn dùng ABSTAIN thay vì dấu //. ABSTAIN còn có thể vô hiệu hoá toàn bộ một nhóm hàm.

Khi muốn kích hoạt lại, bạn phải dùng REINSTATE.

Trong phiên bản năm 1990, INTERCAL thay GOTO (được xem là cũ kỹ và không lịch thiệp) bằng COME FROM, thực hiện cùng chức năng như GOTO nhưng hoạt động ngược lại.

Lịch sự là yêu cầu bắt buộc

Để “bổ sung” vào các quy tắc lạ khác, INTERCAL còn yêu cầu lập trình viên phải lịch sự. Thỉnh thoảng, bạn phải chèn từ please vào chương trình.

Nếu không làm vậy, trình biên dịch sẽ ném ra lỗi E079 “PROGRAMMER IS INSUFFICIENTLY POLITE”.

Bạn có thể nghĩ rằng nói please liên tục sẽ luôn an toàn, nhưng không phải. Giống như với con người, nếu bạn cố gắng quá mức, trình biên dịch sẽ nhận ra bạn không chân thành và phát sinh lỗi E099 “PROGRAMMER IS OVERLY POLITE”.

Bí mật:  ChatGPT AI Smart Glasses – Ưu đãi Amazon Tháng 3 2026

Trình biên dịch và tài liệu hướng dẫn cũng lạ lùng

Đôi khi trình biên dịch không hợp tác

PS4 compiler flags in NotebookLM showing how it works

Trình biên dịch của INTERCAL cũng “kỳ quặc” không kém ngôn ngữ. Đôi khi nó trả về “Random Compiler Bug”. Không phải vì thực sự phát hiện lỗi, mà chỉ vì nó ngẫu nhiên “không thích” một phần mã của bạn.

Nếu thực sự không thể phân tích một dòng, nó không báo lỗi như mong đợi; thay vào đó, toàn bộ dòng sẽ được được coi như một comment.

double‑oh‑seven — toán tử “double‑oh‑seven” của INTERCAL — cho phép mỗi dòng có một xác suất phần trăm nhất định để được thực thi.

Tài liệu hướng dẫn cũng phản chiếu ngôn ngữ

Như bạn có thể đoán, tài liệu của INTERCAL cũng mang tính bất ngờ và hài hước. Văn phong của sách hướng dẫn khô khan, mỉa mai và có thể nhận thấy trong hầu như mọi từ.

Khi bạn đọc đến cuối cùng, bạn sẽ không thấy mục “phụ lục”, mà là một “hạch hạnh”. Tại sao? Vì các nhà phát triển muốn “làm nổi bật” một bộ phận cơ thể thường bị bỏ qua.

Mọi người nên thử INTERCAL

Thỉnh thoảng sự ngớ ngẩn lại mở ra những hiểu biết thú vị

A split terminal shows a Jsonnet template producing a Python file of constants on the left and the generated Python output on the right.

INTERCAL là một ngôn ngữ rất khó để viết mã thực tiễn, và mặc dù tôi chưa thử viết bất kỳ đoạn mã benchmark nào, mọi tài liệu đều cho rằng hiệu năng của nó thật sự tồi tệ.

Tuy nhiên, mỗi lập trình viên vẫn nên dành chút thời gian thử sức. Dù ngôn ngữ này không hữu dụng cho bất kỳ dự án nào, nó là công cụ tuyệt vời để bộc lộ toàn bộ các giả định và trực giác mà chúng ta đã xây dựng quanh việc lập trình.

Nếu bạn từng gặp một đoạn mã gây phiền toái và đột nhiên nảy ra một ý tưởng giải quyết, thường ý tưởng đó sẽ nằm ngoài khuôn khổ thông thường. INTERCAL giúp não bộ linh hoạt hơn, nhắc nhở bạn rằng chỉ vì một cách làm “đã được thực hiện” không đồng nghĩa nó “phải” được thực hiện. Tuy nhiên, như INTERCAL đã chỉ ra, đôi khi có lý do chính đáng cho một số quy ước.

Bí mật:  Nhãn có làm AI “mù”? Tự học và bài toán liên kết đối tượng trong thị giác máy tính

Một trong những trò đùa bền bỉ nhất trong khoa học máy tính

Hơn 50 năm sau khi ra đời, INTERCAL vẫn được biên dịch, thảo luận và đưa ra các mã lỗi châm biếm dành cho những sinh viên chưa biết gì.

Ở nhiều khía cạnh, nó là ngôn ngữ esoteric đầu tiên — những ngôn ngữ được tạo ra để đặc biệt, chỉ dành cho những người yêu thích. Một thí nghiệm tư duy chuyển thành ngôn ngữ lập trình kém đã sinh ra cả một thể loại ngôn ngữ và một cộng đồng đam mê, đồng thời minh họa rõ ràng tại sao thiết kế tốt lại quan trọng.

INTERCAL, esoteric, programming

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top