1 điểm bởi GN⁺ 2024-09-27 | 1 bình luận | Chia sẻ qua WhatsApp
  • Tcl/Tk 9.0 là bản phát hành lớn mới nhất của Tcl và Tk, mang đến các tính năng mới cùng một số điểm không tương thích so với Tcl/Tk 8
  • Ký hiệu bản phát hành mới nhất là Tcl/Tk 9.0.4, với ngày phát hành là 26/6/2026
  • Tcl cung cấp 64-bit capacity để xử lý các giá trị dữ liệu vượt quá 2GB; chuỗi có thể có độ dài tùy ý trong phạm vi bộ nhớ khả dụng, còn list và dictionary có thể chứa số lượng phần tử rất lớn
  • Xử lý văn bản hỗ trợ toàn bộ dải code point Unicode, các encoding mới như họ utf-16, utf-32, ucs-2CESU-8, encoding profiles để kiểm soát encoding I/O, và mặc định -encoding utf-8 cho source
  • Tcl có thể mount file zip như một hệ thống tệp bằng zipfs, đồng thời hỗ trợ phân phối ứng dụng theo kiểu starkit thông qua các archive hệ thống tệp được đính kèm vào file thực thi hoặc thư viện
  • Engine xử lý sự kiện trên Unix được cấu hình dựa trên epoll hoặc kqueue nếu có thể, còn trên các nền tảng không có các system call này thì vẫn giữ triển khai dựa trên select
  • Các điểm không tương thích chính của Tcl 9.0 gồm: tên biến không được định danh đầy đủ sẽ được diễn giải trong namespace hiện tại thay vì global; phản hồi mặc định với I/O malencoding được đổi thành lỗi (-profile strict); ký tự ~ trong đường dẫn không được diễn giải thành thư mục home; $::tcl_precision không còn được dùng để kiểm soát việc tạo chuỗi từ double
  • Về thay đổi build và nền tảng, tùy chọn build --disable-threads đã bị loại bỏ nên luôn bật thread, và Windows yêu cầu Windows 7 hoặc Windows Server 2008 R2 trở lên
  • Với phần mở rộng C của Tcl, binary được build nhắm tới Tcl 8.6 trở xuống sẽ không hoạt động trên Tcl 9.0; tương thích ABI không phải là mục tiêu của Tcl 9.0, và trong phần lớn trường hợp có thể build lại cho Tcl 9.0 nếu không dùng các hàm API đã bị loại bỏ
  • Giao diện C công khai đã mở rộng nhiều đối số từ int sang Tcl_Size, chấm dứt hỗ trợ Tcl_ChannelTypeVersion thấp hơn 5, giới thiệu quản lý phiên bản cho cấu trúc Tcl_ObjType, đồng thời loại bỏ các macro CONST* và nhiều hàm API
  • Tk 9.0.0 không hỗ trợ Tcl 8.6, và để dùng Tk 9.0.0 trước hết cần Tcl 9.0.0
  • Tk cung cấp tk sysnotify, tk print, tk systray để truy cập thông báo, xuất nội dung và chức năng khay hệ thống của OS
  • Hình ảnh trong Tk hỗ trợ một phần SVG, đọc/ghi metadata của photo image, và truy cập alpha channel
  • Widget và theme tích hợp của Tk đã được chuyển sang nhận biết scaling; hỗ trợ cử chỉ hai ngón tay được cải thiện trong các môi trường khả dụng; “aqua” của tk windowingsystem yêu cầu macOS 10.10 trở lên
  • Tài liệu migration cho Tcl 9 gồm Migrating C extensions to Tcl 9Migrating scripts to Tcl 9

1 bình luận

 
GN⁺ 2024-09-27
Các ý kiến trên Hacker News
  • Đây là bản phát hành lớn đầu tiên sau 27 năm. Cấu trúc bên trong là 64-bit nên dữ liệu có thể trở nên rất lớn, và có nhiều tính năng mới như toàn bộ Unicode bao gồm emoji hiện đại, hệ thống tệp Zip, v.v.
    Một số phần cặn cũ cũng đã bị loại bỏ nên vài chương trình có thể cần cập nhật, nhưng nhìn chung mức độ tương thích vẫn cao. Trang trên có liên kết đến ghi chú phát hành mô tả chi tiết các tính năng được đưa vào/bị loại bỏ

    • Thay đổi về hệ thống tệp Zip thật sự rất đáng mừng. Trước đây, khi tạo ứng dụng độc lập, cộng đồng dùng nhiều kỹ thuật với các công cụ và bí quyết cụ thể; giờ những thứ đó được đưa vào bộ công cụ cơ bản theo cách chuẩn, nên đây là một thay đổi tuyệt vời
    • Tôi tò mò vì sao họ lại loại bỏ dấu ngã ~, vốn là cách viết tắt tiện lợi để đi tới thư mục Home
  • Những người theo chủ nghĩa thuần túy về ngôn ngữ và những người theo chủ nghĩa thuần túy hướng đối tượng kiểu thập niên 1990 thật sự ghét Tcl, nhưng hệ sinh thái này có một triết lý thiết kế đặc biệt
    Mọi thứ đều là chuỗi hoặc lệnh, và phần mở rộng hướng đối tượng có cảm giác hơi được đắp thêm vào, nhưng nếu thử tạo GUI bằng Tcl/Tk thuần thay vì dùng Tcl qua Python như tkinter, dùng giao diện SQLite, viết một phần mở rộng C nhỏ hoặc bọc một thư viện, thì rất nhiều thứ cứ thế hoạt động tốt

    • Tôi thấy một góc nhìn thú vị trong bài viết về Tcl của antirez [1]. Nếu tôi nhớ không nhầm, Redis dùng Tcl cho các script kiểm thử
      Tôi đã xem qua liên kết trong tài liệu của https://folk.computer, và dự án này cũng dùng Tcl làm ngôn ngữ script. Với những mục đích như vậy thì có lẽ cũng không có lý do gì để ghét Tcl
      [1] http://antirez.com/articoli/tclmisunderstood.html
    • Nhờ Tcl mà startup của chúng tôi mới có thể thành hình, và kinh nghiệm cùng những bài học khi đó đã trở thành điểm khởi đầu của OutSystems
      Một trong số đó là: tôi không bao giờ muốn dùng lại một ngôn ngữ động không có trình biên dịch JIT cho một web server hoàn chỉnh. Bản thân ngôn ngữ thì tuyệt vời, nhưng vì vấn đề hiệu năng mà phải thường xuyên viết lại các thư viện Tcl bằng C thì không vui chút nào
    • Câu “mọi thứ đều là chuỗi hoặc lệnh” không hề phóng đại. Thật sự mọi thứ đều là lệnh, đến mức cách viết chú thích ở đây khiến người ta phải tự hỏi “rốt cuộc sao lại thế này”: https://wiki.tcl-lang.org/page/comment
      Trước khi viết chú thích phải kết thúc lệnh bằng ;, các cặp ngoặc nhọn không được lệch nên không thể chú thích hóa đoạn mã sai, và cũng không thể đặt dấu gạch chéo ngược trong chú thích. Tuy vậy, điều này cũng được giải thích như một tính năng, vì khi chạy wish người ta viết như sau
      #!/bin/sh
      # the next line restarts using wish \
      exec wish8.0 "$0" "$@"
      Dấu gạch chéo ngược bị shell bỏ qua nhưng lại được wish phân tích cú pháp
    • Tôi đã làm việc khá nhiều với Tcl khi làm benchmark TPC cho Citus
      https://github.com/TPC-Council/HammerDB/blob/master/src/post...
      Tcl là một ngôn ngữ shell script khá ổn
  • Việc engine xử lý sự kiện trung tâm của Tcl được xây dựng trên epoll hoặc kqueue khi có thể dùng, còn trên các nền tảng khác thì giữ lại triển khai dựa trên select, là một thay đổi khổng lồ
    Một lý do lớn khiến concurrency của Tcl bị xem là lỗi thời và hiệu năng thấp là vì nó phụ thuộc vào select, dù epollkqueue đã có sẵn ít nhất 10 năm. Tcl là một trong những ngôn ngữ tôi thích vì dễ bắt đầu và metaprogramming cũng dễ

    • Lý do chính khiến Tcl bị xem là hiệu năng thấp là vì các phép toán cơ bản chậm hơn CPython khoảng gấp đôi. Mà CPython cũng không phải là nhanh: https://news.ycombinator.com/item?id=41637953
      Một lý do khác là chúng ta không thật sự biết cách viết Tcl nhanh, và trong thread đó tôi đã vô tình chứng minh điều ấy
  • Tôi muốn giới thiệu NaviServer [0]. Tên cũ của nó là AOLServer [1], một web server bền như xe tăng đã được kiểm chứng lâu năm trong thực tế
    Nếu nó từng được dùng để vận hành AOL thì chắc không cần nói thêm. OpenACS [2] là dự án chính, đã tồn tại từ năm 1997, và đặc biệt mạnh khi dùng cùng Tcl. Nó vẫn đang được bảo trì và giờ cũng hỗ trợ Tcl 9
    Kết hợp JavaScript, Tcl, NaviServer với các mô-đun riêng như DNS Server, LDAP, Mail sẽ thành một bộ công cụ mạnh. Nếu muốn nhập môn Tcl và phát triển web, tôi khuyên nên thử dùng hai thứ này cùng nhau; bạn có thể dễ dàng tạo ra những kết quả thú vị
    [0] https://wiki.tcl-lang.org/page/NaviServer
    https://github.com/naviserver-project/naviserver
    [1] https://news.ycombinator.com/item?id=35648805
    https://www.linuxjournal.com/article/6164
    [2] https://openacs.org/about/history
    https://openacs.org/

    • Đây là stack hoài niệm mà tôi đã học Tcl và SQL vào giữa thập niên 1990. Khi đó tôi không chơi với OpenACS mà là chính ArsDigita Community System, vào thời ArsDigita còn thật sự tồn tại
      Tôi vẫn nhớ đã tham gia một lớp học miễn phí do ArsDigita tài trợ và trực tiếp giảng dạy tại văn phòng của họ, không rõ là ở Pasadena, CA hay Glendale. Lớp không quá sâu hay quá dài, nhưng rất tốt để nhập môn
  • Với người mới tiếp xúc Tcl, từng có cả một vũ trụ thay thế nơi Tcl trở thành ngôn ngữ của trình duyệt thay vì JavaScript
    “Một chú thích thú vị: việc Netscape được thành lập trùng với thời điểm tôi rời Berkeley năm 1994 và đang quyết định sẽ đi đâu trong ngành. Jim Clarke và Marc Andreessen đã thăm dò khả năng tôi tham gia với tư cách nhà sáng lập Netscape, nhưng cuối cùng tôi đã từ chối. Khi nói chuyện với họ, tôi thậm chí còn chưa quyết định sẽ làm việc liên quan đến web. Đây là một trong những chữ ‘nếu’ lớn nhất trong sự nghiệp của tôi. Nếu tôi đã đến Netscape, rất có khả năng Tcl đã trở thành ngôn ngữ trình duyệt thay cho JavaScript, và thế giới đã khác đi! Tuy nhiên, nhìn lại thì tôi không chắc Tcl thực sự có phải là ngôn ngữ tốt hơn JavaScript cho web hay không, nên có lẽ điều đúng đắn đã xảy ra.”
    Nguồn: https://pldb.io/blog/JohnOusterhout.html

    • Cũng có thể như vậy. Tôi nghĩ một trong những lý do chính khiến JavaScript bám rễ được là vì nó không có gánh nặng lịch sử lớn, nên các nhà thiết kế có thể đưa nó theo hướng cần thiết
      Một ngôn ngữ đã có hơn vài người dùng thì dù tốt đến đâu cũng sẽ phát sinh gánh nặng nào đó. Vì vậy trong vũ trụ thay thế ấy, hệ sinh thái ngôn ngữ script cho trình duyệt có thể đã phân mảnh hơn nhiều
    • Phần công việc về tập con an toàn của Tcl cho web đến nay vẫn có thể dùng để chạy các script không đáng tin trong một sandbox dễ quản lý
      Nếu muốn, cũng có thể loại bỏ đủ số lệnh để khiến ngôn ngữ không còn Turing-complete
    • Thú vị là plugin trình duyệt Tcl đã tồn tại ít nhất từ năm 1996
      https://sunsite.icm.edu.pl/pub/programming/tcl/plugin/
      Tôi còn nhớ trước đó nữa, các bạn cùng lớp chạy vào phòng máy và nói “nhìn này, giờ còn có plugin TK cho Mosaic nữa!”. Khi đó không hẳn còn là thời “trông như gopher có chuột ấy nhỉ!”, nhưng cũng chưa cách quá lâu
      Tuy nhiên plugin Tcl muốn dùng thì phải tự làm gì đó, còn JavaScript một khi đã xuất hiện thì được cung cấp mặc định
    • Dù chuyện đó có xảy ra, tôi cũng không nghĩ thế giới sẽ tiếp tục ở lại với TCL. JavaScript đủ tốt để mọi người chấp nhận, còn TCL thì rõ ràng không như vậy
      Có lẽ TCL đã tồn tại cùng một thứ gì đó khác, rồi TCL nhiều khả năng bị đưa vào diện ngừng sử dụng
    • Tôi hoàn toàn đồng ý với câu “có lẽ điều đúng đắn đã xảy ra”
      Tôi không muốn thấy những đoạn mã như set x [ expr $y + $z ] ở khắp nơi. Với vai trò ngôn ngữ lệnh thì nó cũng không tệ đến thế
  • Nói rằng tôi rất thích Tcl thật sự không phải là phóng đại. Tôi chỉ dùng qua một thời gian ngắn khi viết script IRC cho XiRCON vào cuối thập niên 1990, nhưng đó là một ngôn ngữ tao nhã, đơn giản, dễ học và linh hoạt đến mức có thể gọi là Lisp dành cho con người
    Ước gì nó phổ biến hơn, và tôi rất vui khi thấy nó vẫn còn sống động

    • Tôi chỉ tiếp xúc với Tcl ở mức viết script cho bot IRC, nhưng trải nghiệm đó chỉ để lại ký ức tốt đẹp
    • Tôi đã viết script TCL cho client IRC vào thập niên 90 và thật sự rất thích. Ngôn ngữ này rất tuyệt cho mục đích đó
      Tuy nhiên ngôn ngữ chính khác của tôi lúc ấy là assembly x86, nên có thể tiêu chuẩn để tôi ấn tượng khá thấp
    • Gọi là “Lisp dành cho con người” thì còn có upvar đấy
  • Tác giả của Tcl và Tk là Giáo sư John Ousterhout, và cuốn sách về thiết kế phần mềm của ông đã có đến ấn bản thứ 2
    A Philosophy of Software Design:
    https://web.stanford.edu/~ouster/cgi-bin/book.php

    • Đây là một cuốn sách thật sự xuất sắc, và tôi đang đọc nó. Tôi đọc từng chương, suy nghĩ sâu nhất có thể, rồi áp dụng các bài học đó để viết lại dự án hiện tại
      Hiện tôi đang ở chương 11 “Design it Twice”, nên có lẽ sau khi đọc hết tôi sẽ viết lại toàn bộ từ trên xuống dưới. Hiện tại đây là mô hình chỉ đặt các biến trong lõi Python tối thiểu, còn phần còn lại nằm trong OpenSCAD; ở bản triển khai mới, tôi dự định đưa mọi thứ có thể vào Python và dùng thông qua OpenPythonSCAD https://pythonscad.org/
  • Tôi thật sự thích ngôn ngữ này, nhưng dạo này không dùng nhiều. Tôi tò mò liệu trên Linux nó vẫn tạo ra GUI kiểu năm 1995 hay không
    Nếu chỉ cần có hỗ trợ GUI Linux tương đối hợp lý, ở mức các nền tảng khác đã có từ lâu, thì có lẽ tôi vẫn còn dùng nó

    • Theme engine đã được đưa vào từ khoảng 15 năm trước. Theme mặc định trông khá cũ, nhưng cũng có nhiều theme khác: https://wiki.tcl-lang.org/page/List+of+ttk+Themes
      Tuy nhiên ảnh chụp màn hình của các theme lõi là theo 8.5/8.6, và đặc biệt theme mặc định đã thay đổi đôi chút trong Tk 9. Cái bẫy là theme engine dùng các widget mới riêng của nó, nên để ứng dụng được áp theme thì phải dùng API mới. Nếu là mã từ năm 1995 hay 2005 thì nó vẫn sẽ cho ra GUI kiểu năm 1995
    • Tôi còn nhớ khi học Python đã dùng Tkinter. Có các GUI khác, nhưng tìm ví dụ hoạt động như GUI hiện đại thì phiền hơn
      Tài liệu đã xoay quanh Tk(inter) quá lâu nên có vẻ đa số chọn nó như mặc định. Python đã có hỗ trợ GUI tốt hơn, nhưng có lẽ độ phổ biến trong machine learning/AI đã ảnh hưởng đến điều đó. Tcl kém phổ biến hơn, nên muốn tìm tài liệu về cách dùng GUI hiện đại thì phải kiểm tra kỹ hơn
  • Gần đây tôi chỉ đụng đến Tcl ở mức làm việc với portfile của MacPorts
    Nếu dạo này còn ai dùng nó cho mục đích khác thì tôi tò mò không biết họ dùng vì lý do gì. Tôi không ghét ngôn ngữ này, nhưng cũng chưa bao giờ thích nó

    • Tôi nghĩ Tcl gần với Lisp dành cho lập trình viên C. Nó cung cấp năng lực metaprogramming có được từ Lisp trong một ngôn ngữ trông giống C, kết hợp tốt với C, trực quan hơn nhiều so với các ngôn ngữ shell thông thường, lại còn có GUI đa nền tảng
      Một lập trình viên Tcl thành thạo có thể làm được những điều như ma thuật. Từ 2005 đến 2015 tôi lập trình gần như hoàn toàn bằng Tcl/Tk và thật sự rất thích. Sau đó tôi chủ yếu dùng nó cho các script nhẹ hơn là viết ứng dụng, nhưng khi cần viết script tự động hóa ở cấp hệ điều hành thì nó vẫn là lựa chọn số 1 của tôi
    • Các nơi dùng tiêu chuẩn gồm BigIP iRules[0] trên thiết bị mạng F5 và thiết bị A10, orchestration cho siêu máy tính của Argonne National Labs[1], Tealeaf[2], Python Tkinter[3], v.v.
      Lý do tôi dùng hằng ngày là vì nó cân bằng tốt giữa khía cạnh kiểu Lisp và tính đơn giản của một ngôn ngữ script, đồng thời có giao diện C tuyệt vời. REPL cũng ổn, và có thể viết extension bằng C rồi xếp chồng chúng lên như Tcl hạng nhất 100%. Điều này phần lớn, có lẽ là hoàn toàn, là vì Tcl là một ngôn ngữ rất đơn giản[4] và có tính đồng hình mã-dữ liệu (homoiconicity)[5]. Phát triển và sử dụng nó rất thú vị
      [0] https://community.f5.com/kb/technicalarticles/irules-concept...
      [1] https://www.mcs.anl.gov/~wozniak/papers/Swift_Tcl_2015.pdf
      [2] https://www.acoustic.com/pdf/Acoustic-Experience-Analytics-%...
      [3] https://docs.python.org/3/library/tkinter.html
      [4] https://www.tcl-lang.org/man/tcl/TclCmd/Tcl.htm
      [5] https://stackoverflow.com/questions/6492704/what-exactly-doe...
    • Tcl là ngôn ngữ script của ngành EDA. Nếu bạn thiết kế chip máy tính, tức là bạn đang dùng TCL. Cadence và Synopsys đã lấy TCL làm chuẩn hơn 30 năm nay
      Ưu điểm là có thể điều khiển các công cụ EDA như các lệnh shell script kiểu run_my_task -option_a -option_B. Nếu không thiết kế chip thì không có lý do gì để dùng nó, và bản thân ngôn ngữ này thì tệ hại. Ngành EDA bỏ TCL càng sớm càng tốt
    • Richard Hipp, người tạo ra SQLite, nói rằng SQLite được viết bằng Tcl. Tất nhiên bản thân engine cơ sở dữ liệu được viết bằng C, nhưng bộ kiểm thử lớn hơn nhiều thì phần lớn được viết bằng Tcl
      Và chính bộ kiểm thử đó làm cho SQLite trở thành engine đáng tin cậy như hiện nay. Bộ kiểm thử vẫn được duy trì liên tục, còn engine đã được viết lại toàn bộ hoặc từng phần theo thời gian
    • Tôi đã dùng Tcl vài lần vì Freewrap. Có thể tạo ứng dụng Windows có GUI chỉ với rất ít mã và dễ dàng phân phối dưới dạng file thực thi
      Tôi đã làm một ứng dụng sao lưu cho ứng dụng bán hàng trực tuyến, một ứng dụng sửa các file POS bị lỗi của một chuỗi bán lẻ lớn, một ứng dụng nhỏ để sao chép Forms/Reports lên server, chạy biên dịch rồi đẩy các file mới vào git, và một wrapper gs giúp bộ phận media dễ gộp nhiều PDF thành một. Tất cả đều chỉ khoảng một hai trang mã
  • Quan trọng hơn Python 3.13
    Bravo !!!!
    Tôi đang chờ Scilab và Python được phân phối kèm Tcl/Tk 9.0. Bản phát hành mới nhất của Next Scripting có vẻ đã sẵn sàng cho 9.0. Đáng để theo dõi các mục Undroidwish và Binary Releases trên trang chính thức