4 điểm bởi GN⁺ 2024-04-25 | 1 bình luận | Chia sẻ qua WhatsApp

Giới thiệu về ngôn ngữ lập trình Piet

  • Piet là một ngôn ngữ lập trình dùng để viết các chương trình trông như những bức tranh trừu tượng
  • Tên gọi được đặt theo Piet Mondrian, người tiên phong trong lĩnh vực nghệ thuật trừu tượng hình học

Nguyên tắc thiết kế của ngôn ngữ Piet

  • Mã chương trình mang hình thức của nghệ thuật trừu tượng

Các màu sắc được dùng trong Piet

  • Piet sử dụng 20 màu riêng biệt
    • Chu kỳ sắc độ: đỏ -> vàng -> xanh lá -> xanh lơ -> xanh dương -> đỏ tía -> đỏ
    • Chu kỳ độ sáng: sáng -> trung bình -> tối -> sáng
  • Màu trắng và màu đen không thuộc hai chu kỳ này
  • Có thể dùng các màu bổ sung (cam, nâu, v.v.) nhưng hiệu ứng tùy theo cách triển khai
    • Trong trường hợp đơn giản nhất, chúng được xử lý giống như màu trắng

Codel (codel)

  • Đơn vị cơ bản của mã Piet là khối màu
    • Gồm một hoặc nhiều codel liền kề có cùng màu
    • Các khối màu chỉ tiếp giáp theo đường chéo thì không được xem là liên tục
    • Không bị giới hạn về hình dạng và có thể có các "lỗ" bên trong mang màu khác

Ngăn xếp

  • Piet sử dụng ngăn xếp để lưu trữ mọi giá trị dữ liệu
  • Các giá trị dữ liệu chỉ tồn tại dưới dạng số nguyên, nhưng có thể được đọc hoặc xuất ra dưới dạng giá trị ký tự Unicode
  • Ngăn xếp về mặt khái niệm là sâu vô hạn, nhưng khi triển khai có thể cung cấp kích thước tối đa hữu hạn

Thực thi chương trình

  • Trình thông dịch Piet bắt đầu chạy từ khối màu chứa codel ở góc trên bên trái của chương trình
  • Nó duy trì con trỏ hướng (DP) và bộ chọn codel (CC), rồi di chuyển giữa các khối màu theo các quy tắc sau:
    • Tìm cạnh xa nhất theo hướng DP trong các cạnh của khối màu hiện tại
    • Từ cạnh đó, tìm codel xa nhất theo hướng CC
    • Từ codel đó, di chuyển sang khối màu kề bên theo hướng DP
  • Lặp lại quá trình trên cho đến khi chương trình kết thúc

Các thành phần cú pháp

Số

  • Mỗi khối màu không phải đen hay trắng biểu thị một số nguyên bằng với số lượng codel của khối đó
  • Chỉ có thể biểu diễn số dương, nhưng có thể tạo số âm bằng toán tử
  • Khi trình thông dịch gặp một con số, nó không tự động push giá trị đó lên ngăn xếp

Khối đen và rìa biên

  • Các khối màu đen và rìa của chương trình giới hạn luồng thực thi
  • Nếu cố di chuyển vào khối đen hoặc ra rìa, CC sẽ được đảo và DP sẽ xoay theo chiều kim đồng hồ
  • Nếu sau 8 lần thử vẫn không thể di chuyển thì chương trình kết thúc

Khối trắng

  • Khối trắng là vùng "tự do" mà trình thông dịch có thể đi xuyên qua mà không bị hạn chế
  • Nó sẽ "trượt" qua các codel trắng theo hướng DP cho đến khi chạm khối không trắng
  • Dù đi sang màu mới bằng cách băng qua khối trắng thì cũng không thực thi lệnh nào
  • Nếu đường đi bên trong khối trắng bị lần ngược hoàn toàn thì chương trình kết thúc

Lệnh

  • Được xác định bởi sự thay đổi màu khi trình thông dịch di chuyển từ khối màu này sang khối màu khác
  • Lệnh cần thực thi được quyết định theo số bước trong chu kỳ sắc độ và chu kỳ độ sáng
  • Nếu di chuyển băng qua khối trắng thì không thực thi lệnh
  • Các lệnh chính:
    • push, pop, add, subtract, multiply, divide, mod, not, greater
    • pointer, switch, duplicate, roll
    • in(number), in(char), out(number), out(char)

Ý kiến của GN⁺

  • Piet là một ngôn ngữ lập trình hấp dẫn về mặt thị giác, cho thấy sự kết hợp độc đáo giữa nghệ thuật trừu tượng và lập trình
  • Tuy nhiên, về mặt tính thực dụng thì có vẻ còn nhiều giới hạn. Dự đoán rằng sẽ không dễ để viết các chương trình phức tạp
  • Có lẽ chủ yếu phù hợp cho các thử nghiệm về thiết kế ngôn ngữ lập trình, câu đố hoặc sáng tác tác phẩm nghệ thuật
  • Trong nhóm ngôn ngữ lập trình trực quan, Blockly của Google hay Scratch của MIT có thể là những lựa chọn thực tế hơn
  • Dù sao thì Piet cũng là một ngôn ngữ quá deep, nên có cảm giác sẽ khó dùng làm công cụ học lập trình cho người mới bắt đầu trong thực tế

1 bình luận

 
GN⁺ 2024-04-25
Ý kiến trên Hacker News
  • Chương trình cuối cùng trên trang ví dụ của ngôn ngữ Piet thực sự gây kinh ngạc. Có người (tên là Piet) đã nhìn thấy một tác phẩm gợi nhớ đến ngôn ngữ Piet rồi thử chạy nó, và nó thực sự hoạt động. Đây là lần đầu tiên trong lịch sử một nghệ sĩ đồ họa vô tình vẽ ra một chương trình có thể thực thi.

  • Piet là một thử nghiệm đột phá trong số các ngôn ngữ lập trình esoteric, nhưng chưa đạt được mục tiêu khiến nó trông như một bức tranh Mondrian trừ khi người viết cố ý làm vậy. Tôi ước chính cấu trúc của ngôn ngữ được thiết kế để thứ được viết ra tự nhiên trông giống một bức tranh Mondrian.

  • Điều này đặt ra câu hỏi: "Thuật toán trông như thế nào?" Liệu có thể tạo ra ngoài đời thực thứ gì đó giống tiểu thuyết The Glass Bead Game (Magister Ludi) của Hermann Hesse không? Là một người thiên về trực quan, tôi muốn tin là có, và thực tế đã từng thử dùng những công cụ như vậy, nhưng các câu trả lời mơ hồ khiến việc cân bằng giữa khả năng biểu đạt trực quan và tính mô-đun trở nên khó khăn.

  • Mấy thứ kiểu này có vẻ như sẽ xuất hiện trong phim trinh thám tội phạm, khiến nhân vật chính/điều tra viên bối rối cho đến khi ai đó nhận ra đó là mã. Chúng ta đã từng nghĩ mã QR là hữu ích cơ mà...

  • Việc khám phá ra Piet là một khoảnh khắc đặc biệt của sự kính nể, bối rối và kinh ngạc. Điều đó được ghi lại trong một cuộc trò chuyện trên podcast CS với người bạn Oz của tôi.

  • Có người đã làm một Quine bằng Piet. Hình ảnh đã hỏng, nhưng vẫn có bản sao trên CodeGolf.

  • Ở đại học có một học phần nhỏ về các ngôn ngữ lập trình esoteric, và mỗi người chọn một ngôn ngữ để nghịch thử. Tôi chọn Piet; nó rất vui, nhưng thành thật mà nói các ứng dụng ví dụ nhỏ không được thỏa mãn về mặt thẩm mỹ cho lắm. Có lẽ phải là chuyên gia mới tạo ra được nghệ thuật bằng Piet.

  • Tôi biết đến thứ này hồi đại học và đã thức đến khuya để viết vài chương trình đơn giản; đó thực sự là một trải nghiệm rất thú vị. Tôi khuyên mọi người nên thử một lần!

  • Trang ví dụ thật đáng kinh ngạc. Bạn có thể thấy các bức vẽ trên canvas dần trở nên tinh xảo và đẹp hơn.

  • Thật sự rất ngầu! Tôi tự hỏi liệu có thể gom các tác phẩm Piet lại và tạo ra một chương trình trả về văn bản cho trước hay không. Kiểu như một trình sinh mã Piet vậy. Có vẻ sẽ là một món quà in ấn rất tuyệt!