2 điểm bởi GN⁺ 2025-11-09 | 2 bình luận | Chia sẻ qua WhatsApp
  • Một phông chữ monospace xử lý các ký hiệu thường dùng trong ngôn ngữ lập trình ngang hàng với bảng chữ cái, hướng tới sự hài hòa về mặt thị giác trong trình soạn thảo mã
  • Với thiết kế tập trung vào các ký hiệu ASCII, phông chữ này cải thiện căn chỉnh của các ký hiệu nhiều ký tự như ->, ::, =~, đồng thời mang lại độ đậm cân bằng và khả năng phân biệt rõ ràng
  • Có tính đến khả năng đọc theo từng ngôn ngữ, giúp thể hiện rõ hình dạng của ký hiệu và toán tử trong Perl, Haskell, C, v.v.
  • Hiện được cung cấp dưới dạng một độ đậm duy nhất và không dùng ligature, đồng thời hỗ trợ bold tổng hợp trong môi trường fontconfig·pango của Linux
  • Được phát hành theo SIL Open Font License 1.1, cho phép sử dụng và chỉnh sửa tự do

Tổng quan về Myna

  • Myna là một phông chữ monospace coi ký hiệu là glyph hạng nhất, tập trung vào việc tăng tính nhất quán thị giác của các ký hiệu trong ngôn ngữ lập trình
    • Giải quyết vấn đề các ký hiệu như ->, $, @, % trông gượng gạo trong các phông chữ hiện có
    • Giữ nguyên sự đơn giản của ASCII trong khi mô phỏng hiệu ứng thẩm mỹ của ligature

Đặc điểm chính

  • Symbol-First Design: được thiết kế xoay quanh các ký hiệu ASCII được sử dụng rộng rãi trong nhiều ngôn ngữ lập trình
  • Độ chính xác căn chỉnh: tăng độ chính xác trong căn chỉnh của các ký hiệu nhiều ký tự như ->, >>=, ::, từ đó cải thiện khả năng đọc mã
  • Độ đậm cân bằng (Weight): duy trì sự hài hòa trong độ tương phản giữa ký hiệu và ký tự
  • Hình dạng tối giản: dấu ngoặc kép, dấu phẩy, v.v. được đơn giản hóa theo hình học
  • Khả năng phân biệt rõ ràng: tăng cường phân biệt giữa các ký tự dễ nhầm như 1, l, I, |, 0, O, o
  • Thiết kế nhận diện theo ngôn ngữ: thể hiện rõ sigil của Perl, toán tử của Haskell và biểu diễn ký hiệu trong C

Bối cảnh phát triển và hiện trạng

  • Đây là kiểu chữ được tự thiết kế do không hài lòng với các chi tiết glyph của các phông monospace hiện có
  • Được công khai sau khi chính tác giả dùng lâu dài trong công việc chuyên môn và các dự án cá nhân
  • Hiện được cung cấp dưới dạng một độ đậm duy nhất, phiên bản không dùng ligature, và có thể mở rộng trong tương lai tùy theo nhu cầu
    • Hỗ trợ bold tổng hợp thông qua fontconfig và pango trong môi trường Linux
  • Áp dụng SIL Open Font License 1.1
  • Phiên bản đầu tiên bắt đầu từ Hera (bản tùy biến dựa trên Source Code Pro)
  • Được phát triển bằng cách tham khảo ưu điểm của nhiều phông chữ như Fira Mono, Inconsolata, Plex Mono, Office Code Pro, Anonymous Pro

Kế hoạch sắp tới

  • Hướng tới việc sử dụng phổ quát trong terminal và trình soạn thảo
  • Bao gồm một số glyph không phải ASCII (ký hiệu hình học, toán học, v.v.)
  • Dự kiến mở rộng glyph và bổ sung tính năng theo phản hồi từ cộng đồng

2 bình luận

 
bobross0 2025-11-11

Tôi đang dùng phông chữ JetBrains nên thấy khá thú vị.

 
GN⁺ 2025-11-09
Ý kiến trên Hacker News
  • Gần đây tôi chuyển sang Iosevka (phát âm là Joseph) chính vì sự gọn gàng kiểu này
    Liên kết GitHub của Iosevka
    Điều thú vị là cấu trúc mã nguồn của font này rõ ràng đến mức bạn thực sự có thể đọc được

    • Iosevka đúng là một font rất đẹp. Dáng nén (condensed look) của Myna thực ra cũng lấy cảm hứng từ Iosevka
      Phiên bản trước là Hera, một bản không nén được tùy biến từ Source Code Pro
    • Iosevka tự hỗ trợ custom build, nên có thể chọn nhiều biến thể glyph và ligature khác nhau. Mức độ này khá ấn tượng
    • Giờ tôi mới biết Iosevka là một biến thể của Joseph. Dùng mấy năm rồi mà còn không biết phát âm thế nào. Dù nó có ngay trong README
    • Pragmasevka cũng đáng thử. Tôi chuyển từ Iosevka sang và cảm thấy độ dễ đọc nhỉnh hơn một chút
    • Tôi đang dùng Iosevka Orw. Độ rộng của nó nằm giữa Iosevka tiêu chuẩn và monospace thông thường, nên khá lý tưởng
  • Nói thật thì tôi không hiểu lắm mô tả “font cho ngôn ngữ nhiều ký hiệu”. Các ký hiệu trông khá bình thường. Hay là khoảng cách chỉ rộng hơn một chút?

    • Mục nhấn mạnh đầu tiên trên trang GitHub là “Near-Perfect Alignment”. Tức là các ký hiệu nhiều ký tự như ->, >>=, :: được căn thẳng hàng gần như hoàn hảo
    • Tôi là nhà thiết kế. “Ngôn ngữ nhiều ký hiệu” ở đây nghĩa là các ngôn ngữ dùng nhiều ký hiệu như Perl hay Haskell. Tôi muốn tạo một font có căn chỉnh gọn gàng mà không cần dùng ligature
    • Khi giải thích khác biệt về thiết kế thì cần ví dụ so sánh thực tế. Không có ảnh đối chiếu nên thấy khó hiểu cũng là điều đương nhiên
  • Font khá đẹp. Chỉ là có vẻ ký tự emdash (—) bị thiếu trong phần mẫu. Tôi dùng Markdown nhiều, và nhiều font lập trình hiển thị ký tự này không đúng
    Ảnh chụp màn hình giúp đánh giá tốt hơn hẳn so với các font khác

    • Đúng vậy, em-dash không chỉ là một ký tự đơn thuần. Tôi nghĩ nó là yếu tố cốt lõi của viết lách tốt (nửa đùa nửa thật)
    • Cảm ơn góp ý. Trong font này tôi làm en-dash khá rộng nên khó phân biệt với em-dash. Tôi hầu như không dùng em-dash nên chưa thấy cần phải tách bạch
      Nhưng nếu có nhu cầu, tôi sẽ cân nhắc cải thiện
  • Cũng như nhiều font khác, font này có vẻ căn mũi tên dọc (↑↓) hơi kỳ
    Ký tự ^ vốn dĩ thời máy đánh chữ dùng cho dấu circumflex, nên chiều cao của nó bất đối xứng. Tôi nghĩ sẽ tốt hơn nếu phần đáy của caret đối xứng với v

    • Tôi chưa từng thấy ai dùng caret làm mũi tên lên xuống. Tôi không nghĩ đối xứng là điều bắt buộc
    • Dùng caret như mũi tên dọc là không thực tế. Phải gõ trên hai dòng cơ. Tôi cũng tò mò không biết có ngôn ngữ nào thực sự dùng kiểu đó không
    • Bạn đang định tạo ligature bắc qua nhiều dòng à? Sao không dùng luôn ký tự Unicode ?
    • Tôi là nhà thiết kế. Những tổ hợp như vậy khó phát hiện, và caret vốn là ký hiệu toán tử, nên không thể phá vỡ ý nghĩa lập trình của nó. So sánh với v là không công bằng
    • Lý do lịch sử của caret không quan trọng. Giờ ai cũng đã quen với hình dạng đó. Đổi font vì những trường hợp quá đặc biệt như vậy lại dễ gây rối
      Font nên giữ hình dạng có thể dự đoán được
  • Với lời phàn nàn rằng “-> trông không giống mũi tên”, giải pháp thực sự là dùng mũi tên thật như ←→. Mong rằng một ngày nào đó các ngôn ngữ sẽ hỗ trợ chất lượng typography tốt hơn

    • Tôi là nhà thiết kế. Không thể có cả sự thanh nhã lẫn tính nhất quán cùng lúc. Chúng tôi đang cố làm cho mã nguồn dựa trên ASCII trông đẹp mà không cần ligature
    • Ligature vốn đã tồn tại
  • JuliaMono là font được thiết kế để hỗ trợ toàn bộ Unicode cho ngôn ngữ Julia

    • Cảm ơn vì liên kết. Có vẻ bộ glyph rất phong phú. Việc dùng cơ chế fallback như JuliaMono2, 3, 4 để vượt giới hạn font cũng rất thú vị
    • Tôi là nhà thiết kế. Tôi chủ yếu làm trong phạm vi ASCII, nhưng có thể đặt JuliaMono làm font phụ trợ cho Myna để mở rộng độ phủ Unicode
  • Font đẹp đấy, nhưng khoảng cách chữ “Lorem” ở trên cùng trông hơi quá rộng nên kerning có cảm giác hơi lệch. Cá nhân tôi khá để ý điều này

    • Tôi là nhà thiết kế. Dùng hằng ngày nên tôi đã trở nên kém nhạy với khuyết điểm của nó. Nhưng nhận xét này là hợp lý. Tôi sẽ cân nhắc chỉnh kerning ở phiên bản tới. Nếu có ví dụ cụ thể thì hãy mở issue
  • Ligature là chủ đề gây tranh cãi khá nhiều trong giới lập trình viên
    Có người thấy mã nguồn đẹp hơn và dễ đọc hơn, có người lại cho rằng “ẩn ký hiệu đi là không cần thiết hoặc thiếu trung thực”
    Cũng có người nói rằng “nếu ngôn ngữ hỗ trợ Unicode tử tế thì đã không cần ligature”
    Kết quả là dự án này chọc đúng cả ba phe cùng lúc, và vì thế lại càng thú vị hơn. Tôi đã bấm sao trên GitHub

    • Trong hầu hết editor, ligature là tùy chọn có thể bật tắt. Vì thế không ai bị loại trừ cả
  • Tôi cảm thấy các ký hiệu được đặt hơi cao khi đứng cạnh chữ thường. Có vẻ đây là hệ quả của việc cố căn cho ngoặc thẳng hàng. Cảm giác cân bằng hơi thiếu một chút

    • Tôi là nhà thiết kế. Font thông thường tập trung vào văn bản nên đi theo căn chỉnh truyền thống, nhưng code không phải văn bản
      Phá vỡ truyền thống đôi khi lại giúp tăng độ dễ đọc. Dấu gạch nối được thiết kế để căn với > và tạo thành hình mũi tên
  • Đã có Myna UI là một font biểu tượng rồi. Có vẻ dễ gây nhầm lẫn

    • Tôi là nhà thiết kế. Cảm ơn đã báo. Nhưng tôi nghĩ sẽ không gây nhầm lẫn lớn đâu