Tcl 9.0 ra mắt
(tcl-lang.org)- 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-2vàCESU-8,encodingprofiles để kiểm soát encoding I/O, và mặc định-encoding utf-8chosource - 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_precisionkhô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ừ
intsangTcl_Size, chấm dứt hỗ trợTcl_ChannelTypeVersionthấp hơn 5, giới thiệu quản lý phiên bản cho cấu trúcTcl_ObjType, đồng thời loại bỏ các macroCONST*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
metadatacủ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 windowingsystemyêu cầu macOS 10.10 trở lên - Tài liệu migration cho Tcl 9 gồm Migrating C extensions to Tcl 9 và Migrating scripts to Tcl 9
1 bình luận
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ỏ
~, vốn là cách viết tắt tiện lợi để đi tới thư mục HomeNhữ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 đã 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
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
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ạywishngườ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
wishphân tích cú pháphttps://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
epollhoặckqueuekhi 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ênselect, 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ùepollvàkqueueđã 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ễ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/
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
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
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
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
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 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
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
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
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ó
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 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ó
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
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...
Ư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ốtVà 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 đã 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
gsgiú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