Lập trình bằng tcl. Giới thiệu nhanh về Tcl

Mỗi lần làm quen với một ngôn ngữ lập trình mới nào đó, tôi không bao giờ hết ngạc nhiên trước sự kiên trì của các tác giả (hoặc tác giả) của nó. Không phải là chuyên gia trong bất kỳ lĩnh vực phát triển phần mềm nào, thật khó để tưởng tượng người ta có thể gặp phải những khó khăn gì nếu không sử dụng các công cụ chuyên dụng và cách tiếp cận cụ thể để giải quyết các vấn đề nảy sinh trên con đường của nhà phát triển. Tôi sẽ nói ngắn gọn về một ngôn ngữ như TCLnói trên các trang Tin tức Máy tính. Nhưng nó ngắn gọn đến mức tôi muốn quay lại ngôn ngữ lập trình này và nói về nó chi tiết hơn.


Một ít lịch sử

Tác giả của TCL (tên này trong tiếng Nga thường được phát âm là “Tikl”), John Osterout, đã quyết định rằng thế giới sẽ là một nơi tốt đẹp hơn nếu có một ngôn ngữ chuyên biệt để nhúng vào các ứng dụng bảng điều khiển. Không sớm nói hơn làm. Đây là cách phiên bản đầu tiên của TCL xuất hiện. Theo yêu cầu của người dùng, Osterout đã mở rộng khả năng của đứa con tinh thần của mình bằng cách tích hợp vào đó các công cụ tạo ứng dụng có giao diện người dùng đồ họa. Đây là cách TCL/TK ra đời. Dù dài hay ngắn, ngôn ngữ này đã được di chuyển dưới sự bảo trợ của tập đoàn Sun Microsystems, công ty đã cố gắng làm cho trình thông dịch ngôn ngữ trở nên đa nền tảng nhất có thể, mặc dù vì lý do nào đó, nó vẫn miễn phí. Mặc dù, bất chấp thực tế sau này, TCL đã bị chỉ trích gay gắt bởi nhà tư tưởng chính về phát triển phần mềm miễn phí, Richard Stallman. Lập luận chính của Stallman là hiệu suất thấp của trình thông dịch ngôn ngữ.

Nhưng sự quan tâm của Sun đối với TCL nhanh chóng phai nhạt do sự bùng nổ của ngôn ngữ Java do cùng một công ty phát triển và Osterout đã thành lập công ty riêng của mình, Scriptics. Ngay sau đó, trình thông dịch đã được thiết kế lại đáng kể, bắt đầu biên dịch chương trình thành mã byte trung gian trước khi thực thi chương trình, do đó tốc độ của các chương trình viết bằng TCL đã tăng hơn sáu lần. Hỗ trợ cho Unicode và các ứng dụng đa luồng cũng được thêm vào, cho phép các nhà phát triển sử dụng TCL để viết ứng dụng máy chủ. Sau đó, Scriptics được đổi tên thành Ajuba Solutions, và sau đó được Inter Dệt mua lại, công ty này đã chuyển giao việc phát triển TCL/TK cho cộng đồng lập trình Tcl Core Team.

Tuy nhiên, tất cả những điều này, mặc dù mang tính thông tin, nhưng sẽ giúp ích rất ít trong việc thành thạo ngôn ngữ. Vậy hãy cùng xem TCL ngày nay là gì nhé.


TCL hôm nay

TCL nói chung là một từ viết tắt. Tên đầy đủ của ngôn ngữ này là Ngôn ngữ lệnh công cụ, trong tiếng Nga có nghĩa là “ngôn ngữ lệnh công cụ”.

Đặc điểm chính của TCL cổ điển là ngôn ngữ lập trình này, không giống như phần lớn các ngôn ngữ phổ biến khác hiện nay, không hướng đối tượng. Những người ủng hộ TCL giải thích điều này bằng cách nói rằng cách tiếp cận này phản ánh tốt hơn bản chất của chương trình, vì bộ xử lý hoạt động không phải với các đối tượng mà với các chuỗi lệnh có thể được kết hợp thành các thủ tục. Thật khó để nói ý kiến ​​​​này phù hợp đến mức nào với tình hình thực tế, nhưng ở đây, có lẽ, đó thậm chí không phải là vấn đề. Vậy thì sao? Nhưng thực tế là một ngôn ngữ được hình thành chỉ để gắn kết các phần khác nhau của hệ thống thành một tổng thể duy nhất, nói chung, không sử dụng OOP. Tuy nhiên, do bản thân TCL từ lâu đã phát triển vượt xa ý tưởng mà nó được tạo ra nên có những phần mở rộng ngôn ngữ đặc biệt thực hiện cách tiếp cận hướng đối tượng.

Tuy nhiên, cách tiếp cận nội dung chương trình cũng không kém phần thú vị. Đó là dữ liệu giống như bất kỳ dữ liệu nào đến từ bên ngoài và nó có thể được thao tác từ chương trình giống như văn bản mà người dùng đã nhập. Nói chung, mọi dữ liệu trong TCL đều là chuỗi. Bất thường? Có lẽ. Nhưng không ai nói nó bất tiện.

Giống như Lisp và Forth được biết đến rộng rãi nhưng đã bị nhiều người lãng quên, TCL sử dụng ký hiệu tiền tố khi viết lệnh. Nó có nghĩa là gì? Trên thực tế, mọi thứ đều rất đơn giản. Mỗi lệnh bao gồm một tập hợp các trường được phân tách bằng dấu cách. Trường đầu tiên phải là tên của lệnh và các trường tùy chọn còn lại là các đối số được truyền cho lệnh. Lệnh trả về một giá trị, đôi khi trống. Lệnh giống như cái được gọi là hàm hoặc thủ tục trong các ngôn ngữ lập trình khác. Không có từ khóa nào trong TCL: cấu trúc điều khiển cũng là lệnh. Cách tiếp cận này giúp dễ dàng mở rộng ngôn ngữ theo bất kỳ hướng nào mà lập trình viên cần, vì về mặt lý thuyết, khả năng mở rộng của TCL không thể tốt hơn nếu có mong muốn mở rộng. Ví dụ: tất cả các tiện ích bổ sung OO đều phát sinh chính xác nhờ thuộc tính TCL này.

Trong TCL, trong số những thứ khác, có một thứ gọi là sự kiện. Nó có nghĩa tương tự như trong bất kỳ ngôn ngữ lập trình nào khác - một hành động nhất định của chính chương trình hoặc có thể nói là của một kích thích bên ngoài mà chương trình phải phản ứng theo một cách nhất định. Các sự kiện trong TCL có thể được tạo bởi bộ đếm thời gian và cũng xảy ra, chẳng hạn như khi dữ liệu xuất hiện trong kênh, giá trị của biến thay đổi, khi chương trình bên ngoài kết thúc hoặc đơn giản là khi người dùng tương tác với giao diện. Tất nhiên, lập trình viên có quyền quyết định các sự kiện trong chương trình của mình.

Giống như nhiều ngôn ngữ lập trình khác, TCL hỗ trợ rất tốt những thứ như mảng kết hợp, điều mà nhiều nhà phát triển đã đam mê.

Để bạn hiểu rõ hơn về cú pháp TCL, tất nhiên không thể giải thích hết trong một bài viết, tôi sẽ đưa ra một ví dụ về một chương trình nhỏ bằng ngôn ngữ này. Nó tham gia vào việc thêm các chữ số của số được người dùng nhập vào.

#!/bin/tclsh set arg "" ] đặt kết quả 0 foreach el $arg ( đặt kết quả ) đặt kết quả $


TK là gì?

Đây chính xác là câu hỏi có thể nảy sinh sau khi đọc bài viết về các tính năng của TCL. Vâng, tôi đã đề cập rằng hiện nay nhiều người gọi Tikl TCL/TK (“Tak-Tikl”), và do đó đã đến lúc nói ra điều gì ẩn sau hai chữ cái nữa.

TK là tên viết tắt của từ ToolKit vốn đã ngắn gọn, chứa một thư viện mạnh mẽ để tạo giao diện người dùng đồ họa cho các ứng dụng TCL. Thư viện này, tôi phải nói, có khả năng rất tốt. TK được triển khai cho các hệ điều hành Linux, Mac OS X, Unix và Windows và trong các phiên bản hiện đại của TK, giao diện người dùng có giao diện “gốc” cho một hệ điều hành cụ thể, nghĩa là các điều khiển trông giống hệt như trong tất cả các ứng dụng khác. Có nhiều tiện ích mở rộng khác nhau cho thư viện được sử dụng để tạo các cửa sổ dạng tự do, thêm hỗ trợ cho công nghệ kéo và thả và những thứ tương tự khác.

TK rất phù hợp với khái niệm dựa trên sự kiện của ngôn ngữ TCL và cho phép các nhà phát triển thực hiện nhiều việc dễ dàng hơn nhiều so với các ngôn ngữ lập trình khác. Ngoài ra, các thành phần TK tự động xử lý hầu hết các sự kiện, giúp nhà phát triển tạo ứng dụng dễ dàng hơn. Đối với TK, có các bộ thành phần bổ sung, ví dụ: BWidget, Tix hoặc Widget tăng thêm.

Một tính năng thú vị khác của thư viện TK là nó được điều chỉnh cho các ngôn ngữ thông dịch khác chứ không chỉ TCL, tuy nhiên, trình thông dịch TCL vẫn cần thiết khi chạy ứng dụng, vì các ngôn ngữ khác chỉ sử dụng giao diện bên ngoài cho mã của chính thư viện , giống như được biết nó vẫn được viết bằng TCL. Có các thư viện đặc biệt Perl/Tk, Ruby/Tk, Python/Tk triển khai hỗ trợ TK cho các ngôn ngữ lập trình tương ứng.


Công cụ

Tất nhiên, trong thực tế, chỉ khả năng ngôn ngữ tốt là không đủ để tạo ra các ứng dụng chất lượng cao trong đó. Không, bây giờ tôi không nói về kỹ năng của lập trình viên mà là về các công cụ mà lập trình viên sẽ sử dụng. Tất nhiên, một trong những công cụ chính trong lập trình TCL là trình thông dịch của ngôn ngữ kịch bản này.

Trên Linux, trình thông dịch TCL được tích hợp vào phần lớn các bản phân phối. Đối với các hệ điều hành khác, mọi thứ phức tạp hơn một chút. Ví dụ: đối với Windows, bạn có thể sử dụng sản phẩm ActiveTcl do ActiveState cung cấp (www.activestate.com/Products/ActiveTcl). Bản phân phối bao gồm trình thông dịch TCL, nhiều thư viện và tiện ích mở rộng khác nhau cũng như thư viện đặc biệt để sử dụng TCL thông qua Windows Script Host. Đúng, ActiveTCL không có IDE riêng, nhưng bạn có thể sử dụng Komodo, thậm chí còn có trình thiết kế biểu mẫu TK đặc biệt. Nhưng nếu bạn không muốn mua Komodo, bạn có thể sử dụng môi trường Visual TCL(). Bản thân trình thông dịch và rất nhiều tài liệu bằng tiếng Anh có thể được tìm thấy trên trang web chính thức - tcl.tk. Các tài liệu bằng tiếng Nga về TCL cũng có mặt trên World Wide Web, chẳng hạn như tại tclstudy.narod.ru.


Đằng sau hậu trường

Tuy nhiên, cho dù tôi có nói bao nhiêu về TCL và TK thì vẫn còn nhiều điều đằng sau hậu trường. Ví dụ, tốc độ của các chương trình vẫn còn nhiều điều phải phấn đấu (các chương trình TCL vẫn chậm hơn đáng kể so với các chương trình được viết bằng Perl), đồng thời, những gì những người tuân thủ TCL coi là lợi thế vô điều kiện cũng có thể gây ra một số khó khăn. Khả năng mở rộng đáng kinh ngạc của ngôn ngữ khiến cho nhiệm vụ tiêu chuẩn hóa trở nên rất khó khăn và tất nhiên điều này để lại dấu ấn về khả năng sử dụng TCL để viết các ứng dụng thực sự lớn.Mặc dù TCL thường được so sánh với Java, nhưng đối với tôi, có vẻ như nó là không phải vô cớ mà nó dẫn đầu về mức độ phổ biến thứ hai trong số các ngôn ngữ này. Cú pháp đặc biệt của TCL cũng thực hiện công việc bẩn thỉu của nó và do đó số người muốn học nó không tăng theo cấp số nhân, như trường hợp của Java, nhưng tuyến tính và không tích cực lắm.

Mặc dù, không còn nghi ngờ gì nữa, để kết hợp một số ứng dụng được viết bằng ngôn ngữ lập trình được biên dịch lại với nhau, theo đánh giá của nhiều người đã thử TCL và so sánh nó trong lĩnh vực này với các tùy chọn thay thế, thì đó là điều tốt nhất. Việc TCL tích hợp vào các ứng dụng ứng dụng cũng là một tính năng rất hay và hữu ích. Điều này đặc biệt đáng chú ý trong thế giới của các hệ thống giống UNIX, trong đó TCL là ngôn ngữ được kính trọng thứ hai sau C (và có thể cả Emacs Lisp). Mặc dù nó chắc chắn phù hợp với Windows, nhưng một điều nữa là hệ điều hành này đã có trình thông dịch VBScript và Jscript tích hợp sẵn, và do đó TCL đang gặp phải điều gì đó từ chúng có thể được gọi là cạnh tranh, theo một số giả định nhất định.

Tất nhiên, mặc dù tất cả những cân nhắc này rất khó đánh giá nếu không tự mình thử TCL. Vì vậy, tôi đang kết thúc câu chuyện của mình về nó, cuối cùng tôi chỉ muốn trích dẫn câu nói của tác giả ngôn ngữ lập trình C, Brian Kernighan: “Tcl / Tk mang lại năng suất làm việc kỳ diệu, trong vài giờ bạn có thể đạt được kết quả tương tự như trong vài ngày hoặc vài tuần khi phát triển bằng C hoặc C++... Tk rất hiệu quả đối với hầu hết các ứng dụng, nhiều thành phần giao diện (widget) được triển khai tốt đến mức người ta chỉ có thể tự hỏi làm thế nào công việc đó có thể được thực hiện tốt đến vậy... Nó cũng Có vẻ may mắn là việc phân chia nhiệm vụ giữa Tcl và C/C++ khá dễ dàng, bạn chỉ cần biết công cụ nào thực hiện công việc tốt hơn... Việc mở rộng hệ thống với mã Tcl bổ sung được nạp trực tiếp vào thư viện Tcl của ứng dụng, hoàn toàn đồng ý với Ý tưởng ban đầu của Osterout, tăng hiệu quả của toàn bộ chương trình, đơn giản hóa cấu trúc của nó và cải thiện tính di động... Tôi không chắc rằng Tcl có thể tồn tại như một sản phẩm độc lập - nó có quá nhiều đối thủ cạnh tranh. Nhưng sự kết hợp Tcl/Tk có không có đối thủ cạnh tranh trong thế giới Unix... Hệ thống này cực kỳ đáng tin cậy, được ghi chép rất tốt... có sẵn miễn phí... với chất lượng hoàn hảo."

Lập trình thực hành trong Tcl và Tk PHIÊN BẢN THỨ TƯ Brent B. Welch Ken Jones với Jeffrey Hobbs PRENTICE HALL PTR PRENTICE HALL PTR Upper Saddle River, NJ 07458 www.phptr.com Lập trình thực tế trong Tcl và Tk PHIÊN BẢN THỨ TƯ Brent Welsh Ken Jones với sự tham gia của Geoffrey Hobbs Moscow St. Petersburg Kiev 2004 BBK 32.973.26-018.2.75 U98 UDC 681.3.07 Giám đốc Nhà xuất bản Williams. được chỉnh sửa bởi S.N. Trigub Bản dịch từ tiếng Anh và do V.V. Veishman biên tập Nếu có thắc mắc chung, vui lòng liên hệ Nhà xuất bản William tại: [email được bảo vệ] , http://www.williamspublishing.com Welsh, Brent B., Jones, Ken, Hobbs, Jeffrey W98 Lập trình Tcl và Tk thực hành, Phiên bản thứ 4. : Mỗi. từ tiếng Anh - M.: Nhà xuất bản "William", 2004, - 1136 tr. : ốm. - Paral. tit. Tiếng Anh ISBN 5-8459-0661-Х (tiếng Nga) Cuốn sách này đề cập đến nhiều vấn đề liên quan đến việc sử dụng ngôn ngữ Tcl và phần mở rộng Tk. Nó thảo luận về các công cụ viết chương trình Tcl cơ bản, tạo lệnh động, sử dụng biểu thức chính quy, I/O hướng sự kiện, các thành phần Tk, làm việc với hình ảnh và màu sắc, ánh xạ các sự kiện tới các lệnh của công cụ cấu hình Tcl và các chủ đề quan trọng khác. Các tác giả cũng chú ý đến việc lập trình các phần mở rộng Tc1 bằng ngôn ngữ C. Cuốn sách này sẽ hữu ích cho cả những nhà phát triển có kinh nghiệm và những người mới lập trình. BBK 32.973.26-018.2.75 Tất cả tên của các sản phẩm phần mềm đều là nhãn hiệu đã đăng ký của các công ty tương ứng. Không phần nào của ấn phẩm này được phép sao chép dưới bất kỳ hình thức nào hoặc bằng bất kỳ phương tiện nào, điện tử hoặc cơ học, kể cả sao chụp hoặc ghi âm, vì bất kỳ mục đích nào mà không có sự cho phép bằng văn bản của Prentice Hall. Bản dịch được ủy quyền từ ấn bản tiếng Anh do Prentice Hall PTR xuất bản, Bản quyền © 2003 của Pearson Education, Inc. Đã đăng ký Bản quyền. Không phần nào của cuốn sách này có thể được sao chép, lưu trữ trong hệ thống truy xuất hoặc truyền dưới bất kỳ hình thức nào hoặc bằng bất kỳ phương tiện nào, điện tử, cơ khí, sao chụp, ghi âm hoặc cách khác mà không có sự cho phép trước bằng văn bản của Nhà xuất bản. Ấn bản tiếng Nga do Nhà xuất bản Williams xuất bản theo Thỏa thuận với R&I Enterprises International, Bản quyền © 2004 ISBN 5-8459-0661-Х (tiếng Nga) © Nhà xuất bản Williams, 2004 ISBN 0-13-038560-3 (tiếng Anh) .) © 2003 Pearson Education, Inc. Mục lục Phần I: Khái niệm cơ bản về Tcl 55 Chương 1: Tìm hiểu ngôn ngữ Tcl 56 Chương 2: Bắt đầu 85 Chương 3: Tập lệnh CGI đơn giản 93 Chương 4: Xử lý chuỗi 114 Chương 5: Danh sách 133 Chương 6. Cấu trúc điều khiển 147 Chương 7. Thủ tục và phạm vi 163 Chương 8. Mảng Tcl 172 Chương 9. Làm việc với các chương trình và tệp 186 Phần P. Công cụ Tcl nâng cao 215 Chương 10. Trích dẫn và sử dụng lệnh eval 217 Chương 11. Biểu thức chính quy 234 Chương 12. Thư viện và gói tập lệnh 274 Chương 13. Thông tin trình thông dịch và công cụ gỡ lỗi 291 Chương 14. Không gian tên 320 Chương 15. Quốc tế hóa 337 Chương 16. Chương trình hướng sự kiện 350 Chương 17. Sử dụng ổ cắm mạng 362 Chương 18. Máy chủ web TclHttpd 388 Chương 19. Làm việc với nhiều trình thông dịch và sử dụng Safe-Tcl 432 Chương 20. Safe-Tk và trình duyệt tiện ích bổ sung 459 Chương 21. Tập lệnh Tc1 đa luồng 472 Chương 22. Tclkit và Starkit 508 Phần III. Khái niệm cơ bản về Tk 529 Chương 23. Thông tin chung về Tk 530 Chương 24. Tk trong ví dụ 543 Chương 25. Trình quản lý bố cục giá 566 Chương 26. Trình quản lý bố cục lưới 587 Chương 27. Trình quản lý bố cục địa điểm 599 b Mục lục Chương 28. Thành phần Panedwindow 608 Chương 29. Liên kết các lệnh với sự kiện 615 Phần IV. Thành phần Tk 637 Chương 30. Nút và Menu 639 Chương 31. Cơ sở dữ liệu tài nguyên 667 Chương 32. Thành phần Tk 681 đơn giản Chương 33. Thanh cuộn 698 Chương 34. Trường chỉnh sửa và thanh trượt tăng dần 708 Chương 35. Danh sách Windows 724 Chương 36. Thành phần văn bản 738 Chương 37. Thành phần canvas 771 Phần V. Các tính năng của Tk 813 Chương 38. Lựa chọn dữ liệu và clipboard 815 Chương 39. Hộp thoại và tiêu điểm đầu vào 825 Chương 40. Thuộc tính của thành phần Tk 840 Chương 41. Màu sắc, hình ảnh và con trỏ 850 Chương 42 Phông chữ và Thuộc tính Văn bản 869 Chương 43 Lệnh Gửi 885 Chương 44 Trình quản lý cửa sổ 896 Chương 45 Hỗ trợ các tùy chọn tùy chỉnh 915 Chương 46 Giao diện để xác định các ràng buộc 929 Phần VI. Lập trình bằng ngôn ngữ C 937 Chương 47. Chương trình C và ngôn ngữ Tcl 938 Chương 48. Biên soạn Tcl và các phần mở rộng chương trình 985 Chương 49. Tạo các thành phần Tk trong ngôn ngữ C 1002 Chương 50. Thư viện C 1033 Phần VII. Những thay đổi trong thành phần của Tcl và Tk 1059 Chương 51. Tcl 7.4/Tk 4.0 1060 Chương 52. Tcl 7.5/Tk 4.1 1069 Chương 53. Tcl 7.6/Tk 4.2 1074 Chương 54. Ts1/Tk 8.0 1077 Chương 55. Ts1/Tk 8.1 1086 Chương 56. Tc1/Tk 8.2 1091 Chương 57. Tc1/Tk 8.3 1094 Chương 58. Tc1/Tk 8.4 1101 Chương 59. Nội dung của CD 1112 Mục lục chủ đề 1115 Nội dung Giới thiệu 38 Một số lập luận ủng hộ việc chọn Tcl 39 Các phiên bản của Tcl và Tk 42 Phần mở rộng Tcl và Tk 44 Tcl trên World Wide Web 44 Kho lưu trữ Ftp 45 Nhóm tin 45 Cuốn sách này dành cho ai 45 Cách làm việc với cuốn sách này 46 Các chương trình ví dụ 46 Quy ước trình bày 46 Biểu tượng 47 Cách tổ chức cuốn sách này 47 Tính năng của ấn bản thứ tư của cuốn sách 49 Lời cảm ơn đã hỗ trợ chuẩn bị ấn bản đầu tiên của cuốn sách 49 Lời cảm ơn đã hỗ trợ chuẩn bị ấn bản thứ hai của cuốn sách 51 Lời cảm ơn đã hỗ trợ chuẩn bị ấn bản thứ ba của cuốn sách 52 Lời cảm ơn đã hỗ trợ chuẩn bị ấn bản cuốn sách ấn bản thứ tư của cuốn sách 52 Cách liên hệ với tác giả cuốn sách 53 Chúng tôi đang chờ phản hồi của bạn 53 Phần I. Khái niệm cơ bản về Tcl 55 Chương 1. Tìm hiểu ngôn ngữ Tcl 56 Các lệnh Tcl 57 Hello, World! 57 Biến 58 8 Nội dung Thay thế lệnh 59 Biểu thức toán học 60 Thay thế các ký tự được biểu thị bằng dấu gạch chéo ngược 61 Phân nhóm bằng dấu ngoặc nhọn và dấu ngoặc kép 63 Những lưu ý khi sử dụng dấu ngoặc vuông 64 Phân nhóm trước khi thay thế 64 Nhóm biểu thức toán học bằng dấu ngoặc nhọn 65 Ví dụ thay thế 66 Quy trình 66 Một ví dụ tính giai thừa 68 Thông tin bổ sung về các biến 70 Cân nhắc khi sử dụng các ký tự khác nhau trong tên biến 71 Lệnh không đặt 72 Kiểm tra sự hiện diện của các biến 72 Thông tin bổ sung về biểu thức toán học 72 Nhận xét 74 Quy tắc thay thế và nhóm 75 Cân nhắc về việc nhóm và thay thế 77 Thông tin tham khảo 79 Chuỗi ký tự bắt đầu bằng dấu gạch chéo ngược 79 Phép toán số học 80 Hàm toán học tích hợp 80 Lệnh Tcl cơ bản 81 Chương 2. Các bước đầu tiên 85 Nguồn lệnh 86 Tập lệnh Tcl trên Unix 86 Menu chính Windows 88 Macintosh OS 8/9 và ResEdit 88 Macintosh Lệnh Console OS X 89 90 Tùy chọn dòng lệnh 90 Tùy chọn dòng lệnh được hiển thị theo chương trình mong muốn 91 Các biến được xác định trước 92 Nội dung 9 Chương 3. Tập lệnh CGI đơn giản 93 Tìm hiểu ngôn ngữ HTML 94 Tiêu chuẩn CGI và tạo trang web động 96 guestbook.cgi Tập lệnh 97 Tệp thư viện sử dụng 98 Hình thành phần đầu của tài liệu HTML 99 Dữ liệu được tạo bởi tập lệnh CGI 101 Sử dụng mảng Tcl làm cơ sở dữ liệu 103 Tạo biểu mẫu HTML và xử lý thông tin đầu vào của người dùng 105 Biểu mẫu newguest.html 105 Các gói ncgi và cgi.tcl 107 Tập lệnh khách mới.cgi 107 Lưu dữ liệu bằng tập lệnh Tc1 109 Xử lý lỗi trong tập lệnh phần mềm CGI Cải tiến tập lệnh 113 Chương 4. Xử lý chuỗi 114 Lệnh chuỗi 114 Chỉ mục 117 Chuỗi trong biểu thức 118 So sánh chuỗi với mẫu 119 Các lớp ký tự 121 Chuyển đổi bằng a bản đồ ký tự 122 Lệnh chắp thêm 123 Lệnh định dạng 123 Lệnh quét 127 Lệnh nhị phân 127 Mẫu định dạng 128 Ví dụ 130 Dữ liệu nhị phân và trao đổi tệp 132 Nguồn thông tin bổ sung 132 Chương 5. Danh sách 133 Danh sách trong Tcl 134 Tạo danh sách 136 Lệnh danh sách 136 Lệnh lappend 137 Lệnh lset 138 concat Lệnh 138 Truy xuất các mục danh sách: llength, lindex, và Irange Lệnh 139 Sửa đổi danh sách: linsert và lreplace Lệnh 140 10 Nội dung Tìm kiếm danh sách: lsearch Lệnh 141 Sắp xếp danh sách: lsort Lệnh 143 tách Lệnh 144 tham gia Lệnh 146 Nguồn để biết thêm thông tin 146 Chương 6. Cấu trúc điều khiển 147 Câu lệnh if then else 148 Lệnh switch 150 Nhận xét trong lệnh switch 152 Lệnh while 152 Lệnh foreach 153 Sử dụng nhiều biến vòng lặp 155 Làm việc với nhiều danh sách 156 Lệnh for 156 Lệnh ngắt và tiếp tục 157 Lệnh bắt 157 Xử lý các tình huống không có lỗi 159 Lệnh lỗi 159 Lệnh return 161 Chương 7. Quy trình và phạm vi 163 Lệnh proc 163 Thay đổi tên lệnh bằng lệnh đổi tên 165 Phạm vi 166 Lệnh chung 167 Truyền tên bằng lệnh upvar 168 Tạo bí danh với lệnh upvar 169 Sử dụng lệnh upvar để duy trì trạng thái đối tượng 170 Không gian tên và lệnh upvar 170 Các lệnh hoạt động với tên biến 171 Chương 8. Mảng Tcl 172 Công cụ ngôn ngữ để làm việc với mảng 172 Chỉ mục 173 Biến mảng 174 Lệnh mảng 175 Chuyển đổi Mảng tới danh sách 176 Truyền tên mảng 177 Tạo cấu trúc dữ liệu dựa trên mảng 178 Bản ghi đơn giản 178 Nội dung 11 Ngăn xếp 180 Danh sách mảng 181 Cơ sở dữ liệu đơn giản 183 Các lựa chọn thay thế cho việc sử dụng mảng 184 Chương 9. Làm việc với chương trình và tệp 186 Chạy chương trình bằng lệnh exec 186 The biến auto_noexec 189 Tính năng chạy lệnh exec trên Windows 189 AppleScript trên hệ thống Macintosh 189 Lệnh file 190 Tên tệp trên các nền tảng khác nhau 192 Tạo đường dẫn: lệnh nối tệp 193 Chọn các thành phần đường dẫn: lệnh tách, dirname, tail 195 Các hành động với tập tin và thư mục 196 Sao chép tập tin 196 Tạo thư mục 196 Liên kết cố định và tượng trưng 197 Xóa tập tin 197 Đổi tên tập tin và thư mục 198 Thuộc tính tập tin 198 Sử dụng lệnh I/O 201 Mở tập tin 202 Tạo kênh liên lạc với một quy trình 204 Mở rộng mong đợi 205 Đọc và ghi dữ liệu 205 Lệnh Đặt và Nhận 206 Lệnh Đọc 206 Kết thúc một dòng ký tự 207 Truy cập dữ liệu ngẫu nhiên 208 Đóng các kênh I/O 209 Thư mục hiện tại: lệnh cd và pwd 209 Hành động với các tệp bằng lệnh glob 209 Mở rộng ký tự ~ 211 Lệnh thoát và lệnh pid 212 Biến môi trường 212 lệnh đăng ký 213 Phần II. Các tính năng nâng cao của Tcl 215 Chương 10: Trích dẫn và sử dụng lệnh eval 217 Tạo mã bằng lệnh danh sách 218 12 Nội dung Lệnh eval 218 Các lệnh thực hiện nối tham số 220 Các lệnh cung cấp lệnh gọi lại 221 Tiền tố lệnh 221 Thủ tục tạo động 222 Thực hiện nối chuỗi trong eval Lệnh 224 Sử dụng lệnh eval trong Quy trình Shell 224 Các vấn đề với trích dẫn trong eval Lệnh 227 Lệnh cấp cao 229 Lệnh subst 232 Xử lý chuỗi bằng lệnh subst 233 Chương 11. Biểu thức chính quy 234 Khi nào nên sử dụng Biểu thức chính quy 235 Giải quyết các vấn đề thường gặp 236 Quy tắc viết Biểu thức chính quy 237 So sánh các ký tự 237 Bộ ký tự 237 Bộ lặp 238 Toán tử lựa chọn 239 Sử dụng dấu neo 240 Sử dụng dấu gạch chéo ngược 240 Thứ tự so khớp 241 Trích xuất mẫu con 242 Biểu thức chính quy mở rộng 242 Khả năng tương thích với các mẫu được hỗ trợ trong Tcl 8.0 243 Trình tự dấu gạch chéo ngược 244 Lớp ký tự 244 So khớp phân tích 245 Trình lặp với số lần lặp lại hạn chế 246 Tham chiếu ngược 247 So sánh nhìn trước 247 Mã ký tự 248 Phần tử thay thế 249 Lớp tương đương 249 So sánh, nhạy cảm với nguồn cấp dữ liệu dòng 249 Tùy chọn tích hợp 250 Cú pháp mở 250 Cú pháp biểu thức chính quy 251 lệnh regrec 255 Nội dung 13 Mẫu phân tích URL 257 Các vấn đề gặp phải khi sử dụng trình vòng lặp 260 Ví dụ về biểu thức chính quy 260 lệnh regsub 262 Chuyển đổi dữ liệu thành chương trình bằng regsub 263 Giải mã URL 263 Phân tích cú pháp tham số CGI 265 Giải mã HTML nguyên thủy 267 Trình phân tích cú pháp HTML đơn giản 269 Xóa nhận xét HTML 272 Lệnh sử dụng biểu thức thông thường 272 Chương 12: Thư viện tập lệnh và gói 274 Truy cập gói: biến auto_path 275 Sử dụng gói 276 Tải gói tự động 277 Gói, được triển khai dưới dạng chương trình C 278 Thứ tự tải gói 279 Lệnh gói 280 Tạo thư viện sử dụng tệp tcllndex 281 Lệnh không xác định 283 Tự động tải 283 Cấm sử dụng thư viện: auto_noload 284 Các quy ước áp dụng trong quá trình làm việc tương tác 285 Tự động gọi chương trình 285 Lịch sử gọi lệnh 285 Viết tắt tên Lệnh 285 Tcl Shell Môi trường 285 Tcl Thư viện tập lệnh Vị trí 286 Quy trình tcl_findLibrary 287 Kiểu lập trình 288 Tiền tố tên thủ tục 288 Mảng toàn cục và biểu diễn biến trạng thái 289 Hướng dẫn chính thức 289 Chương 13. Thông tin trình thông dịch và công cụ gỡ lỗi 291 Lệnh đồng hồ 292 Lệnh thông tin 296 Biến 297 Thủ tục s 297 Ngăn xếp cuộc gọi 300 Thực thi lệnh 301 14 Nội dung Tập lệnh và Thư viện 302 Số phiên bản 303 Môi trường thời gian chạy 303 Thực thi các chương trình trên các nền tảng khác nhau 304 Giám sát các biến và lệnh 305 Giám sát thực thi lệnh 306 Biến chỉ đọc 307 Tạo các phần tử mảng bằng lệnh theo dõi 308 Lệnh gọi nền 309 Gọi lệnh lịch sử 310 Truy cập lịch sử trong Tcl và C shell 311 Gỡ lỗi 312 Tcl Dev Kit 313 Trình gỡ lỗi nâng cao 314 Công cụ kiểm tra 314 Công cụ biên dịch 314 Công cụ TclApp 315 Công cụ quản lý dịch vụ 315 Công cụ thanh tra 315 Các công cụ khác 315 Bảng điều khiển Tkcon 316 Critcl 316 Lệnh bgerror 316 Lệnh tkerror 316 Giám sát hiệu suất chương trình 317 Thông tin thời gian trong tệp nhật ký 317 Trình biên dịch Tcl 318 Chương 14. Không gian tên 320 Sử dụng không gian tên 321 Biến trong không gian tên 323 Tên ghép 324 Tìm lệnh 325 Không gian tên lồng nhau 326 Thủ tục nhập và xuất 327 Không gian tên và lệnh gọi lại 329 Xem xét nội tâm 330 Không gian tên Lệnh 331 Chuyển đổi các gói hiện có để hoạt động với không gian tên 332 Hệ thống đối tượng 333 Nội dung 15 Đối tượng xotcl hệ thống 333 Ghi chú 334 Tên của các thành phần, hình ảnh và trình thông dịch 334 Lệnh biến trong phạm vi toàn cục 334 Tự động tải và thủ tục auto_import 334 Không gian tên và lệnh cấp cao 335 Điểm đặc biệt của việc đặt tên không gian tên 335 Các thao tác bổ sung 336 Chương 15. Quốc tế hóa 337 bộ ký tự pi 338 Hệ thống Mã hóa 339 Mã hóa tập tin và lệnh fconfigure Lệnh 340 Các tập lệnh được trình bày dưới nhiều dạng mã hóa khác nhau 341 Unicode và UTF-8 341 Mã hóa nhị phân 342 Chuyển đổi mã hóa 343 Lệnh mã hóa 343 Thư mục thư 344 Xác định ngôn ngữ địa phương 345 Quản lý các tập tin thư mục thư 346 Thư mục thư và không gian tên 347 msgcat package 349 Chương 16. Các chương trình hướng sự kiện 350 Vòng lặp sự kiện Tcl 351 Lệnh sau 351 Fileevent Lệnh 352 Lệnh vwait 354 Lệnh fconfigure 356 Chế độ I/O không chặn 357 Lệnh fblocked 359 Bộ đệm 359 Chuyển đổi kết thúc- Ký tự dòng 359 Xử lý ký tự cuối tệp 360 Thiết bị tuần tự 360 Mã hóa 361 Định cấu hình kênh I/O 361 16 Nội dung Chương 17. Sử dụng ổ cắm mạng 362 Tiện ích mở rộng mạng Tcl 363 Thư viện chuẩn Scotty 363 Tcl 363 HTTP 364 Ổ cắm phía máy khách 364 Tùy chọn được sử dụng khi tạo ổ cắm máy khách 365 Ổ cắm máy chủ 366 Tùy chọn được sử dụng khi tạo ổ cắm máy chủ 367 Dịch vụ Echo 367 Nhận dữ liệu qua HTTP 370 Máy chủ proxy 371 Yêu cầu HEAD 373 Yêu cầu GET và POST 375 lệnh fcopy 379 gói http 380 http::lệnh config 381 http ::geturl lệnh 381 http::formatQuery lệnh 385 Lệnh http::register và http::unregister 385 Lệnh http::reset 385 Lệnh http::cleanup 386 Xác thực cơ bản 386 Chương 18. Máy chủ web TclHttpd 388 Tích hợp TclHttpd với các chương trình ứng dụng 389 Kiến trúc TclHttpd 390 Thêm mã vào TclHttpd 391 Sửa đổi chương trình chính 392 Trình xử lý tên miền 392 Trạng thái kết nối và dữ liệu yêu cầu 393 Gói HTML và ncgi 394 Chuyển kết quả xử lý yêu cầu đến máy khách 394 Ứng dụng trực tiếp 394 Xử lý dữ liệu có trong yêu cầu 396 Làm việc với các loại MSE 398 Các loại tài liệu 398 Mẫu HTML + Tcl 400 Đặt mã Tcl 401 Mẫu và cấu trúc trang web 402 Nội dung 17 Sử dụng biến để lưu trữ thông tin về trang web 406 Trình xử lý dữ liệu biểu mẫu 407 Trình xử lý trực tiếp ứng dụng 408 Mẫu cho trình xử lý dữ liệu biểu mẫu 411 Biểu mẫu tự kiểm tra 411 html Gói 413 Quy trình gán 415 Mô-đun tiêu chuẩn trực tiếp ứng dụng 419 Giới thiệu về trạng thái máy chủ 420 Gỡ lỗi 420 Gửi tin nhắn thư 422 Gói phân phối TclHttpd 424 Khởi động máy chủ 424 Nội dung của gói phân phối 425 Cấu hình máy chủ 426 Tùy chọn dòng lệnh 426 Tên máy chủ và số cổng 427 Người dùng và nhóm ID 428 Địa chỉ quản trị viên trang web 428 Thư mục gốc tài liệu 428 Các cài đặt khác nhau để làm việc với tài liệu 429 Mẫu tài liệu 430 Tệp giao thức 430 Thư mục CGI 431 Chương 19. Làm việc với một số phiên dịch viên và sử dụng lệnh SAFE-TCL 432 Interp 433 Tạo phiên dịch viên 435 Phân cấp phiên dịch viên 436 Tên của phiên dịch viên trong vai trò của nhóm 437 Sử dụng nhóm LIST như một phần của Interp Eval 437 Protected Interpreters 438 Bút danh của bút danh 440 Nhóm ẩn 441 Stanovka 442 Hỗ trợ đầu vào bởi trình thông dịch được bảo vệ 444 Cơ sở được bảo vệ 446 Chính sách bảo mật 448 18 Nội dung Hạn chế quyền truy cập vào ổ cắm 448 Hạn chế sử dụng tệp tạm thời 451 Lệnh được bảo vệ sau 456 Chương 20. Safe-Tk và một trình duyệt bổ sung mô-đun 459 Tk trong trình thông dịch nô lệ 460 Cửa sổ Tk tích hợp 460 Hạn chế an toàn Tk 461 Plugin trình duyệt 462 Embed_args và Biến plugin 463 Ví dụ về plugin 464 Cài đặt plugin 464 Chính sách bảo mật và plugin 465 Gói trình duyệt 467 Định cấu hình chính sách bảo mật 468 Tệp config/plugin. cfg Tệp 469 Tệp cấu hình cho chính sách 470 Bộ khả năng 470 Tạo bảo mật chính sách mới 471 Chương 21. Tập lệnh Tc1 đa luồng 472 Chủ đề là gì 473 Hỗ trợ luồng trong Tcl 474 Chuẩn bị trình thông dịch Tcl với hỗ trợ luồng 474 Sử dụng tiện ích mở rộng với tập lệnh đa luồng 475 Sử dụng Tiện ích mở rộng luồng 476 Tạo luồng 476 Tạo luồng có thể nối 478 Truyền thông báo đến luồng 481 Truyền thông báo đồng bộ 481 Truyền thông báo không đồng bộ 483 Lưu trữ và giải phóng luồng 484 Xử lý lỗi 485 Tài nguyên được chia sẻ 486 Quản lý ống I/O 487 Truy cập tệp từ các luồng khác nhau 487 Truyền ống giữa các luồng 488 Biến chia sẻ 493 Mutexes và biến điều kiện 495 Mutexes 495 Biến điều kiện 496 Nhóm luồng 499 Nội dung 19 gói lệnh Thread 501 Khoảng trắng của tên Thread 501 Space TSV 504 Space TPool 506 Chương 22. TCLKIT và Starkit 508 Sử dụng TCLKIT 509 Tệp Starkit 510 Tệp phân phối trong dạng của Starki File Systems 511 Ứng dụng vào nội dung bằng VFS 512 Sử dụng sdx để xây dựng ứng dụng 513 Tạo một tệp Starkit đơn giản 513 Xem nội dung của tệp Starkit 514 Tổ chức gói tiêu chuẩn 514 Tạo tệp Starpack 515 Sử dụng hệ thống tệp ảo Starkit 515 Tạo tclhttpd.kit 517 Tạo tập tin chia sẻ Starkit 519 Metakit 521 Mô hình dữ liệu Metakit 522 Truy cập cơ sở dữ liệu Metakit 522 Tạo chế độ xem Metakit 525 Lưu dữ liệu trong tệp Starkit 526 Wikit và Wiki 527 Tính năng sử dụng tập tin Starkit 527 Bộ tài liệu 527 Ứng dụng tự cập nhật 528 Trình cài đặt đơn giản 528 Phần III. Khái niệm cơ bản về Tk 529 Chương 23. Thông tin chung về chương trình Tk 530 Tk "Hello, World!" 532 Đặt tên các thành phần Tk 534 Cấu hình các thành phần Tk 535 Thuộc tính của các thành phần Tk và cơ sở tài nguyên 536 Thông tin tham khảo Tk 537 Lệnh Tk 538 Lệnh tạo thành phần 538 Lệnh thực hiện hành động với các thành phần 539 Thủ tục hỗ trợ 540 20 Nội dung Bộ thành phần 541 BLT 541 Tix 542 và 542 BWidget s 542 TkTable 542 Chương 24. Tk trong ví dụ 543 ExecLog 543 Tiêu đề cửa sổ 546 Khung nút 546 Nút lệnh 547 Nhãn văn bản và thành phần đầu vào 547 Xử lý thao tác gõ phím và tiêu điểm đầu vào 547 Kích thước văn bản và thanh cuộn 548 Quy trình chạy 549 Quy trình ghi nhật ký 550 Dừng quy trình 550 Làm việc trên nhiều nền tảng 551 Trình duyệt 552 Thay đổi kích thước Windows 556 Quản lý trạng thái 556 Tìm tệp 556 Menu xếp tầng 558 Thành phần văn bản chỉ đọc 559 Trình bao bọc Tc1 559 Dấu văn bản, tay cầm và liên kết 563 Sử dụng nhiều trình thông dịch 563 Giao diện cửa sổ 564 Chương 25. trình quản lý bố cục gói 566 Vị trí định hướng 567 Kích thước cửa sổ và lệnh truyền gói 568 Vị trí ngang và dọc 568 Mô hình khoang 570 Không gian bố cục và không gian hiển thị 572 tùy chọn -fill 572 Phần đệm bên trong, được chỉ định bằng tùy chọn -ipadx và -ipady 573 Phần đệm bên ngoài, được chỉ định bằng -padx và -pady options 575 Thay đổi kích thước cửa sổ và tùy chọn -expand 576 Nội dung 21 Cam kết 578 Hàng đợi bố cục 580 Xem xét nội tâm 581 Tính năng bố cục thanh cuộn 581 Chọn thành phần gốc khi bố trí 582 Xóa một thành phần khỏi hàng đợi bố cục 583 Quy tắc bố cục 583 Lệnh gói 584 Stack windows 586 Chương 26. Trình quản lý bố cục lưới 587 Bố trí các thành phần dưới dạng bảng 587 Tùy chọn -sticky 588 Phần đệm bên ngoài, được triển khai với các tùy chọn -padx và -pady 590 Phần đệm bên trong, được triển khai với các tùy chọn -ipadx và -ipady 590 Đặt nhiều các thành phần trong một ô 591 Kết hợp các hàng và cột 592 Thuộc tính hàng và cột 593 Đệm hàng và cột 593 Kích thước ô tối thiểu 594 Hỗ trợ các cửa sổ có thể thay đổi kích thước 594 Tùy chọn -uniform 596 Lệnh lưới 597 Chương 27. Trình quản lý bố cục địa điểm 599 Tìm hiểu cách bố trí địa điểm manager 599 Quản lý bảng 601 Phân tích tham số và duy trì trạng thái 603 Căn chỉnh khung 603 Liên kết sự kiện 604 Quản lý vị trí khung 605 Lệnh địa điểm 606 Chương 28. Thành phần panedwindow 608 Sử dụng panedwindow 608 Quản lý nội dung của bảng 609 Lập trình thành phần panedwindow 611 Thuộc tính Panedwindow 613 22 Nội dung Chương 29: Lệnh liên kết với sự kiện 615 Lệnh liên kết 616 Lệnh liên kết 617 Xử lý tổ hợp phím và tiêu điểm đầu vào 619 Sử dụng dấu ngắt và các lệnh tiếp tục 620 Xác định các thẻ liên kết mới 620 Mô tả các sự kiện 621 Sự kiện bàn phím 623 Sự kiện chuột 624 Các sự kiện khác 625 Liên kết cho các cửa sổ cấp cao nhất 626 Công cụ sửa đổi 626 Chuỗi sự kiện 629 Sự kiện ảo 631 Tạo sự kiện 632 Thông tin sự kiện 633 Cú pháp lệnh sự kiện 633 Từ khóa sự kiện 634 Phần IV. Thành phần TC 637 Chương 30. Các nút và menu 639 lệnh được gọi bằng các nút và vùng hiển thị 640 nút được liên kết với TS1-cross 645 thuộc tính của nút 650 nút menu và MENUBUTON 651 Menu dòng 653 Menu Contriot 654 Menu menu tùy chọn 654 Sắp xếp menu các mục trong nhiều cột 655 Sự kiện menu 655 Chọn các mục menu bằng bàn phím 655 Sự kiện menu ảo 656 Thực hiện các thao tác menu 656 Thuộc tính menu 658 Gói làm việc với menu theo tên 661 Phím tắt để truy cập menu 665 Nội dung 23 Chương 31. Cơ sở dữ liệu tài nguyên 667 Tìm hiểu tài nguyên 667 Mẫu tài nguyên 668 Tải tệp cơ sở dữ liệu 670 Bao gồm các bản ghi trong cơ sở dữ liệu 671 Truy cập cơ sở dữ liệu 672 Nút do người dùng xác định 672 Menu do người dùng xác định 674 Ứng dụng và tài nguyên người dùng 677 Tính năng thay thế biến 679 Chương 32. Thành phần Tk đơn giản 681 Khung cấp cao nhất và Windows 682 Frame, Labelframe và Toplevel Thuộc tính thành phần 682 Sử dụng thành phần Labelframe 684 Kích hoạt các ứng dụng khác 685 Kiểu cửa sổ cấp cao nhất 686 Thành phần nhãn 687 Thuộc tính chiều rộng và độ bao bọc 688 Thuộc tính thành phần nhãn 689 Thành phần thông báo 690 Thuộc tính thành phần thông báo 692 Căn chỉnh văn bản có trong trong các thành phần nhãn và thông báo 693 Thành phần tỷ lệ 693 Các ràng buộc cho thành phần tỷ lệ 694 Thuộc tính của thành phần tỷ lệ 695 Lập trình bộ điều khiển tuyến tính 696 Lệnh chuông 697 Chương 33. Thanh cuộn 698 Sử dụng thanh cuộn 698 Giao thức tương tác với thanh cuộn 700 Bộ hoạt động của thanh cuộn 701 Hoạt động xview và yview 702 Thành phần thanh cuộn 703 Các ràng buộc cho thanh cuộn 704 Thuộc tính thành phần thanh cuộn 705 Lập trình thanh cuộn 706 24 Nội dung Chương 34. Chỉnh sửa trường và thanh trượt tăng dần 708 Sử dụng trường chỉnh sửa 709 Kiểm tra nội dung của trường chỉnh sửa 710 Mẹo sử dụng trường chỉnh sửa 712 Sử dụng thành phần hộp xoay 713 Ràng buộc cho các thành phần mục nhập và hộp xoay 716 Thuộc tính của các thành phần mục nhập và hộp xoay 718 Lập trình chỉnh sửa trường và thanh trượt tăng dần 721 Chương 35. Cửa sổ danh sách 724 Sử dụng Hộp Danh sách 724 Thực hiện các hành động trên nội dung của Thành phần Hộp Danh sách 724 Lập trình Thành phần Hộp Danh sách 725 Thành phần Hộp Danh sách 728 Các liên kết cho Thành phần Hộp Danh sách 731 Duyệt qua Chế độ Lựa chọn 731 Chế độ Lựa chọn Đơn 732 Chế độ Lựa chọn Mở rộng 732 Nhiều Lựa chọn Chế độ 734 Liên kết để cuộn 734 Sự kiện ảo cho Thành phần Hộp danh sách 735 Thuộc tính Thành phần Hộp danh sách 735 Chế độ lưới 737 Chương 36. Thành phần văn bản 738 Chỉ mục 739 Chèn và xóa văn bản 740 Biểu thức chỉ mục 740 So sánh chỉ mục 741 Dấu đầu dòng văn bản 742 Hướng đánh dấu 743 Xử lý 743 Thuộc tính xử lý 744 Sử dụng nhiều thuộc tính điều khiển 746 Khoảng cách dòng và căn chỉnh 747 Trình lập bảng 750 Lựa chọn 750 Liên kết cho các điều khiển 751 Tìm văn bản 753 Thành phần nội tuyến 754 Hình ảnh nội tuyến 756 Nội dung 25 Đọc nội dung của thành phần văn bản 757 Lấy thông tin xử lý 758 Lấy thông tin điểm đánh dấu 759 Nội dung thành phần kết xuất 759 Hoàn tác các hành động đã hoàn thành 760 Ràng buộc và sự kiện 762 Ràng buộc cho một thành phần văn bản 762 Sự kiện ảo 764 Thao tác với văn bản 765 Thuộc tính thành phần văn bản 769 Chương 37. Thành phần Canvas 771 Tọa độ Canvas 771 Xin chào thế giới! 773 Canvas Xử lý 774 Thanh trượt tuyến tính để xác định giá trị tối thiểu và tối đa 776 Đối tượng Canvas 782 Trạng thái của Canvas và Đối tượng Canvas 783 Đường đứt nét 784 Cung 785 Bitmap 786 Hình ảnh 787 Đường thẳng 788 Hình bầu dục 791 Đa giác 791 Hình chữ nhật 792 Đối tượng Văn bản 793 Windows 799 Operations canvas 802 thành phần Tạo mô tả Postscript 805 Thuộc tính của thành phần canvas 808 Lời khuyên 810 Tọa độ màn hình và tọa độ canvas 810 Biểu diễn tọa độ 810 Chia tỷ lệ và xoay 810 Làm việc với tài nguyên 811 Đối tượng được xác định bởi một số lượng lớn điểm 811 Chọn đối tượng canvas 811 26 Nội dung Phần V. Các tính năng của Tk 813 Chương 38. Lựa chọn dữ liệu và Clipboard 815 Mô hình lựa chọn 815 Lệnh lựa chọn 818 Lệnh Clipboard 819 Trình xử lý lựa chọn 820 Trình xử lý lựa chọn Canvas 820 Chương 39. Hộp thoại và tiêu điểm đầu vào 825 Hộp thoại tiêu chuẩn 826 Hộp thông báo 826 Hộp thoại tệp và thư mục 827 Hộp thoại màu 829 Hộp thoại do nhà phát triển xác định 829 Tiêu điểm đầu vào 830 Lệnh tiêu điểm 831 Truyền tiêu điểm đầu vào 831 Chụp đầu vào 832 Lệnh tkwait 833 Loại bỏ các thành phần 834 Chia sẻ các lệnh focus, lấy và tkwait 834 Hộp thoại để nhập chuỗi 836 Phím tắt và tiêu điểm đầu vào 838 Hoạt hình và lệnh cập nhật 838 Chương 40. Thuộc tính thành phần Tk 840 Đặt giá trị của thuộc tính 840 Kích thước thành phần 842 Đóng khung và phù điêu 845 Làm nổi bật các thành phần , có tiêu điểm đầu vào 846 Phần đệm và điểm neo 847 Chương 41. Màu sắc, hình ảnh và con trỏ 850 Làm việc với màu 851 Bảng màu 853 Giá trị màu 853 Bản đồ màu và các lớp trực quan 856 Bitmap và hình ảnh 858 Lệnh hình ảnh 859 Bitmap 860 Bitmap thuộc tính 860 Hình ảnh ảnh 861 Nội dung 27 Con trỏ văn bản 865 Con trỏ chuột 866 Chương 42. Phông chữ và thuộc tính văn bản 869 Phông chữ đặt tên 870 Phông chữ được đặt tên 871 Phông chữ hệ thống 872 Phông chữ Unicode 872 Tên phông chữ X Window 873 Tính năng làm việc với phông chữ trong các phiên bản trước của Phông chữ Tk 874 số liệu 875 Lệnh phông chữ 876 Thuộc tính văn bản 877 Vị trí 877 Thuộc tính kiểm soát văn bản đã chọn 878 Sử dụng lưới và thay đổi kích thước 878 Một chương trình thực hiện lựa chọn phông chữ 879 Chương 43. Lệnh gửi 885 Lệnh gửi có thể làm gì 886 Lệnh gửi và X Window ủy quyền 887 Tập lệnh thực hiện truyền dữ liệu 888 Giao tiếp quy trình 890 Thực thi đánh giá từ xa bằng cách sử dụng ổ cắm mạng 892 Chương 44. Trình quản lý cửa sổ 896 lệnh win 896 Định cỡ, định vị và tạo kiểu của các cửa sổ cấp cao nhất 897 Biểu tượng 900 Trạng thái phiên 901 Các hoạt động quản lý cửa sổ khác 903 lệnh winfo 904 Truyền lệnh giữa các ứng dụng 905 Mối quan hệ giữa các thành phần trong cùng một họ 906 Kích thước thành phần 906 Vị trí thành phần 908 Cửa sổ gốc ảo 909 Làm việc với các nguyên tử và mã định danh 910 Bản đồ màu và các lớp trực quan 911 tk Lệnh 912 28 Nội dung Tùy chọn Chương 45: Hỗ trợ Tùy chỉnh Tùy chọn 915 Các tập tin mặc định được ứng dụng sử dụng 915 Xác định các tùy chọn tùy chỉnh 917 Giao diện tùy chọn tùy chỉnh 920 Quản lý tệp cài đặt người dùng 924 Theo dõi các thay đổi trong các biến cài đặt người dùng 926 Tinh chỉnh gói 927 Chương 46. Giao diện xác định các ràng buộc 929 Cửa sổ danh sách cộng tác 932 Công cụ chỉnh sửa các ràng buộc 934 Lưu và tải các ràng buộc 935 Phần VI. Lập trình trong C 937 Chương 47. Chương trình C và ngôn ngữ Tcl 938 Khái niệm cơ bản 939 Các cách tiếp cận cơ bản để viết mã C cho ứng dụng Tcl 939 Thủ tục lệnh và đối tượng dữ liệu C 940 SWIG 940 Khởi tạo Tcl 941 Gọi tập lệnh Tc1 942 Sử dụng thư viện Tcl C 942 Tạo các gói có thể tải 944 Lệnh tải 944 Thủ tục khởi tạo gói 945 Sử dụng Tcl_PkgProvide 946 Thủ tục lệnh C 947 Giao diện lệnh chuỗi 948 Mã thoát thủ tục lệnh 950 Quản lý chuỗi kết quả 950 Giao diện lệnh Tcl_Obj 951 Quản lý bộ đếm tham chiếu Tcl_Obj 953 Sửa đổi giá trị Tcl_Obj 955 Các vấn đề liên quan đến sử dụng các giá trị Tcl_Obj được chia sẻ 956 Lệnh blob 958 Tạo và xóa bảng băm 958 Tc1_A11oc, ckalloc và malloc 961 Xử lý tham số và sử dụng Tcl_GetIndexFromObj 961 Nội dung 29 Tạo và xóa các phần tử bảng băm 964 Hình thành danh sách 965 Hỗ trợ tham chiếu đến các giá trị Tcl_Obj ​​966 Sử dụng Tcl _Preserve và Tcl_ Release để bảo vệ dữ liệu 967 CONST Macro trong Tcl 8.4 API 969 Hoạt động chuỗi và quốc tế hóa 970 Giao diện DString 970 Chuyển đổi bộ ký tự 971 Tcl_Main và Tcl_AppInit 972 Tk_Main 975 Vòng lặp sự kiện 977 Gọi tập lệnh từ chương trình C 978 Các biến thể của Tcl_Eval 979 Từ bỏ Tcl_ Eval 980 Chương 48. Biên dịch Tcl và Plug-in 985 Cấu trúc thư mục tiêu chuẩn 986 Gói phân phối 986 Cấu trúc thư mục cài đặt 987 Xây dựng Tcl từ nguồn 988 Công cụ cấu hình và autoconf 989 Tùy chọn cấu hình tiêu chuẩn 991 Cài đặt 993 Sử dụng thư viện sơ khai 993 Sử dụng autoconf 995 Tệp tcl .m4 995 Tạo mẫu 996 Ví dụ mở rộng 996 Tệp configure.in 997 Tệp Makefile.in 998 Tệp tiêu đề tiêu chuẩn 1000 Sử dụng phần mở rộng 1000 Chương 49. Tạo các thành phần Tk trong ngôn ngữ C 1002 Khởi tạo phần mở rộng 1003 Cấu trúc dữ liệu thành phần 1004 Lệnh lớp thành phần 1005 Lệnh phiên bản thành phần 1010 Cài đặt và thay đổi giá trị thuộc tính 1014 Xác định thuộc tính thành phần 1019 Hiển thị đồng hồ 1025 30 Nội dung Hỗ trợ các sự kiện cửa sổ 1029 Giải phóng tài nguyên 1031 Chương 50. Thư viện C 1033 Thông tin chung về thư viện Tcl C 1034 Khởi tạo ứng dụng 1034 Tạo và xóa trình thông dịch 1034 Tạo và xóa lệnh 1035 Gói và tải động 1035 Quản lý chuỗi kết quả 1035 Cấp phát bộ nhớ 1035 Làm việc với danh sách 1036 Lệnh phân tích cú pháp 1036 Đường dẫn 1037 Theo dõi hành động của trình thông dịch 1037 Thực thi lệnh Tc1 1037 Thông tin lỗi 1038 Hành động với biến Tc1 1038 Xử lý biểu thức 1039 Chuyển đổi số 1039 Đối tượng Tcl 1039 Các loại đối tượng cơ bản 1039 Đối tượng chuỗi 1040 ByteArray cho dữ liệu nhị phân 1041 Chuỗi động 1041 Bộ ký tự 1041 Cấu trúc dữ liệu AssocData và trình thông dịch 1042 Bảng băm 1042 Xử lý tùy chọn 1043 Biểu thức chính quy và xác thực chuỗi 1043 Thực hiện vòng lặp sự kiện 1043 Làm việc với tệp 1044 Sự kiện hẹn giờ 1044 Cuộc gọi thời gian nhàn rỗi ngược 1044 I/O 1044 Trình điều khiển kênh I/O 1045 Xử lý tên tệp 1046 Lấy thông tin hệ thống tệp 1046 Triển khai hệ thống tệp ảo 1047 Hỗ trợ luồng 1047 Làm việc với tín hiệu 1048 Nội dung 31 Chấm dứt chương trình thông thường 1048 Macintosh 1048 Sự cố 1048 Các quy trình khác 1048 Thông tin chung về thư viện Tk C 1049 Các tham số dòng lệnh và chương trình chính 1049 Tạo windows 1049 Tên ứng dụng cho lệnh gửi 1050 Định cấu hình windows 1050 Tùy chọn dòng lệnh 1050 Tọa độ cửa sổ 1050 Ngăn xếp cửa sổ 1051 Thông tin về windows 1051 Thiết lập thuộc tính thành phần 1051 Lựa chọn dữ liệu và clipboard 1051 Giao diện vòng lặp sự kiện 1051 Xử lý các sự kiện cửa sổ 1052 Liên kết sự kiện 1052 Ghi lại các sự kiện bàn phím 1052 Xử lý lỗi giao thức đồ họa 1053 Sử dụng cơ sở dữ liệu tài nguyên 1053 Quản lý bitmap 1053 Tạo loại hình ảnh mới 1053 Sử dụng hình ảnh làm thành phần 1053 Hình ảnh ảnh 1054 Hỗ trợ đối tượng Canvas 1054 Bố cục điều phối 1054 Mã định danh hàng 1055 Bản đồ màu và các lớp trực quan 1055 Đường viền với hiệu ứng 3D mô phỏng 1056 Con trỏ chuột 1056 Phông chữ và hiển thị văn bản 1056 Bối cảnh đồ họa 1056 Phân bổ bộ nhớ bản đồ pixel 1057 Đơn vị màn hình 1057 Sử dụng Bumps 1057 Vị trí cố định 1057 Đường kiểu kết thúc 1057 Kết nối đường kiểu 1057 Đường đứt nét 1058 Kiểu căn chỉnh văn bản 1058 32 Nội dung Atoms 1058 Quản lý mã định danh tài nguyên 1058 Bộ mô tả ứng dụng Windows 1058 Phần VII. Những thay đổi trong thành phần của Tcl và Tk 1059 Chương 51. Tcl 7.4/Tk 4.0 1060 Shell<<Сору» может заменить ), một hộp thoại tiêu chuẩn và một số lệnh bổ sung để làm việc với các tệp. Tcl 7.7 và Tk 4.3 là các triển khai nội bộ được thiết kế để phát triển các mô-đun Tcl/Tk bổ sung cho trình duyệt Netscape Navigator và Microsoft Internet Explorer Web. Quá trình phát triển của họ thực sự diễn ra song song với công việc trên phiên bản 7.6 và Tk 4.2. Mô-đun bổ sung đã được tạo cho nhiều nền tảng khác nhau, bao gồm Solaris/SPARC, Solaris/INTEL, SunOS, Linux, Digital Unix, IRIX, HP/UX, Windows 95, Windows NT và Macintosh. Mô-đun này hỗ trợ Tcl-ailets như một phần của trang Web; nó sử dụng cơ chế bảo mật dựa trên Safe-Tcl. Các tính năng chính của Tcl 8.0 bao gồm trình biên dịch mã Tcl động, việc sử dụng trình biên dịch này có thể làm tăng đáng kể hiệu quả thực thi các tập lệnh Tcl. Tcl 8.0 hỗ trợ các chuỗi có thể chứa ký tự null. Đối với các tập lệnh Tcl, trình biên dịch rất minh bạch, nhưng các nhà phát triển viết phần mở rộng phải biết một số API C mới, nếu không họ sẽ không thể tận dụng được các tính năng mới. Quá trình tạo Tcl 8.0 lâu hơn một chút. Điều này là do sự chuyển đổi của John Osterout từ Sun Microsystems sang Scriptics Corporation. Việc triển khai 8.0р2 đã sẵn sàng vào mùa thu năm 1997 và nhanh chóng trở nên phổ biến. Tuy nhiên, việc phát hành bản triển khai cuối cùng, 8.0.5, đã bị trì hoãn cho đến mùa xuân năm 1999. Phiên bản mới của Tk chỉ được tạo để đảm bảo tuân thủ tốt nhất có thể với Tcl 8.O. TK 8.0 bao gồm hỗ trợ phông chữ độc lập với nền tảng, các menu và thanh công cụ dành riêng cho nền tảng cũng như các thành phần dành riêng cho nền tảng được thiết kế để trông nhất quán với các ứng dụng khác chạy trên hệ thống Windows và Macintosh. Tcl/Tk 8.1 cung cấp hỗ trợ Unicode và khả năng xử lý biểu thức chính quy mới cung cấp các khả năng tương tự như Perl 5. Các phiên bản này cũng sẵn sàng cho luồng, giúp dễ dàng kết hợp Tcl vào các ứng dụng đa luồng. Các nhà phát triển Tk đã làm rất nhiều việc để tìm ra phông chữ phù hợp để thể hiện các ký tự Unicode và danh mục thông báo giúp việc viết ứng dụng có giao diện bằng các ngôn ngữ khác nhau trở nên dễ dàng hơn nhiều. Công việc trên Tcl/Tk 8.1 cũng bị ảnh hưởng bởi việc Osterout chuyển từ Sun sang Scriptics. Việc triển khai alpha đầu tiên được hoàn thành vào mùa thu năm 1997 và việc triển khai cuối cùng, 8.1.1, vẫn chưa sẵn sàng cho đến tháng 5 năm 1999. Việc triển khai Tcl/Tk 8.2 được hình thành chủ yếu nhằm sửa các lỗi đã lưu ý và tăng độ tin cậy của hệ thống. Đồng thời, API thư viện Tcl C đã được bổ sung thêm một số công cụ giúp tăng bộ tiện ích mở rộng có sẵn. Công việc trên Tcl/Tk 8.2 nhanh chóng kết thúc và những triển khai này được xuất bản vào mùa hè năm 1999. Tcl/Tk 8.3 đã được cải tiến đáng kể so với các phiên bản trước đó. Tk đã áp dụng các mẫu Dấu gạch ngang và Hình ảnh do Jan Nijtmans đề xuất. Phiên bản 8.3.0 được triển khai vào tháng 2 năm 2000 và phiên bản mới nhất 8.3.5 được phát hành vào tháng 10 năm 2002. Tcl/Tk 8.4 tập trung vào hiệu suất và thêm giao diện hệ thống tệp ảo và ba thành phần Tk: hộp xoay, khung có nhãn và cửa sổ paned. 44 Công việc thực hiện việc này tiếp tục trong một thời gian khá dài. Phiên bản beta đầu tiên được phát hành vào tháng 6 năm 2000 và phiên bản 8.4.2 được phát hành vào tháng 5 năm 2003. Tiện ích mở rộng Tcl và Tk Tcl được thiết kế sao cho các tiện ích bổ sung được tạo dưới dạng tiện ích mở rộng mà không ảnh hưởng đến chức năng cốt lõi của Tcl. Nhiều phần mở rộng hiện có sẵn. Thông tin về chúng có thể được lấy trên Web tại địa chỉ sau: http://www.tcl.tk/resource/ Tuy nhiên, để thực hiện một số thay đổi, bạn phải sửa đổi gói Tcl/Tk cơ bản. Nếu bạn muốn đóng góp nỗ lực của mình để phát triển các biến thể Tcl/Tk mới, sự giúp đỡ của bạn sẽ được đánh giá rất cao. Bạn có thể tìm thấy thông tin cần thiết về hoạt động của nhóm phát triển Tcl và Tk tại địa chỉ sau: http://www.tcl.tk/cgi-bin/tct/tip/ Mã nguồn Tcl và Tk được hỗ trợ trong SourceForge dự án. http://www.sourceforge.net/proj ects/tcl http://www.sourceforge.net/proj ects/tktoolkit Thông báo về các lỗi đã quan sát và đề xuất cải tiến được đăng ký trong cơ sở dữ liệu. Các bổ sung cho mã nguồn được thực hiện theo Sách hướng dẫn kỹ thuật Tcl có cơ hội được chấp nhận cao nhất. Sách hướng dẫn mô tả các quy tắc định dạng mã, các yêu cầu kiểm tra và tài liệu. Tcl trên World Wide Web Bạn có thể bắt đầu làm quen với các tài liệu về Tcl từ các trang Web sau: http://www.tcl.tk/ http://tcl.activestate.com/ http://www.purl.org / NET/Tcl-FAQ/ Trang Wiki được cập nhật thường xuyên theo chủ động của người dùng. Nó xuất bản nhiều tài liệu về Tcl và các phần mở rộng của nó (bạn có thể bắt đầu xuất bản thông tin mới). http://wiki.tcl.tk/ 45 Trang web của cuốn sách này chứa thông tin lỗi của tất cả các phiên bản. Cá nhân tôi giám sát các tài liệu được xuất bản trên trang này và dự định làm như vậy trong tương lai. http://www.beedub.com/book/ Bạn cũng có thể tìm thấy thông tin hữu ích trên trang web Prentice Hall. http://www.prenhall.com/ Kho lưu trữ Ftp Dưới đây là một số trang FTP chứa thông tin oTcl. ftp://ftp.tcl.tk/pub/tcl ftp://src.doc.ic.ac.uk/packages/tcl/ ftp://ftp.luth.se/pub/unix/tcl/ ftp:/ /ftp.sunet.se/pub/lang/tcl ftp://ftp.cs.Columbia.edu/archives/tcl ftp://ftp.funet.fi/pub/lacular/tcl Bạn có thể sử dụng bất kỳ trình duyệt nào như Mozilla , Netscape, Internet Explorer và Lynx. Nhóm tin Nhóm coll.lang.tcl rất tích cực. Trong khuôn khổ của nó có một diễn đàn dành riêng để thảo luận về Tcl. Thông báo về các tiện ích mở rộng và ứng dụng Tc1 được gửi đến nhóm đồng nghiệp. lang.tcl.announce. Để truy cập tài liệu nhóm tin, bạn có thể sử dụng các dịch vụ Web đặc biệt. Để làm điều này, chỉ cần nhập comp.lang.tcl vào trường chỉnh sửa trên trang Web sau: http://groups.google.com Cuốn sách này dành cho ai? Cuốn sách này có thể hữu ích cho cả những người lập trình bắt đầu làm việc với Tcl lần đầu tiên và dành cho các chuyên gia có trình độ. Tôi khuyên tất cả các loại độc giả nên đọc kỹ Chương 1. Mô hình lập trình Tcl khá đơn giản nhưng nó khác biệt đáng kể so với nhiều ngôn ngữ lập trình khác. Mô hình này dựa trên sự thay thế chuỗi nên nếu hiểu kỹ nó, bạn sẽ tránh được nhiều vấn đề trong công việc. Cuốn sách cung cấp một số lượng lớn các ví dụ về cách sử dụng hiệu quả các công cụ Tcl và Tk. Hầu hết 46 chương đều có các bảng cung cấp thông tin về các lệnh và thành phần Tc1. Người ta cho rằng người đọc cuốn sách này đã có một số kinh nghiệm lập trình, nhưng ngay cả người mới bắt đầu cũng có thể nhanh chóng có được những kỹ năng cần thiết khi đọc cuốn sách này. Kiến thức về ngôn ngữ shell Unix sẽ giúp ích cho bạn nhưng nó không phải là yêu cầu bắt buộc. Khi việc trình bày tài liệu có liên quan chặt chẽ đến nguyên tắc hoạt động của hệ thống cửa sổ thì thông tin liên quan sẽ được cung cấp. Chương 2 mô tả chi tiết cách sử dụng Tcl và Tk trên hệ thống Unix, Windows và Macintosh. Cách làm việc với cuốn sách này Tốt nhất là thực hiện các ví dụ được đưa ra trong sách trên máy tính khi đọc sách. Lập trình viên thường gặp khó khăn khi học Tcl. Thực tế là trong thông tin tham khảo về Tcl và Tk không có ví dụ nào về việc sử dụng các cấu trúc ngôn ngữ tương ứng và các chương trình thực tế được ghi lại kém. Cuốn sách này nhằm mục đích cung cấp cho người đọc những thông tin còn thiếu. Để tìm hiểu các lệnh Tcl và Tk cụ thể, tôi khuyên bạn nên sử dụng trợ giúp trực tuyến. Nó cung cấp một mô tả chi tiết về các cấu trúc ngôn ngữ tương ứng. Cuốn sách này chứa nhiều thông tin trong hệ thống tham khảo nhưng thiếu các chi tiết có thể thay đổi tùy theo việc triển khai Tcl và Tk. Phiên bản HTML của các trang trợ giúp trực tuyến có thể được tìm thấy trên đĩa CD đi kèm với cuốn sách này. Các chương trình ví dụ Cuốn sách này đi kèm với một đĩa CD chứa mã cho tất cả các ví dụ được thảo luận trong cuốn sách. Đĩa có thể được đọc trên hệ thống Unix, Windows và Macintosh. Ngoài các chương trình, nó còn chứa các phiên bản Tcl và Tk có sẵn tại thời điểm xuất bản cuốn sách này, cũng như nhiều chương trình được phân phối miễn phí trên Internet. Mã nguồn của các ví dụ cũng có thể được tìm thấy trên Web tại địa chỉ sau: http://www.beedub.com/book/ Quy ước trình bày Các ví dụ về mã được trình bày theo nhiều cách khác nhau trong suốt cuốn sách. Điều quan trọng nhất trong số chúng được tách ra khỏi phần còn lại của văn bản và được trình bày dưới dạng danh sách. Mã của 47 chương trình trong Tcl và C được trình bày bằng phông chữ đơn cách. Kết quả thực hiện lệnh Tcl cũng được in nghiêng. Lưu ý rằng các ký tự => không phải là một phần của dữ liệu được lệnh trả về. expr 5+8 => 13 Phông chữ Monospace còn được dùng để thể hiện tên các lệnh Tcl và thủ tục C trong văn bản. Cuốn sách thường chứa các quy tắc sử dụng lệnh Tcl. Tên lệnh và từ khóa bất biến được hiển thị bằng phông chữ đơn cách. Các dấu hiệu cho thấy lệnh gọi chứa các giá trị biến, tùy chọn hoặc dữ liệu khác được in nghiêng. Nếu tham số là tùy chọn thì dấu chấm hỏi sẽ được đặt ở bên trái và bên phải của tham số đó. Một ví dụ giải thích việc sử dụng lệnh set được đưa ra dưới đây. đặt biến_name?giá trị? Chữ tượng hình Thông tin cần chú ý thêm sẽ được đánh dấu bằng chữ tượng hình. Cuốn sách này được tổ chức như thế nào Tài liệu trong cuốn sách được chia thành bảy phần. Chương đầu tiên mô tả các công cụ cơ bản của Tcl. Chương đầu tiên xem xét các cơ chế cơ bản của ngôn ngữ. Vật liệu này rất quan trọng. Bạn chắc chắn nên kiểm tra nó nếu muốn sử dụng Tcl một cách hiệu quả. Nếu bạn đã lập trình bằng Tcl, ít nhất bạn vẫn nên đọc lướt Chương 1. Chương 2 trình bày chi tiết về cách sử dụng Tcl và Tk trên hệ thống Unix, Windows và Macintosh. Chương 3 trình bày một ứng dụng mẫu (CGI script) minh họa các tính năng chính của việc viết chương trình trong Tcl. Các chương còn lại của Phần I được dành để xem xét chi tiết các lệnh Tcl chính. Đặc biệt, nó thảo luận về cách làm việc với chuỗi, kiểu dữ liệu, cách sử dụng luồng và quy trình điều khiển cũng như phạm vi. Phần I kết thúc bằng việc xem xét các công cụ trao đổi tập tin và chạy các chương trình khác. Phần II mô tả các công cụ nâng cao để viết chương trình Tcl. Đầu tiên, chúng ta thảo luận về lệnh eval, lệnh này cho phép bạn tạo các chương trình Tcl một cách linh hoạt. Biểu thức chính quy cung cấp khả năng xử lý chuỗi bổ sung. Nếu việc xử lý dữ liệu là một phần quan trọng trong ứng dụng của bạn và nếu ứng dụng chạy chậm, bạn có thể cải thiện hiệu suất của nó bằng cách sử dụng hỗ trợ biểu thức chính quy 48. Không gian tên cho phép bạn chia phạm vi toàn cục của các thủ tục và biến thành các phạm vi riêng biệt. Thư mục Unicode và thông báo giúp việc tạo các ứng dụng đa ngôn ngữ trở nên dễ dàng hơn nhiều. Các thư viện và gói cho phép bạn sắp xếp mã của mình để có thể sử dụng mã đó trong các dự án khác nhau. Các công cụ xem xét nội tâm cung cấp thông tin quan trọng về trạng thái bên trong của Tcl. I/O theo sự kiện cho phép bạn tạo các ứng dụng hoạt động đồng thời với nhiều máy khách. Ổ cắm mạng được sử dụng để triển khai giao thức HTTP, cho phép bạn nhận các trang Web. Một số chương cuối của Phần II mô tả các công cụ phát triển ứng dụng và cách sử dụng chúng trên các nền tảng khác nhau. Các công cụ Safe-Tcl cung cấp một môi trường an toàn trong đó các ứng dụng Tcl có thể được thực thi. Để làm việc trên Web, có thể sử dụng máy chủ Web TclHttpd mở rộng, được viết hoàn toàn bằng Tcl. Thật dễ dàng để tạo các chương trình ứng dụng dựa trên TclHttpd; Bạn cũng có thể tích hợp máy chủ với các ứng dụng hiện có, từ đó tạo giao diện Web cho chúng. Starkit là một công cụ mới mạnh mẽ cho phép bạn đóng gói và phân phối các ứng dụng Tcl/Tk. Để tổ chức hệ thống tệp trong gói, hỗ trợ hệ thống tệp ảo (VFS) được sử dụng. Phần III chứa thông tin chung về Tk. Khả năng của Tk được minh họa bằng một số ví dụ. Phần này cũng mô tả ràng buộc - thiết lập sự tương ứng giữa lệnh Tcl và một sự kiện, chẳng hạn như nhấp chuột hoặc nhấn phím. Ba chương cuối của Phần III được dành cho các trình quản lý bố cục Tk, cung cấp các công cụ mạnh mẽ để tổ chức giao diện người dùng. Phần IV của cuốn sách này mô tả các thành phần của Tk. Các thành phần triển khai các nút, menu, thanh cuộn, nhãn văn bản, trường chỉnh sửa, vùng văn bản hỗ trợ các phông chữ khác nhau, khung vẽ, hộp danh sách và thanh trượt tuyến tính. Đối với mỗi thành phần, có các công cụ cho phép bạn thay đổi cấu hình của nó và tổ chức tương tác với các chương trình ứng dụng, nhưng hành vi mặc định của thành phần này thường đáp ứng yêu cầu của nhà phát triển. Để đơn giản hóa cấu hình của các thành phần và đảm bảo tính nhất quán của các thành phần giao diện, cơ sở dữ liệu tài nguyên được cung cấp. Phần V mô tả những công cụ Tk chưa được quan tâm đầy đủ trong các phần trước. Đặc biệt, nó bao gồm các lựa chọn, các vấn đề về tiêu điểm đầu vào và hộp thoại tiêu chuẩn. Ngoài ra, cách làm việc với phông chữ, màu sắc 49 và hình ảnh - các yếu tố chung cho tất cả các thành phần Tk - cũng được thảo luận chi tiết. Phần này kết thúc bằng một số ví dụ về các chương trình khá lớn. Phần VI là phần giới thiệu về lập trình phần mở rộng Tc1 trong C. Phần này được đưa vào sách để người đọc có thể hình dung rõ ràng về cách mở rộng Tcl bằng các lệnh viết bằng C và tích hợp Tcl với các ứng dụng hiện có. Mỗi chương trong Phần VII được dành cho một trong các cách triển khai Tcl/Tk được đề cập trong cuốn sách này. Các chương này mô tả các tính năng mới cũng như các tính năng có thể thay đổi theo từng phiên bản. Những đặc điểm này phải được tính đến khi điều chỉnh chương trình cho các phiên bản mới của Tcl/Tk. Các tính năng của ấn bản thứ tư của cuốn sách Trong ấn bản thứ tư, tài liệu được trình bày bằng phiên bản Tcl/Tk 8.4, trong đó nhiều tính năng mới đã được triển khai. Tcl giới thiệu một hệ thống tệp ảo cho phép bạn tính đến cấu trúc thư mục khi phân phối ứng dụng, cũng như làm việc với các tài nguyên từ xa trên FTP và các trang Web thông qua giao diện với hệ thống tệp thông thường. Phiên bản thứ tư bổ sung Chương 22, bao gồm Tclkit và Starkit, đồng thời sử dụng cơ sở dữ liệu Metakit để lưu trữ tập lệnh và các tệp khác. Với VFS, những tệp này được đặt trên một hệ thống tệp riêng tư. Starkit là một công cụ mới mạnh mẽ cho phép bạn đóng gói và phân phối các ứng dụng Tcl/Tk. Phiên bản thứ tư cũng bổ sung thêm Chương 21, bao gồm các công cụ hỗ trợ các chương trình đa luồng. Những tiện ích này rất hữu ích khi kết hợp Tcl vào các ứng dụng đa luồng. Phiên bản này cũng bao gồm các thành phần mới của Tk. Thanh trượt tăng dần tương tự như trường chỉnh sửa nhưng có các tính năng bổ sung. Khung có nhãn cung cấp các tùy chọn kiểu dáng cửa sổ mới. Thành phần panedwindow là một trình quản lý bố cục chuyên dụng cung cấp các khả năng mới để tổ chức giao diện người dùng. Lời cảm ơn vì sự hỗ trợ trong việc chuẩn bị ấn bản đầu tiên của cuốn sách này. Tôi xin cảm ơn các nhân viên tại Xerox PARC vì sự hỗ trợ và thông cảm của họ. Nhiều lời khuyên được đưa ra trong cuốn sách không chỉ là kết quả công việc của cá nhân tôi mà còn là kinh nghiệm của các đồng nghiệp. Các câu hỏi do Dave Nichols đặt ra đã truyền cảm hứng cho tôi tìm hiểu các cơ chế cơ bản của trình thông dịch Tcl. Những lời nhận xét của Dan Swinehart và Lawrence Butcher đã giúp tôi có thêm động lực để tiếp tục làm việc. Ron Frederick và Berry Kerchival đã sử dụng Tk để phát triển giao diện đồ họa cho hệ thống của họ. Kết quả thu được một lần nữa khẳng định tính hiệu quả cao của công cụ này. Becky Burwell, Rich Gold, Carl Hauser, John Maxwell, Ken Pier, Marvin Theimer và Mohan Vishwanath đã xem lại bản phác thảo đầu tiên của tôi. Những nhận xét và quan sát của họ đã mang lại sự hỗ trợ vô giá trong công việc tiếp theo về văn bản. Karin Petersen, Bill Schilit và Terri Watson luôn tìm cách sử dụng Tcl theo những cách không chuẩn, điều này đã bổ sung thêm sự đa dạng cho công việc. Tôi muốn đặc biệt cảm ơn Mark Weiser và Doug Terry vì sự giúp đỡ và hỗ trợ của họ. Cảm ơn tác giả của Tcl và Tk, John Osterout. Những hệ thống mà anh ấy phát triển là những hệ thống đáng chú ý nhất mà tôi từng gặp. John luôn cập nhật cho tôi những triển khai Tk 4.0 mới nhất để tôi có thể khám phá các tính năng mới trước khi bản beta đầu tiên được phát hành. Tôi cảm ơn các lập trình viên mà tôi đã phải giao tiếp. Tôi đã học được rất nhiều điều mới từ họ. Tôi coi John LoVerso và Stephen Uhler là những nhà phát triển chương trình Tc1 tài năng nhất mà tôi từng biết. Tôi bày tỏ lòng biết ơn chân thành tới những người đã đọc bản thảo đầu tiên của tôi và đưa ra những nhận xét quý báu. Đây là Pierre David, Clif Flynt, Simon Kenyon, Eugene Lee, Don Libes, Lee Moore, Joe Moss, Hador Shemtov, Frank Stajano, Charles Thayer và Jim Thornton. Nhiều người đã gửi cho tôi những gợi ý và nhận xét qua thư. Ở đây tôi chỉ nêu tên một vài người trong số họ. Đây là Miguel Angel, Stephen Bensen, Jeff Blaine, Tom Charnock, Brian Cooper, Patrick D'Cruze, Benoit Benoit Desrosiers, Ted Dunning, Mark Eichin, Paul Priberg, Carl Gauthier, David Gerdes, Klaus Hackenberg, Torkle Hasle, Marti Hearst, Jean-Pierre Herbert, Jamie Honan, Norman Klein, Joe Konstan, Susan Larson Larson), Heken Liljegren, Lionel Mallet, Dejan Milojicic, Greg Minshall, Bernd Mohr, Will Morse, Heiko Nerdmann Heiko Nardmann, Gerd Neugebauer, Keri Renzema, Rob Riepel , Dan Schenk, Jean-Guy Schneider, Elizabeth Scholl), Karl Schwamb, Rony Shapiro, Peter Simanyi, Vince Skahan, Bill Stumbo, Glen Vanderburg, Larry Virden, Reed Wade và Jim Wight. Thật không may, tôi không thể trả lời tất cả các lá thư. Tôi xin gửi lời cảm ơn tới các biên tập viên và mọi người ở Prentice Hall. Các chuyên gia có trình độ cao Mark Taub, Lynn Schneider và Kerry Reardon đã giúp đỡ tôi rất nhiều trong quá trình phát triển cuốn sách. Lời cảm ơn đã giúp đỡ ấn bản lần thứ hai của cuốn sách này Tôi một lần nữa muốn cảm ơn John Osterout vì sự hỗ trợ của anh ấy khi làm việc với nhóm Tcl/Tk tại Sun Microsystems. Những người còn lại trong nhóm đã làm mọi thứ có thể để biến Tcl và Tk thành công cụ thực sự để tạo các chương trình đa nền tảng. Scott Stanton chịu trách nhiệm chuyển Tk sang PC và Ray Johnson đảm bảo rằng Tk hoạt động trên Macintosh. Jacob Levy đã triển khai hệ thống I/O hướng sự kiện, Safe-Tcl và tiện ích bổ sung cho trình duyệt. Brian Lewis đã tạo ra trình biên dịch Tcl. Ken Corey đã làm việc về việc tích hợp Tcl và Java và cũng đã hỗ trợ công việc về SpecTcl. Syd Polk đã khái quát hóa hệ thống menu để hoạt động với các thành phần dành riêng cho nền tảng trong môi trường Macintosh và Windows. Colin Stevens đã làm việc trên các công cụ quốc tế hóa và hỗ trợ phông chữ cho Tk. Stephen Uhler xứng đáng nhận được lời cảm ơn chân thành của tôi vì những ví dụ thú vị mà tôi đã sử dụng trong cuốn sách của mình. Ông lãnh đạo nhóm phát triển SpecTcl. Stephen đã tạo thư viện HTML mà tôi dùng để viết trình soạn thảo. Chúng tôi đã cùng nhau làm việc trên các phiên bản đầu tiên của TclHttpd. Anh ấy dạy tôi cách viết mã Tcl nhỏ gọn, hiệu quả và cách sử dụng các biểu thức chính quy để giải quyết nhiều vấn đề. Tôi nợ Stephen rất nhiều và tôi hy vọng rằng mình có thể hữu ích cho anh ấy theo cách nào đó. Một lần nữa tôi xin gửi lời cảm ơn tới Mark Taub, cũng như Eileen Clark và Martha Williams của Prentice Hall. George Williams đã giúp tôi ghép các tập tin lại với nhau thành một đĩa CD. 52 Lời cảm ơn đã hỗ trợ chuẩn bị ấn bản thứ ba của cuốn sách John Osterout tiếp tục đóng một vai trò quan trọng trong việc phát triển và phân phối Tcl, lần này với tư cách là người sáng lập Tập đoàn Scriptics. Tôi muốn cảm ơn tất cả mọi người tại Scriptics, đặc biệt là Sarah Daniels, Scott Stanton, Ray Johnson, Bryan Surles, Melissa Chawla, Lee Bernhard, Suresh Sastry, Emil Scaffon, Pat P., Scott Redman và Berry Kerchival. Mọi người tại Scriptics đều xứng đáng nhận được lời cảm ơn chân thành của chúng tôi vì đã tạo ra một môi trường thuận lợi cho công việc sáng tạo trong công ty. Tác giả của nhiều ấn phẩm, Jerry Peek, đã giúp tôi những lời khuyên hữu ích. Ken Jones đã nói về các công cụ lập chỉ mục hiệu quả. Rất cám ơn tất cả các độc giả đã gửi phản hồi và đề xuất của họ. Việc tìm hiểu về những cách mới để sử dụng Tcl luôn khiến tôi quan tâm. Tôi cũng xin cảm ơn các biên tập viên Mark Taub, Joan McNamara và Joan Eurell của Prentice Hall. Họ đã giúp tôi hoàn thành ấn bản thứ ba của cuốn sách đúng thời hạn. Lời cảm ơn đã hỗ trợ chuẩn bị ấn bản thứ tư của cuốn sách Nhờ có Jeff Hobbs và Ken Jones, dự án này đã được hoàn thành thành công. Jeff được biết đến rộng rãi trong giới lập trình viên Tcl. Việc triển khai Tcl/Tk mới xuất hiện phần lớn nhờ vào khả năng lãnh đạo và làm việc chuyên sâu của anh ấy. Ken là một giáo viên Tcl nổi tiếng và sự hợp tác của tôi với anh ấy đã mang lại kết quả là một số tài liệu mới thú vị được thêm vào cuốn sách này. Tôi muốn cảm ơn các thành viên của Nhóm cốt lõi Tcl; Thông qua nỗ lực của nhóm này, Tcl đang trở thành một công cụ ngày càng mạnh mẽ và đạt được những khả năng mới. Tôi xin cảm ơn Jean-Claude Wippler và Steve Landers vì Metakit, Tclkit và Starkits. Những công cụ này cung cấp các khả năng độc đáo để đóng gói và phân phối các ứng dụng Tcl. Tôi hy vọng rằng những công nghệ này sẽ tiếp tục phát triển. Tôi cũng nhận được thông tin về Starkit từ một số người dùng. Tin nhắn được gửi cho tôi bởi Robert Techentin, Steve Blinkhorn, Frank Sergeant, Arjen Markus, Uwe Koloska, Larry Virden 53, Tom Krehbiel (Tom Krehbiel) và Donald Porter. Tôi muốn bày tỏ lòng biết ơn tới ban quản lý và nhân viên của Prentice Hall vì sự hỗ trợ liên tục của họ. Marc Taub tiếp tục là “cha đỡ đầu” của cuốn sách này. Kathleen Caren đóng một vai trò quan trọng trong việc chuẩn bị phát hành ấn bản thứ tư. Cuối cùng, tôi cảm ơn vợ tôi, Jodi, vì tình yêu, lòng tốt, sự kiên nhẫn và sự thấu hiểu của cô ấy trong suốt thời gian dài viết cuốn sách này. Tôi có ba con trai, Christopher, Daniel và Michael. Tôi phải liên tục trả lời các câu hỏi của họ nên tôi chắc chắn rằng mình không có nguy cơ bị sa sút tinh thần. Cách liên hệ với tác giả sách Tôi luôn sẵn sàng lắng nghe ý kiến ​​của độc giả về một cuốn sách. Địa chỉ của tôi là welch® acm.org. Nếu bạn đưa từ "sách" hoặc tên sách vào trường chủ đề của bức thư, điều này sẽ giúp tôi sắp xếp các bức thư gửi đến một cách chính xác. Bạn có thể nhận thông tin mới về cuốn sách này và các lĩnh vực công việc khác của tôi tại http://www.beedub.com/. Tôi ghi lại những lỗi được tìm thấy trên trang Web, vì vậy ý ​​kiến ​​của bạn sẽ được đánh giá rất cao. Chúng tôi đang chờ phản hồi của bạn. Bạn, độc giả của cuốn sách này, là nhà phê bình và bình luận chính của nó. Chúng tôi đánh giá cao ý kiến ​​của bạn và muốn biết những gì chúng tôi đã làm đúng, những gì chúng tôi có thể làm tốt hơn và những gì bạn muốn thấy chúng tôi xuất bản. Chúng tôi muốn nghe bất kỳ nhận xét nào khác mà bạn muốn đưa ra cho chúng tôi. Chúng tôi đang chờ đợi ý kiến ​​​​của bạn và hy vọng cho họ. Bạn có thể gửi thư hoặc email cho chúng tôi hoặc chỉ cần truy cập máy chủ Web của chúng tôi và để lại nhận xét của bạn ở đó. Tóm lại, bằng mọi cách thuận tiện cho bạn, hãy cho chúng tôi biết bạn có thích cuốn sách này hay không, đồng thời bày tỏ ý kiến ​​​​của bạn về cách làm cho sách của chúng tôi trở nên thú vị hơn đối với bạn. Khi gửi thư hoặc tin nhắn, hãy đảm bảo bao gồm tiêu đề cuốn sách và tác giả của nó cũng như địa chỉ gửi lại của bạn. Chúng tôi sẽ xem xét cẩn thận ý kiến ​​​​của bạn và chắc chắn sẽ tính đến nó khi lựa chọn và chuẩn bị xuất bản những cuốn sách tiếp theo. Tọa độ của chúng tôi: E-mail: inf oQwilliamspublishing. comWW: http://www. williamspublishing. com Thông tin về thư từ: Nga: 115419, Moscow, PO Box 783 Ukraine: 03150, Kyiv, PO Box 152 PHẦN Cơ bản về Tcl Phần I cung cấp thông tin cơ bản về ngôn ngữ Tcl. Mọi độc giả nên đọc Chương 1, bất kể anh ta định giải quyết vấn đề gì trong thực tế. Chương này mô tả các thuộc tính cơ bản của ngôn ngữ. Tcl khá đơn giản nên ngay cả những người mới lập trình cũng có thể dễ dàng thành thạo nó. Những cá nhân đủ điều kiện cũng nên xem lại Chương 1 để tránh các phương pháp tiếp cận không áp dụng được cho TCL. Chương 2 cung cấp hướng dẫn nhanh để chạy Tcl và Tk trong môi trường hoạt động Unix, Windows và Macintosh. Bạn có thể cần đọc Chương 2 trước để có thể theo dõi các ví dụ trong Chương 1. Chương 3 trình bày một chương trình TCL điển hình - một tập lệnh CGI triển khai sổ khách trên một trang Web. Khi tạo chương trình này, các công cụ đã được sử dụng sẽ được mô tả chi tiết trong các chương tiếp theo. Mục đích chính của chương này là giới thiệu cho người đọc một ví dụ thực tế thể hiện khả năng của Tcl. Các chương còn lại của Phần I được dành trực tiếp cho việc lập trình trong Tcl. Xử lý chuỗi được đề cập trong Chương 4. Làm việc với danh sách được đề cập trong Chương 5. Các cấu trúc điều khiển, chẳng hạn như vòng lặp và câu lệnh if, được đề cập trong Chương 6. Chương 7 đề cập đến các thủ tục Tcl có thể được sử dụng để thực hiện các lệnh Tcl mới. Chương 8 thảo luận về mảng Tcl. Mảng là một trong những cấu trúc hữu ích nhất trong Tcl; chúng mang lại sự linh hoạt trong các ứng dụng bạn tạo. Chương 9 đề cập đến các thao tác I/O và chạy các chương trình khác. Những công cụ này tạo tập lệnh Tcl cho phép bạn kết hợp các chương trình khác nhau và xử lý dữ liệu có trong tệp. Sau khi đọc Phần I, bạn sẽ có đủ kiến ​​thức để phát triển các chương trình Tcl đơn giản cũng như đọc và hiểu mã do các lập trình viên khác viết. Chương 1 Tìm hiểu về Tcl Chương này mô tả cú pháp của ngôn ngữ kịch bản lệnh Tcl. Đặc biệt, nó đề cập đến việc thay thế và nhóm được thực hiện trong quá trình diễn giải các chương trình Tcl. Cuộc thảo luận sẽ bao gồm các lệnh Tcl sau: đặt, định dạng, đặt, expr, chuỗi, while, incr và Proc. Tcl là ngôn ngữ lệnh hướng chuỗi. Nó chỉ sử dụng một vài cấu trúc ngôn ngữ cơ bản. Cú pháp của ngôn ngữ cực kỳ đơn giản, cho phép bạn học nó nhanh chóng. Ngôn ngữ Tcl chủ yếu tập trung vào việc giải quyết các vấn đề liên quan đến việc kết hợp một tập hợp các “khối xây dựng” thành một ứng dụng hoàn chỉnh. Tcl là ngôn ngữ thông dịch; Trong khi ứng dụng đang chạy, mã của nó sẽ được trình thông dịch xử lý. Nhờ cách tiếp cận này, quá trình phát triển và hiện đại hóa ứng dụng được đơn giản hóa đáng kể; các hoạt động cần thiết cho việc này có thể được thực hiện một cách tương tác. Khả năng chạy lệnh tương tác giúp việc học Tcl dễ dàng hơn nhiều. Nếu bạn chưa biết cách chạy trình thông dịch Tcl trên hệ thống của mình, bạn nên đọc Chương 2, bao gồm việc chạy Tcl trên các môi trường điều hành Unix, Windows và Macintosh. Chương này cung cấp cái nhìn tổng quan về ngôn ngữ Tcl. Ngay cả khi bạn coi mình là một lập trình viên có kinh nghiệm, hãy cố gắng dành thời gian đọc chương này. Điều này sẽ giúp bạn chắc chắn rằng bạn thực sự biết ngôn ngữ Tcl và sẽ giúp bạn tránh được nhiều sai sót trong tương lai. Các cơ chế chính của Tcl có liên quan đến việc xử lý và thay thế chuỗi, giúp dễ dàng theo dõi hành động của trình thông dịch. Mô hình Tcl hơi khác so với các ngôn ngữ lập trình khác, bạn sẽ thấy khi đọc chương này. Chương 1: Tìm hiểu ngôn ngữ Tcl 57 Lệnh Tcl Tcl -■ là tên viết tắt của Ngôn ngữ lệnh công cụ. Các lệnh thực hiện nhiều hành động khác nhau, chẳng hạn như in một chuỗi, tính giá trị của biểu thức số học hoặc hiển thị các tiện ích trên màn hình. Trong Tcl, tất cả các hành động được biểu diễn dưới dạng lệnh, thậm chí gán giá trị cho các biến và xác định thủ tục. Để gọi các lệnh bằng ngôn ngữ Tcl, cấu trúc cú pháp khá đơn giản được cung cấp. Tất cả các hành động phức tạp đều được thực hiện bởi trình thông dịch, thực hiện các lệnh. Lệnh Tcl được viết dưới dạng sau: lệnh tham số1 tham số2 tham số3. . . Lệnh có thể là lệnh dựng sẵn Tcl hoặc một thủ tục. Tên lệnh được phân tách khỏi các tham số bằng một hoặc nhiều dấu cách hoặc tab; các ký hiệu giống nhau được sử dụng để phân tách các tham số. Ký tự cuối dòng hoặc dấu chấm phẩy kết thúc lệnh. Trong quá trình diễn giải, Tcl thực hiện việc nhóm (kết hợp nhiều từ thành một tham số) và thay thế (thay thế các biến và lệnh gọi thủ tục lồng nhau). Các hoạt động xử lý lệnh của trình thông dịch Tcl có thể được chia thành ba giai đoạn. Nhóm các tham số. Thay thế các lệnh, biến và ký tự lồng nhau trước dấu gạch chéo ngược. Gọi một lệnh. Giải thích các tham số bằng chính lệnh. (Vấn đề này sẽ được thảo luận sau trong chương này.) Xin chào Thế giới! Liệt kê 1.1. Chương trình "Xin chào thế giới!" đặt thiết bị xuất chuẩn (Xin chào, Thế giới => Hello, World! В данном примере команде puts передаются два параметра: идентификатор потока ввода-вывода и строка. Команда puts записывает строку в поток, добавляя символ новой строки. Данный простой пример демонстрирует две следующие особенности Tcl. Параметры интерпретируются командой. В данном случае поток ввода- вывода идентифицируется с помощью имени stdout. Данное имя потока используется puts и другими командами ввода-вывода. Имя stderr 58 Часть I. Основы Tcf определяет стандартный поток ошибок, а имя stdin - стандартный поток ввода. Обмен данными с файлами подробно рассматривается в главе 9. Фигурные скобки применяются для группировки нескольких слов в один параметр. В результате команда puts воспринимает слова Hello, World! как второй параметр. Скобки не являются частью значения. Фигурные скобки предназначены для предоставления дополнительной информации интерпретатору. Перед тем как значение будет передано команде, скобки удаляются. Посредством скобок группируются все символы, включая переводы строк и вложенные скобки. Группировка оканчивается при появлении закрывающей фигурной скобки. Для группировки в Tcl также могут использоваться двойные кавычки. Группировка будет более подробно рассмотрена далее в этой главе. Переменные Для присвоения значений переменной используется команда set. Этой команде передаются два параметра: имя переменной и значение. Имя переменной может быть любой длины; регистр символов учитывается. В составе имени допустимы любые символы. При написании Tcl-программ нет необходимости объявлять переменные перед их использованием. Интерпретатор создает переменную в тот момент, когда ей необходимо впервые присвоить значение. Для того чтобы обратиться к значению переменной, надо указать перед ее именем символ $, как показано в листинге 1.2. Листинг 1.2. Использование переменных Tcl set var 5 => 5 set b $var => 5 Вторая команда set, содержащаяся в листинге, присваивает переменной b значение переменной var. В данном примере вы впервые встречаетесь с под- Глава 1. Общие сведения о языке Tcl 59 становкой. Чтобы лучше понять, как выполняется вторая команда set, ее можно переписать, заменив $var значением переменной var: set b 5 В действительности подстановка осуществляется несколько другими, более эффективными способами, что очень важно в том случае, когда значением переменной является длинная строка. Подстановка команд Помимо подстановки переменных, в Tcl используется подстановка команд. Вложенные команды помещаются в квадратные скобки. Интерпретатор Tcl воспринимает любую последовательность символов, находящуюся между открывающей и закрывающей квадратной скобкой, как команду. В процессе интерпретации осуществляется замена выражения в квадратных скобках (включая сами скобки) результатом выполнения вложенной команды. Квадратные скобки выполняют те же функции, что и одинарные кавычки в некоторых оболочках, кроме того, такой подход позволяет работать с командами любого уровня вложенности. Листинг 1.3. Подстановка команд set len => 6 В листинге 1.3 приведенное ниже выражение представляет собой вложенную команду. string length foobar Данная команда возвращает длину строки "foobar". Команда string будет подробно описана в главе 4. При выполнении выражения в первую очередь выполняется вложенная команда. Затем осуществляется подстановка, в результате чего внешняя команда приобретает следующий вид: set len б Если в составе внешней команды находится несколько вложенных команд, интерпретатор обрабатывает их слева направо. Закрывающая скобка является признаком конца очередной команды. Встретив ее, интерпретатор выполняет команду. Это надо учитывать в тех случаях, когда результат одной команды может влиять на выполнение другой. 60 Часть I. Основы Tcl Математические выражения Сам по себе интерпретатор Tcl не вычисляет значения математических выражений. Он лишь выполняет группировку, подстановку и вызов команд. Для разбора и вычисления значений математических выражений используется команда expr. Листинг 1.4. Простое арифметическое выражение expr 7.2/4 => 1.8 Синтаксис выражений, передаваемых команде expr в качестве параметров, такой же, как и синтаксис выражений в языке С. Команда expr обрабатывает целые числа, числа с плавающей точкой и логические значения. Результатом выполнения логических операций является значение 0 (false) либо 1 (true). По необходимости целые числа преобразуются в значения с плавающей точкой. Восьмеричные числа начинаются с нуля (например, значение 033 равно целому числу 27). Шестнадцатеричные значения начинаются с символов Ох. В Tcl поддерживается представление чисел с плавающей точкой. Сведения о приоритете операций приведены в конце данной главы. В математических выражениях могут присутствовать ссылки на переменные и вложенные команды. В примере, приведенном в листинге 1.5, посредством команды expr выполняется сложение значения переменной х с числом, равным длине строки "f oobar". В результате подстановки команде expr передается 6 + 7 и при выполнении команды set переменной len присваивается значение 13. Листинг 1.5. Вложенные команды set x 7 set len + $x] => 13 Средства обработки выражений поддерживают ряд встроенных функций, применяемых при проведении математических вычислений. (Перечень таких функций приведен в конце данной главы.) В примере, показанном в листинге 1.6, вычисляется число pi. Листинг 1.6. Использование встроенных математических функций set pi => 3.1415926535897931 Глава 1. Общие сведения о языке Tcl 61 При реализации функции expr были приняты меры для обеспечения корректности значений и предотвращения нежелательных преобразований числовых значений в строковые. Разработчики программ, со своей стороны, могут повысить эффективность выполнения операции expr, применяя фигурные скобки для группировки выражений. Это связано с особенностями работы компилятора, преобразующего исходный текст в байтовый код. Более подробно данный вопрос будет рассмотрен далее в этой главе. Пример использования фигурных скобок для повышения быстродействия вычислений приведен в листинге 1.7. Все выражения, содержащиеся в этом листинге, составлены корректно. Листинг 1.7. Использование фигурных скобок для группировки выражений expr {7.2 / 4} set len + $x}] set pi Подстановка символов, представленных с помощью обратной косой черты Еще один тип подстановки, выполняемый интерпретатором Tcl, связан с использованием обратной косой черты. Таким способом в состав параметров можно включать символы, которые в обычных условиях имеют специальные значения. Предположим, например, что вы собираетесь использовать в составе параметра символ $ или какую-либо скобку. Перед таким символом надо указать обратную косую черту. Если для составления требуемого выражения вам надо использовать большое число символов обратной косой черты, следует помнить, что существует более простой способ, позволяющий получить тот же результат. В частности, команда list, которая будет описана в главе 5, автоматически отменяет специальные значения символов. В листинге 1.8 приведен пример использования обратной косой черты для получения литерального значения символа $. Листинг 1.8. Отмена специального значения символа с помощью обратной косой черты set dollar \$foo => $foo set x $dollar => $foo 62 Часть I. Основы Тс! Интерпретация выполняется в один проход. Вторая команда set в приведенном выше примере иллюстрирует важную особенность Tcl. Значение переменной dollar не испытывает на себе влияния операции подстановки. Другими словами, при подстановке разбор значений переменных не производится. В данном примере значением как переменной dollar, так и переменной х является строка "$f oo". Общее правило таково: при использовании eval нет необходимости заботиться о значениях переменных. Подробнее этот вопрос будет обсуждаться в главе 10. С помощью последовательностей знаков, начинающихся с обратной косой черты, можно записывать шестнадцатеричные, восьмеричные значения символов, а также представлять их в формате Unicode. set escape \u001b set escape \0xlb set escape \033 В каждом из этих выражений переменной escape присваивается символ ASCII ESC, код которого в десятичном представлении равен 27. Правила представления символов последовательностями, начинающимися с обратной косой черты, приведены в табл. 1.1. Часто символ обратной косой черты используется для записи длинной команды в нескольких строках. Как было сказано ранее, перевод строки завершает команду. В примере, представленном в листинге 1.9, обратная косая черта обязательно должна присутствовать, иначе последним символом в записи команды expr будет знак +. Листинг 1.9. Запись длинной команды в двух строках с использованием обратной косой черты set totalLength + \ ] Отменить специальное значение перевода строки можно двумя способами. Первый способ состоит в формировании параметра посредством группировки. В этом случае никаких действий для отмены специального значения перевода строки не требуется; соответствующий символ становится частью группы и не завершает команду. Второй способ - включить в конец строки обратную косую черту. В этом случае последний символ в строке преобразуется в пробел, а все пробелы в начале следующей строки удаляются. Другими словами, символ обратной косой черты не только позволяет продолжить команду в следующей строке, но и удаляет ненужные пробелы, включаемые в начало строки для форматирования. Глава 1. Общие сведения о языке Tcl 63 Группировка с помощью фигурных скобок и двойных кавычек Двойные кавычки и фигурные скобки используются для группировки нескольких слов в один параметр. Различие между ними состоит в том, что кавычки допускают подстановку в группе, а фигурные скобки запрещают ее. Это правило действует по отношению к командам, переменным и последовательностям, начинающимся с обратной косой черты. Листинг 1.10. Группировка с помощью двойных кавычек и фигурных скобок set s Hello => Hello puts stdout "The length of $s is ." => The length of Hello is 5. puts stdout {The length of $s is .} => The length of $s is . При выполнении второй команды, приведенной в данном примере, интерпретатор Tcl, обрабатывая второй параметр puts, выполняет подстановку как значения переменной, так и команды. В третьей команде подстановка запрещена, поэтому строка выводится в том виде, в котором она указана в записи параметра. На практике группировка с помощью фигурных скобок в основном выполняется тогда, когда подстановка параметра должна быть отложена на более позднее время либо вовсе не должна выполняться. В качестве примеров можно привести циклы, условные выражения и объявления процедур. Двойные кавычки чаще всего применяются в командах, подобных puts. Кавычки также часто используются в команде format. Эта команда выполняет те же функции, что и функция printf в языке С. Первый параметр команды format определяет формат вывода. В нем часто присутствуют специальные символы, например перевод строки, знаки табуляции и пробелы. Проще всего указать эти символы с помощью последовательностей, начинающихся с обратной косой черты (например, перевод строки можно представить как \п, а знак табуляции - как \t). Перед выполнением команды format последовательности, начинающиеся с обратной косой черты, должны быть преобразованы, поэтому для формирования параметра, определяющего формат, целесообразно использовать двойные кавычки. puts В данном случае команда format используется для выравнивания при выводе значений переменных name и value с помощью символа табуляции. 64 Часть I. Основы Tcl Выражения °/es и e/e5.3f задают формат вывода остальных параметров команды. Заметьте, что символ \п, обычно указываемый при вызове команды printf языка С, здесь отсутствует. Он не нужен, так как команда puts сама добавляет символ перевода строки. Подробно команда format будет описана в главе 4. Особенности использования квадратных скобок Квадратные скобки используются для подстановки команд и не выполняют группировку. Вместо этого вложенная команда, определяемая с помощью квадратных скобок, рассматривается как часть текущей группы. В приведенной ниже команде двойные кавычки формируют последний параметр, выполняя группировки, а результаты выполнения вложенной команды включаются в группу. puts stdout "The length of $s is ." Если в состав параметра входит только вложенная команда, вам нет необходимости группировать элементы с помощью двойных кавычек, поскольку средства разбора Tcl рассматривают вложенную команду как единое целое. puts stdout В приведенном ниже выражении кавычки излишни. puts stdout " " Группировка перед подстановкой Интерпретатор Tcl выполняет разбор команды за один проход. В течение единственного прохода он принимает решение о группировке и подстановке. Группировка осуществляется перед подстановкой. Эту особенность интерпретатора Tcl необходимо иметь в виду при написании программ. Значения, полученные в результате подстановки, не влияют на группировку, так как решение о группировке было принято ранее. Приведенный ниже пример демонстрирует влияние"вложенных команд на группировку. Вложенная команда рассматривается как неразрывная последовательность символов, причем внутренняя структура этих символов не учитывается. При формировании параметров основной команды результаты подстановки включаются в текущую группу символов. Листинг 1.11. Вложенная команда и подстановка переменных set х 7; set у 9 puts stdout $x+$y= => 7+9=16 Глава 1. Общие сведения о языке Tcl 65 В листинге 1.11 второй параметр команды puts имеет следующий вид: $х+$у= Пробелы в составе вложенной команды при группировке игнорируются. В тот момент, когда интерпретатор Tcl встречает левую квадратную скобку, подстановка некоторых переменных уже выполнена и сформирована следующая строка: 7+9= При появлении левой квадратной скобки осуществляется рекурсивный вызов интерпретатора для выполнения вложенной команды. Перед выполнением ехрr подстановка переменных $х и $у уже выполнена. Результат выполнения команды ехрr включается вместо всей последовательности символов, находящихся между левой и правой квадратной скобкой. Поэтому команда puts получает в качестве второго параметра следующее значение: 7+9=16 Группировка, выполняется перед подстановкой В рассмотренном выше примере при обработке второго параметра команды puts решение о группировке принимается перед решением о подстановке. Даже если результат выполнения вложенной команды содержит пробелы или другие специальные символы, аргумент будет передан команде без учета специальных значений. Группировка и подстановка переменных соотносятся между собой так же, как группировка и подстановка команд. Пробелы или другие специальные символы в составе значений переменных не оказывают влияние на решение о группировке, так как это решение принимается еще тогда, когда значения переменных недоступны. Если вы хотите, чтобы при выводе результатов выполнения команды символы + и = были отделены от чисел пробелами, вам надо явным образом сгруппировать параметр, используя двойные кавычки. При этом команда puts примет следующий вид: puts stdout "$х + $у = " В данном случае для группировки используются кавычки. Это важно, так как в составе группы должна быть разрешена подстановка значений переменных и команды. Группировка математических выражений с помощью фигурных скобок Команда expr выполняет некоторые действия по подстановке внутри фигурных скобок. Более подробно этот вопрос будет рассмотрен далее в этой 66 Часть I. Основы Tcl главе. Таким образом, оказывается, что в приведенной ниже команде выполняется подстановка значений переменных в выражении, помещенном в фигурные скобки. puts stdout "$x + $у = " Примеры подстановки Если в составе команды присутствует несколько подстановок, не разделенных пробелами или знаками табуляции, группировка выполняется по умолчанию. Использовать двойные кавычки в этом случае не обязательно. В приведенной ниже команде осуществляется конкатенация значений переменных а, b и с. set concat $a$b$c Если же вам необходимо разделить значения переменных пробелами, необходимо использовать кавычки. set concat "$а $b $с" В общем случае команды, помещенные в квадратные скобки, и ссылки на переменные можно указывать в любой позиции строки. В приведенном ниже примере имя команды определяется в результате выполнения другой команды. параметр параметр При работе с Тк имя компонента часто используется как имя команды. $text insert end "Hello, World!" Процедуры Для определения процедур в Tcl используется команда ргос. Единожды определенная Tcl-процедура может быть использована многократно, причем вызывается она точно так же, как и встроенная команда Tcl. Определение процедуры осуществляется с помощью следующего выражения: ргос имя список_параметров тело_процедуры Первый параметр - это имя определяемой процедуры. В качестве второго параметра команды задается список параметров процедуры. Третий параметр - тело процедуры, включающее одну или несколько Тс1-команд. В имени процедуры могут содержаться практически любые символы; регистр символов учитывается. В данной книге принято соглашение об именовании, согласно которому имена процедур начинаются с символа верхнего Глава 1. Общие сведения о языке Тс! 67 регистра, а имена переменных - с символа нижнего регистра. По мере развития Tcl все большее значение приобретает стиль программирования. Этому вопросу посвящена глава 12. Листинг 1.12. Определение процедуры proc Diag {а Ъ} { set с return $c } puts "The diagonal of a 3, 4 right triangle is " => The diagonal of a 3, 4 right triangle is 5.0 Процедура Diag, определенная в данном примере, вычисляет длину гипотенузы прямоугольного треугольника. В качестве параметров процедуре передаются длины катетов. Функция sqrt - одна из функций, поддерживаемых командой expr. Переменная с - это локальная переменная процедуры; она существует только при выполнении Diag. Области видимости переменных будут обсуждаться в главе 7. Переменная с в данном примере не обязательна; при необходимости можно было бы составить код процедуры, не используя переменных. В этом случае процедура выглядела бы следующим образом: proc Diag {a b} { return } Команда return возвращает результаты выполнения процедуры. В данном случае она не обязательна, так как интерпретатор Tcl по умолчанию возвращает значение пос!}


Bài viết này nhằm giới thiệu nhanh những kiến ​​​​thức cơ bản về ngôn ngữ TCL, đối với tôi, ngôn ngữ này đã trở thành ngôn ngữ công nghiệp đầu tiên được nghiên cứu độc lập theo cùng một sơ đồ (dưới dạng bài học trên trang web) mà độc giả của chúng tôi sẽ sử dụng. Trước khi chuyển sang bài học, chúng ta hãy tìm hiểu xem đây là loại ngôn ngữ nào.
ngôn ngữ tcl
Tcl (từ Ngôn ngữ lệnh công cụ tiếng Anh - “ngôn ngữ lệnh công cụ”, đọc “tikl” hoặc “ti-si-el”) là ngôn ngữ kịch bản cấp cao.
Tcl thường được sử dụng kết hợp với thư viện đồ họa Tk (Tool Kit). Gói Tcl/Tk trong tiếng Nga đôi khi được gọi là “Tak-tikl” (phiên bản tiếng Anh là “tikl-tok”).
Các lĩnh vực ứng dụng của ngôn ngữ này là tạo nguyên mẫu nhanh, tạo giao diện đồ họa cho các chương trình điều khiển (gói phần mềm), tích hợp vào các chương trình ứng dụng, thử nghiệm. Tcl cũng được sử dụng trong phát triển web.

Một ít lịch sử Ngôn ngữ này được phát triển bởi John Ousterhout khi ông đang làm việc tại Đại học California ở Berkeley. Mục tiêu ban đầu là tạo ra một ngôn ngữ phổ quát để nhúng vào các ứng dụng bảng điều khiển. Sau đó, Ousterhout đã mở rộng ngôn ngữ của mình bằng các công cụ tạo giao diện đồ họa - đây là cách Tcl/Tk xuất hiện.
Trải qua 4 năm phát triển trong các bức tường đại học, cộng đồng Tikl đã phát triển lên tới hàng trăm nghìn lập trình viên. Năm 1993, phần mở rộng hướng đối tượng đầu tiên, incr Tcl, được phát triển.
Năm 1994, Ousterhout trở thành kỹ sư trưởng của dự án SunScript. Trong 4 năm tiếp theo, khi trở thành một trong những dự án của Sun Corporation, Tikl không chỉ là một hệ thống phân phối tự do mà còn được cải thiện đáng kể và trở thành đa nền tảng.
Richard Stallman đã giáng một đòn mạnh vào sự phổ biến của ngôn ngữ này khi ông đưa ra khuyến nghị trên một số nhóm tin tức vào tháng 9 năm 1994, “Tại sao bạn không nên sử dụng Tcl.” Trong đó, ông dựa trên những tuyên bố rằng “Tcl không được thiết kế như một ngôn ngữ lập trình nghiêm túc” và “Tcl có cú pháp đặc biệt thu hút tin tặc vì tính đơn giản của nó. Nhưng cú pháp Tcl có vẻ lạ đối với hầu hết người dùng.", Và cũng liên quan đến việc quảng bá Emacs, Lisp đã đưa ra phán quyết: "Dự án GNU sẽ không sử dụng Tcl trong phần mềm GNU." Ngoài những phàn nàn chủ quan về thiết kế ngôn ngữ, Stallman còn chỉ ra một nhược điểm khách quan lúc bấy giờ - hiệu năng thấp.
Tuy nhiên, mức tăng trưởng về số lượng nhà phát triển tích cực sử dụng tikl trong giai đoạn này lên tới 600%.
Năm 1998, do sự bùng nổ của Java và sự cạnh tranh khốc liệt gắn liền với nó, tập đoàn không còn quan tâm đến cù lét nữa. John Ousterhout rời Sun và tạo ra Scriptics (với sự hỗ trợ của Sun), tiếp tục phát triển công nghệ Tcl/Tk. Đó là một trong những công ty phần mềm thương mại đầu tiên có hoạt động được xây dựng xung quanh phần mềm miễn phí.
Cách phối màu của logo được áp dụng vào những năm 90. Thế kỷ XX
Vào tháng 3 năm 1998, Ousterhout đã viết bài báo kinh điển “Kịch bản: Lập trình cấp cao cho thế kỷ 21”, trong đó ông gọi ngôn ngữ kịch bản là ngôn ngữ tích hợp hệ thống vì chúng tập trung chủ yếu vào làm việc với các đối tượng trong môi trường điều hành, hơn là với dữ liệu cơ bản. Điều này cho phép bạn “gắn” các đối tượng như vậy thành một mà không cần viết hàng nghìn dòng mã bằng hai hoặc ba lệnh.
Cùng năm đó, anh đã giành được hai giải thưởng lớn cho việc phát triển ngôn ngữ Tcl. Đầu tiên là Giải thưởng Hệ thống Phần mềm ACM, được trao cho "phần mềm quan trọng nhất". Giải thưởng này trước đây đã công nhận các hệ thống nền tảng như ngăn xếp giao thức TCP/IP, bảng tính đầu tiên, cơ sở dữ liệu quan hệ đầu tiên, World Wide Web, Unix, PostScript và Smalltalk. Thứ hai là Giải thưởng Nhóm người dùng công cụ phần mềm USENIX (STUG) hàng năm, công nhận phần mềm xuất sắc.
Năm 1999, Tcl 8.0 được phát hành - lần đầu tiên việc triển khai này đưa việc biên dịch thành mã byte, giúp tăng hiệu suất lên 6 lần. Bản sửa đổi tiếp theo, Tcl 8.1, đã giới thiệu hỗ trợ đầy đủ cho Unicode và lần đầu tiên giới thiệu tính năng đa luồng. Về bản phát hành này, Ousterhout cho biết: “Nhìn chung, 8.1 chuyển Tcl sang một danh mục mới vì giờ đây nó có thể được sử dụng cho các ứng dụng máy chủ. C, C++ và Java vẫn có thể được sử dụng để tạo các phần quan trọng về hiệu năng của ứng dụng và Tcl vẫn có thể được sử dụng để tích hợp và tạo các thành phần giao diện người dùng.”
Năm 2000, Scriptics được đổi tên thành Ajuba Solutions và sau đó được mua lại bởi Inter Dệt, công ty không quan tâm đến việc làm việc với phần mềm miễn phí. Do đó, việc phát triển Tcl đã được chuyển giao cho cộng đồng lập trình. Đây là cách Nhóm cốt lõi Tcl được thành lập.
Tại Hội nghị Tcl/Tk lần thứ 9, được tổ chức tại Vancouver, hệ thống tệp ảo StarKit đã được giới thiệu, cung cấp một cách thức mới, thân thiện với người dùng để phân phối các chương trình Tcl.
(Tài liệu này được lấy từ Wikipedia yêu thích của mọi người: https://ru.wikipedia.org/wiki/Tcl)

Và bây giờ là một chút ý kiến ​​​​cá nhân của tôi. Như vậy, ngôn ngữ Tcl là một ngôn ngữ lập trình xuất sắc có rất nhiều thư viện (số lượng “pin” của nó là một trong những ngôn ngữ lớn nhất hiện nay), đã đứng vững trước thử thách của thời gian (tức là nó không còn mắc các bệnh thời thơ ấu, như tương tự). Go), và hơn nữa - nó thực sự dễ học. Bạn có thể thành thạo nó trong một vài ngày! Đồng thời, ngôn ngữ này sẽ hữu ích cho cả người quản trị hệ thống (các tập lệnh được viết rất thuận tiện) và người lập trình.

TCL: lý do phổ biến thấpĐể bắt đầu, tôi sẽ làm khó chịu những người đang sùi bọt mép và hét lên rằng “Tcl không cần thiết” hoặc “Tcl chết rồi”. Để bác bỏ điều sau, hãy xem ngày phát hành phiên bản mới nhất của trình thông dịch Tcl/Tk.
Về điều đầu tiên - AOL, BMW sẽ không sử dụng ngôn ngữ không cần thiết, CPU sẽ không trao Giải thưởng Hệ thống Phần mềm ACM cho việc tạo ra nó. Hiện tại, việc phát triển Tcl/Tk chủ yếu được thực hiện ở các công ty viết phần mềm bằng ngôn ngữ này để sử dụng nội bộ. Do đó, nói về sự không phổ biến của Tcl/Tk, chúng ta chủ yếu nói về sự không phổ biến của nó đối với các nhà phát triển ứng dụng người dùng máy tính để bàn.
Lập luận tiếp theo được đưa ra vì sự không phổ biến của Tcl/Tk là hình thức tiêu chuẩn của một bộ vật dụng không đẹp, chẳng hạn - ứng dụng khách tkabber jabber được đưa ra. Điều đáng chú ý về tuyên bố này - tập hợp các vật dụng tiêu chuẩn có các giá trị thuộc tính mặc định tương ứng với Motiff có râu, có vẻ ngoài thực sự hơi lỗi thời.
Nhưng tại sao lại sử dụng giá trị mặc định? Một nhà phát triển Tcl/Tk có kinh nghiệm có thể tạo ra một giao diện không thua kém gì về hình thức so với hầu hết các ứng dụng.
Hơn nữa, ngày nay Tk hỗ trợ “chủ đề” và có thể thích ứng bên ngoài với giao diện của môi trường đồ họa của hệ điều hành, điều này làm cho các chương trình Tcl/Tk không thể phân biệt được với các chương trình tương tự của chúng hoàn toàn ở bên ngoài.
Một bất lợi đáng kể đối với nhiều nhóm phát triển phần mềm thương mại là các chương trình bằng ngôn ngữ đó vẫn được phân phối ở dạng mã nguồn mà không được dịch trước sang mã byte, tức là. phần mềm viết bằng Tcl/Tk là nguồn mở. Và hầu hết các nhà phát triển phần mềm thương mại đều tránh điều này.
Trong số các nhà phát triển phần mềm nguồn mở và miễn phí, mức độ phổ biến của Tcl đã giảm đi nhờ FSF và đặc biệt là Richard Stallman. Vào tháng 9 năm 1994, RMS vĩnh viễn đánh chìm các ý tưởng hữu ích của Tcl/Tk với khuyến nghị "Tại sao bạn không nên sử dụng Tcl", tập trung vào cú pháp được cho là phức tạp đến mức không thể tưởng tượng được của Tcl (được coi là một ngôn ngữ phản biện với cú pháp nặng hơn nhiều nhưng ngữ nghĩa rõ ràng, - Lisp) và về “sự đơn giản của Tcl khiến hacker mê mẩn”. Không nắm bắt được các ý tưởng cốt lõi của Tickle về "khả năng mở rộng" và "khả năng mở rộng", RMS giáng đòn cuối cùng bằng cách lập luận rằng Tcl chỉ phù hợp với các ứng dụng nhỏ và đưa ra phán quyết: "Vì vậy, Dự án GNU không có ý định sử dụng Tcl trong GNU phần mềm." Điều này đặc biệt kỳ lạ vì thực tế là Lisp và Tcl có các tính năng và ý tưởng chung, đặc biệt là khả năng mở rộng giống nhau. Bất chấp mọi nỗ lực của Stallman, Tcl không bao giờ chìm nghỉm, và Lisp không thể chiếm được vị trí dẫn đầu trong số các ngôn ngữ phát triển ứng dụng máy tính để bàn.
Như một người tò mò nhận thấy, không có một lý do khách quan nào để không nghiên cứu và sử dụng Tcl. Trước khi chuyển sang bài học, chúng ta cũng hãy điểm qua những câu hỏi thường gặp nhất về ngôn ngữ này.

Câu hỏi thường gặpCâu hỏi (B): Tcl là gì?
Trả lời (O): Tcl là một ngôn ngữ kịch bản cấp cao. Nó được coi là một trong ba ngôn ngữ kịch bản cổ điển. Trước sự ra đời của PHP, nó đã được sử dụng thay vì cái sau. Nó được kết nối rất chặt chẽ với bộ công cụ Tk, cho phép bạn viết các chương trình khá chức năng với GUI trong thời gian ngắn.
TRONG: Tại sao phải học Tcl khi bạn có thể sử dụng bất kỳ ngôn ngữ kịch bản nào gắn liền với Tk?
VỀ: Có thể. Nhưng tốt hơn hết bạn nên sử dụng bất kỳ bộ công cụ nào trong môi trường “gốc” của nó (mã trông có vẻ tự nhiên hơn). Và các chương trình trong Tcl/Tk thuần túy hoạt động nhanh hơn so với sử dụng cầu nối cho Ruby/Tk, Perl/Tk, v.v., vì chúng kéo theo cả hai môi trường thực thi cùng với chúng. Tính di động của các chương trình và tập lệnh cũng bị ảnh hưởng bởi điều này - để chạy tệp, bạn sẽ cần môi trường được cài đặt không chỉ của ngôn ngữ tập lệnh mà chương trình được viết mà còn cả Tcl/Tk (cái đầu tiên cần chính xác như một “cầu nối”). ”).
TRONG: Nhưng có Lisp!
VỀ: Vâng, đúng vậy. Và một số lập trình viên so sánh Tcl với nó. Họ thậm chí còn gọi nó là "Tcl - Lisp On Drugs". Các ngôn ngữ thực sự giống nhau - làm việc với danh sách, siêu lập trình. Nhưng cũng có những khác biệt nghiêm trọng. Ví dụ: trong Tcl mọi thứ đều là một chuỗi chứ không phải ký tự.
TRONG: Tôi có thể viết bằng Tcl một cách chức năng không?
VỀ: Bạn có thể. Tcl cho phép bạn viết theo phong cách chức năng.
TRONG: Tcl/Tk hỗ trợ những mô hình nào?
VỀ: Bắt buộc, chức năng, hướng đối tượng. Chức năng này đã được hỗ trợ rất tốt kể từ phiên bản 8.6 và đệ quy đuôi cuối cùng đã được triển khai chính xác. Cái sau đã được hỗ trợ trong một thời gian dài, một trong những phần mở rộng OOP nổi tiếng nhất, XOTcl, triển khai lập trình hướng đối tượng theo phong cách Smalltalk... Gần đây, tôi đã đi đến kết luận rằng Tcl đã là một ngôn ngữ có cách triển khai ( dù chỉ một phần) của tất cả các mô hình cùng một lúc.
TRONG: Nơi để bắt đầu?
VỀ:Để bắt đầu, bạn có thể đọc bài viết này và theo dõi các bản cập nhật =)
TRONG: Triển khai Tcl/Tk là gì?
VỀ: Như vậy, Tcl/Tk là một, việc phát triển nó ngày nay được thực hiện bởi Nhóm cốt lõi Tcl, nhưng cũng có các phần mở rộng cho nó: triển khai tiêu chuẩn của Tcl, XOTcl:exotic (phần mở rộng cho OOP), iTcl (Phần mở rộng OOP đầu tiên, Inct Tcl, iWidgets được viết trên đó), SNIT (object keo cho Tcl, có trong thư viện Tcl tiêu chuẩn), STOOOP (phần mở rộng OOP viết bằng Tcl, cũng có trong thư viện tiêu chuẩn ngày nay)
TRONG:"các tổ hợp" là gì?
VỀ: Có mã nguồn chính thức mà bất kỳ ai cũng có thể tải xuống từ trang web chính thức và tự lắp ráp. Ngoài ra còn có các bản phân phối từ các nhóm bên thứ ba: ActiveState Tcl (độc quyền, có phiên bản trả phí, cho tất cả các hệ điều hành chính), WinTcl (nhỏ gọn hơn, tập trung vào làm việc với XOTcl, chứa Tloona và XOTcllde, như tên của nó - dành cho Win ), TclKit (là một bản phân phối nhỏ gọn tập trung vào việc sử dụng iTcl, nó được tập hợp thành một gói và có hệ thống quản lý nội dung của riêng nó, đa nền tảng), dqkit ("TclKit trên steroid, có một số tùy chọn lắp ráp, chéo ), Tcl/Tk Aqua (bản phân phối được thiết kế dành riêng cho MacOS Gần đây, triển khai Tcl cho .Net đã xuất hiện - Eagle.
TRONG: Tôi nên lấy IDE nào?
VỀ: Vim, Emacs là những trình soạn thảo có khả năng tùy chỉnh tuyệt vời, có thể mở rộng thành một IDE chính thức. Nhược điểm của cái sau là hỗ trợ cú pháp kém cho các phiên bản Tcl mới nhất. (g) Vim hỗ trợ hoàn hảo cú pháp của các phiên bản mới nhất mà không cần cài đặt bổ sung. Dành cho Windows - ActiveState Komodo. Tloona - IDE cho Tcl/Tk viết bằng Tcl/Tk.<Требуется подробное описание>. XOTcllde - IDE làm Trình duyệt lớp cho Smalltalk. Tập trung làm việc với XOTcl. Visual Tcl/Tk (vtcl) là môi trường phát triển mạnh mẽ tương tự Delphi hay QtCreator với khả năng chỉnh sửa mã.
TRONG: Bạn có thể đọc văn học gì?
VỀ: Có khá nhiều bài hướng dẫn bằng tiếng Anh về Tcl/Tk. Người Nga chỉ tìm thấy một (ông chỉ ra). Từ những cuốn sách, tôi có thể giới thiệu “Lập trình thực tế trong Tcl và Tk, Phiên bản thứ 4” (B.B. Welsh, K. Jones, D. Hobbs), bằng tiếng Anh - “Lập trình Tcl và Tk cho người mới bắt đầu tuyệt đối” (Kurt Wall) .

Cài đặt TclĐể bắt đầu lập trình trong Tcl, bạn cần cài đặt một máy ảo để xử lý mã bạn viết. Hãy xem cách cài đặt nó:
0) Đối với Tính toán Linux/Gentoo: Xuất hiện dev-lang/tcl, Xuất hiện dev-lang/tk, Xuất hiện dev-tcltk/tcllib
1) Đối với Fedora: yum cài đặt tcl tk
2) Đối với Ubuntu: sudo apt-get cài đặt tcl tk
3) Đối với Windows và MacOS: cách dễ nhất là sử dụng phân phối nhị phân. Tải xuống bất kỳ cái nào và cài đặt nó trong hai cú nhấp chuột.
4) Xây dựng Tcl/Tk từ các nguồn. Tải xuống các nguồn (được đặt riêng cho Tcl và riêng cho Tk) từ trang web chính thức và chạy các lệnh sau cho mỗi kho lưu trữ: 4.1 Giải nén tệp nguồn: $ tar zxf file_name.tar.gz
4.2 Chuyển đến thư mục bằng lệnh: $ cd file_name && cd unix
4.3. Thực thi: $ ./configure --prefix=/opt --enable-gcc
(đối với Tk: $ ./configure —with-tcl=../../tcl8.5a5/unix —prefix=/opt —enable-gcc)
4.4 Thì: kiếm $
4.5. Sau đó: $ làm bài kiểm tra
4.6. Và cuối cùng: $ make install
Để bắt đầu môi trường tương tác, hãy nhập vào terminal:
$tclsh
Biểu tượng % sẽ xuất hiện.

Chương trình đầu tiên
Hãy viết chương trình "Xin chào" cổ điển trong Tcl. Nhập mã sau:

đặt "Xin chào, lời nói!"
như một phản hồi bạn sẽ thấy:

Xin chào các từ!
Chúc mừng! Bạn đã viết chương trình đầu tiên của mình bằng Tcl. Đơn giản phải không? Hãy tập trung vào lệnh đặt. Lệnh/chức năng này xuất văn bản tới bất kỳ thiết bị đầu vào/đầu ra tiêu chuẩn nào (trong trường hợp của chúng tôi là thiết bị đầu cuối). Theo mặc định, sau khi in văn bản, put sẽ di chuyển con trỏ đến đầu dòng tiếp theo.

Tôi lưu ý rằng trong bài học này một số từ được hiển thị; vì mục đích này chúng được đặt trong dấu ngoặc kép ("..."). Trong các ví dụ đơn giản của hướng dẫn này, dấu ngoặc kép và dấu ngoặc nhọn hoạt động theo cách tương tự. Nhưng trên thực tế, có sự khác biệt lớn giữa chúng, nhưng chúng ta sẽ nói về điều này sau.

Lệnh đặt về cơ bản là một hàm, bởi vì một yếu tố nhất định của ngôn ngữ không chỉ thực hiện bất kỳ hành động nào mà còn nhận từ một đến vô số đối số (tương tự gần nhất là các hàm trong toán học). Nếu chuỗi chúng ta đang in ra màn hình không được đặt trong dấu ngoặc kép hoặc dấu ngoặc nhọn, trình thông dịch Tcl sẽ coi mỗi từ là một đối số riêng biệt và chuyển nó riêng biệt cho lệnh put. Hàm đặt sẽ giả sử có nhiều đối số và sẽ trả về một số gấp trong hầu hết các trường hợp.

Về cốt lõi, dòng lệnh Tcl chỉ là một danh sách các từ. Nó được xử lý theo nguyên tắc sau:
1. Từ đầu tiên chính là lệnh (chức năng) phải được thực thi.
2. Tất cả các từ sau đây là đối số hoặc tham số của hàm.
Lưu ý rằng, không giống như hầu hết các ngôn ngữ, trong Tcl dòng lệnh kết thúc ở cuối dòng, tức là. ký tự dòng mới hoặc dấu chấm phẩy (;). Nhưng phương pháp cuối cùng không tốt lắm, nó sẽ làm giảm khả năng hiểu mã của bạn.

simpol novostroki là gì? Đây là một ký tự vô hình mà máy tính của bạn thay thế vào mã nguồn chương trình khi bạn nhấn phím Enter. Trong các ngôn ngữ như Pure C, nó được ký hiệu là "\n".

Vì các chương trình có thể khá dài nên việc để lại nhận xét về nó trong mã nguồn là một hình thức tốt và hữu ích (một số cách giải thích về chức năng của đoạn mã này hoặc đoạn mã kia trong chương trình của bạn).

Puppy là một bản phân phối nhỏ nhưng cung cấp nhiều lựa chọn về ngôn ngữ lập trình. Theo mặc định, Live-CD không cài đặt bất cứ thứ gì để biên dịch chương trình C hoặc C++, tuy nhiên, có một tệp bổ sung devx_xxx.sfs (trong đó xxx là số phiên bản Puppy, ví dụ: 210) biến Puppy thành môi trường biên dịch C/hoàn toàn .C++ (cũng cộng với trình biên dịch FreeBASIC). Ngay cả khi không có tệp devx_xxx.sfs, Live-CD vẫn chứa nhiều ngôn ngữ, bao gồm xử lý tập lệnh Ash/Bash, Tcl/Tk và PuppyBasic. Trang này được dành riêng để cung cấp thông tin tổng quan về các khả năng phần mềm của Puppy...

Tập lệnh Ash/Bash

Một ngôn ngữ đã hoàn toàn sẵn sàng để sử dụng trong Puppy là script vỏ bọc(kịch bản lệnh shell). Tập lệnh shell Unix/Linux đã tồn tại từ thời xa xưa và sẽ tiếp tục tồn tại lâu dài. Khi nói "shell lệnh", ý tôi là giao diện người dùng bạn sử dụng khi làm việc với dòng lệnh. Khi bạn đang chạy X (một shell cửa sổ đồ họa), dấu nhắc lệnh nằm trong cửa sổ terminal; khi bạn rời khỏi X, bạn sẽ quay lại dấu nhắc lệnh.

Chương trình chạy và tương tác với bạn được gọi là command-shell, trong Linux thường là Bash shell. Trong Puppy bạn có thể lựa chọn giữa hai shell, Bash và Ash.

Lưu ý rằng X trong cửa sổ terminal sẽ khởi chạy Bash. Nếu bạn thoát X đến dòng lệnh, Ash sẽ bắt đầu. Để xác định duy nhất shell mà bạn muốn làm việc, bạn nên đặt "#!/bin/bash" hoặc "#!/bin/sh" (hoặc "#!/bin/ash") trên dòng đầu tiên của tập lệnh.

Tập lệnh shell là một chương trình thực, chỉ có điều nó được lưu trữ trong tệp văn bản và không cần biên dịch. Các tập lệnh có thể rất phức tạp và Puppy có rất nhiều tập lệnh như vậy.

Trang này không phải là hướng dẫn phát triển tập lệnh Ash/Bash - có rất nhiều sách về chủ đề này cũng như các liên kết trên Internet. Bạn có thể tìm thấy một số liên kết như vậy ở đây: "Hướng dẫn viết kịch bản Bash nâng cao", "Lập trình Bash --- Giới thiệu HOWTO".

Tất cả những gì bạn cần để viết tập lệnh Ash/Bash là một trình soạn thảo văn bản, Puppy có hai trình soạn thảo bảng điều khiển, e2nghị sĩ và hai trình soạn thảo GUI, GeanyTờ rơi. Geany và MP rất thú vị vì chúng có thể làm nổi bật cú pháp của tập lệnh Ash/Bash. (xem thêm ML bên dưới trong phần Tcl/Tk)

Chúc bạn vui vẻ khi thiết kế các kịch bản cho Puppy!

Puppy có rất nhiều tài liệu và công cụ giúp bạn phát triển tập lệnh:

    vỏ gtk- một giải pháp thay thế GTK rất linh hoạt, đơn giản và nhỏ gọn cho xmessage và Xdialog trước đó. Có thể hiển thị/chỉnh sửa tệp, hiển thị hộp thoại chọn tệp, chấp nhận văn bản tùy chỉnh, làm việc với các nút chọn. Không có tài liệu. Để được trợ giúp, chỉ cần gõ (trong bảng điều khiển) # gtk-shell -h .

    gtkdialog3- một lựa chọn thay thế khác cho gtk-shell, xmessage và Xdialog. gtkdialog là một ứng dụng GTK2 đọc tệp XML mô tả định dạng hộp thoại và tương tác của người dùng, đồng thời có thể được sử dụng để tạo các GUI (giao diện đồ họa người dùng) cực kỳ phức tạp. Chương trình này lần đầu tiên được giới thiệu trong Puppy 0.9.7. Tôi nghĩ gtkdialog là lựa chọn của chi nhánh!

Hiện tại có hai phiên bản gtkdialog trong Puppy, gtkdialog2 và gtkdialog3 - tốt hơn là nên sử dụng phiên bản mới nhất vì nó có thể là phiên bản duy nhất còn lại trong Puppy - nói cách khác, luôn chạy tệp nhị phân gtkdialog3.

Dưới đây là một số tập lệnh được sử dụng trong Puppy:

/usr/sbin/pmount /usr/sbin/bộ múi giờ

Tcl/Tk

Tcl là một ngôn ngữ kịch bản được diễn giải tương tự như các tập lệnh Ash được mô tả ở trên và chương trình Tcl có thể dễ dàng được sử dụng như một tập lệnh shell. Tuy nhiên, nơi Tcl thực sự nổi bật là thư viện Tk, thư viện này biến Tcl thành môi trường phần mềm GUI (giao diện người dùng đồ họa) chính thức. Có rất nhiều thư viện bổ sung cho Tcl, hiện nay Puppy đã có

    Tk(thư viện chuẩn cung cấp tất cả các vật dụng cơ bản),

    hình ảnh(Tcl/Tk chỉ hoạt động với các tệp gif, thư viện này bổ sung thêm hoạt động với jpeg, png, v.v.),

    Hộp tổ hợp(phần tử phức tạp với danh sách thả xuống),

    Tiện ích(một số điều khiển phức tạp hơn).

Bạn sẽ tìm thấy tất cả những thứ này trong thư mục /usr/lib.

Nhiều ứng dụng trong Puppy (cũng như trong gói PET) được viết bằng Tcl/Tk, đây là Vẽ slide, TkZip, CDTAR, XS, cú giật, tkpppoe, phv, TkDVDngười xem biểu thức chính quy.

Vậy tại sao lại là Tcl? Tại sao không phải là Perl hay Java? Đối với cá nhân tôi, có ba lý do: có sẵn một số lượng lớn các ứng dụng GUI, Tcl/Tk có kích thước thực sự nhỏ và nó là ngôn ngữ rất dễ học. Lý do cuối cùng cực kỳ quan trọng, vì nhờ nó mà tôi có thể dễ dàng đọc được code do người khác viết, điều này không thể nói đến với các ngôn ngữ dựa trên cú pháp C có code khó hiểu (C++, Java).