Tcl 9.0 रिलीज़
(tcl-lang.org)- Tcl/Tk 9.0 Tcl और Tk का नवीनतम major release है, जो नए फीचर्स और Tcl/Tk 8 की तुलना में कुछ incompatibilities साथ लाता है
- नवीनतम release designation Tcl/Tk 9.0.4 है और इसकी तारीख 26 जून 2026 है
- Tcl, 2GB से बड़े data values को संभालने के लिए 64-bit capacity देता है, और strings उपलब्ध memory की सीमा के भीतर मनचाही लंबाई की हो सकती हैं तथा lists और dictionaries में बहुत बड़ी संख्या में elements हो सकते हैं
- text processing में पूरा Unicode codepoint range,
utf-16·utf-32·ucs-2परिवार औरCESU-8जैसी नई encodings, I/O encoding को नियंत्रित करने के लिएencodingprofiles, औरsourceके लिए default-encoding utf-8शामिल हैं - Tcl,
zipfsके जरिए zip files को filesystem की तरह mount कर सकता है, और executable या library से जुड़े filesystem archive के साथ starkit-style application deployment को support करता है - Unix event handling engine, उपलब्ध होने पर epoll या kqueue आधारित रूप में कॉन्फ़िगर होता है, और जिन platforms पर ये system calls नहीं हैं वहाँ
selectआधारित implementation बनी रहती है - Tcl 9.0 की प्रमुख incompatibilities में यह शामिल है कि unqualified variable names अब global की बजाय current namespace में resolve होते हैं, I/O malencoding पर default response error (
-profile strict) हो गया है, path में~home directory के रूप में resolve नहीं होता, और$::tcl_precisionअब double की string generation को नियंत्रित करने के लिए उपयोग नहीं होता - build और platform changes में
--disable-threadsbuild option हटा दिया गया है, इसलिए यह हमेशा thread-enabled है, और Windows के लिए Windows 7 या Windows Server 2008 R2 या उससे नया version आवश्यक है - Tcl C extensions के लिए Tcl 8.6 या उससे नीचे को target करके बनाए गए binaries Tcl 9.0 पर नहीं चलते, Tcl 9.0 में ABI compatibility लक्ष्य नहीं था, और अधिकांश मामलों में यदि हटाए गए API functions का उपयोग नहीं किया गया है तो Tcl 9.0 के लिए rebuild किया जा सकता है
- C public interface में कई arguments को
intसेTcl_Sizeतक विस्तारित किया गया है,Tcl_ChannelTypeVersion5 से कम के लिए support समाप्त किया गया है,Tcl_ObjTypestruct versioning जोड़ी गई है, औरCONST*macros के साथ कई API functions हटा दिए गए हैं - Tk 9.0.0 Tcl 8.6 को support नहीं करता, और Tk 9.0.0 का उपयोग करने के लिए पहले Tcl 9.0.0 आवश्यक है
- Tk, OS notifications, output और tray features तक पहुंच के लिए
tk sysnotify,tk print,tk systrayप्रदान करता है - Tk images में आंशिक SVG support, photo image
metadataको पढ़ने-लिखने की क्षमता, और alpha channel access शामिल है - Tk के built-in widgets और themes अब scaling-aware हो गए हैं, उपलब्ध environments में two-finger gesture support बेहतर हुआ है, और
tk windowingsystemका “aqua” macOS 10.10 या उससे नए version की मांग करता है - Tcl 9 migration materials के रूप में Migrating C extensions to Tcl 9 और Migrating scripts to Tcl 9 उपलब्ध हैं
1 टिप्पणियां
Hacker News की राय
यह 27 साल बाद पहली major release है। इसकी internal structure 64-bit है, इसलिए data बहुत बड़ा हो सकता है, और इसमें नवीनतम emoji समेत पूरा Unicode, Zip file system जैसी कई नई सुविधाएँ हैं।
कुछ पुराना कचरा भी हटाया गया है, इसलिए कुछ programs को update की ज़रूरत पड़ सकती है, लेकिन compatibility अब भी काफ़ी ऊँची है। ऊपर वाले पेज से release notes पर लिंक मिलता है, जहाँ शामिल/हटाई गई सुविधाओं का विस्तार से विवरण है
~क्यों हटा दिया गयाlanguage purist और 1990 के दशक वाली object-oriented purist जमात Tcl को सच में नापसंद करती है, लेकिन इसके ecosystem में एक खास design philosophy है
सब कुछ string या command है, और object-oriented extension कुछ हद तक बाद में जोड़ी गई चीज़ जैसा लगता है, लेकिन tkinter की तरह Python के ज़रिए Tcl चलाने के बजाय अगर pure Tcl/Tk से GUI बनाकर देखें, SQLite interface इस्तेमाल करें, कोई छोटा C extension लिखें या किसी library को wrap करें, तो बहुत-सी चीज़ें बस काम कर जाती हैं
https://folk.computer के docs में लिंक के ज़रिए देखा था कि यह project भी Tcl को scripting language की तरह इस्तेमाल करता है। ऐसे use case में शायद Tcl से खास नफ़रत करने की कोई वजह नहीं है
[1] http://antirez.com/articoli/tclmisunderstood.html
उनमें से एक सीख यह थी कि किसी पूर्ण web server में हम फिर कभी JIT compiler के बिना कोई dynamic language इस्तेमाल नहीं करना चाहेंगे। भाषा खुद बेहतरीन है, लेकिन performance issues की वजह से Tcl libraries को नियमित रूप से C में दोबारा लिखना अच्छा अनुभव नहीं था
comment लिखने से पहले
;से command ख़त्म करनी होती है, braces का pair सही होना चाहिए, इसलिए गलत code को comment out करने की कोशिश नहीं की जा सकती, और comment के अंदर backslash भी नहीं रखा जा सकता। हालाँकि इसे भी feature की तरह समझाया जाता है, क्योंकिwishचलाते समय नीचे जैसा लिखा जाता है#!/bin/sh# the next line restarts using wish \exec wish8.0 "$0" "$@"shell में backslash नज़रअंदाज़ हो जाता है, लेकिन
wishमें parse किया जाता हैhttps://github.com/TPC-Council/HammerDB/blob/master/src/post...
Tcl shell scripting language के रूप में काफ़ी ठीक है
Tcl का central event processing engine जहाँ उपलब्ध हो वहाँ
epollयाkqueueके ऊपर बनाया जाना, और जिन platforms पर यह संभव नहीं वहाँselectआधारित implementation का रहना, बहुत बड़ा बदलाव हैTcl की concurrency को पुराना और कम performance वाला मानने की बड़ी वजह यह रही है कि
epollऔरkqueueकम से कम 10 साल से उपलब्ध थे, फिर भी यहselectपर निर्भर रहा। Tcl मुझे पसंदीदा भाषाओं में से एक लगता है क्योंकि इसे शुरू करना आसान है और metaprogramming भी आसान हैदूसरी वजह यह है कि हमें अच्छी तरह पता नहीं कि तेज़ Tcl कैसे लिखा जाए, और उस thread में मैंने अनजाने में वही दिखा दिया था
मैं NaviServer [0] की सिफारिश करना चाहूँगा। इसका पुराना नाम AOLServer [1] था, और यह production में लंबे समय से परखा हुआ, bulletproof web server है
अगर यह कभी AOL चलाने के काम आया था, तो फिर ज़्यादा कहने की ज़रूरत नहीं। OpenACS [2] इसका बड़ा project है और 1997 से मौजूद है, और खासकर Tcl के साथ यह बहुत शक्तिशाली है। इसका maintenance अब भी जारी है और अब यह Tcl 9 को भी support करता है
JavaScript, Tcl, NaviServer के साथ DNS Server, LDAP, Mail जैसे अपने modules जोड़ दिए जाएँ तो यह एक शक्तिशाली tool बन जाता है। अगर Tcl और web development में शुरुआत करनी हो, तो दोनों को साथ में आज़माने की सिफारिश है क्योंकि इनके साथ आसानी से मज़ेदार चीज़ें बनाई जा सकती हैं
[0] https://wiki.tcl-lang.org/page/NaviServer
https://github.com/naviserver-project/naviserver
[1] https://news.ycombinator.com/item?id=35648805
https://www.linuxjournal.com/article/6164
[2] https://openacs.org/about/history
https://openacs.org/
Pasadena, CA में था या Glendale में, ठीक याद नहीं, लेकिन इतना याद है कि ArsDigita के sponsor किए हुए और उनके द्वारा पढ़ाए गए free classes में भी गया था। बहुत गहरा या लंबा course नहीं था, लेकिन शुरुआत के लिए अच्छा था
जिन लोगों के लिए Tcl नया है, उनके लिए एक ऐसा वैकल्पिक ब्रह्मांड भी हो सकता था जहाँ Tcl ब्राउज़र की भाषा बन गई होती, JavaScript नहीं
“एक दिलचस्प फुटनोट: Netscape की स्थापना उसी समय हुई जब मैं 1994 में Berkeley छोड़कर यह तय कर रहा था कि इंडस्ट्री में कहाँ जाऊँ। Jim Clarke और Marc Andreessen ने यह टटोला था कि क्या मैं Netscape के संस्थापकों में शामिल हो सकता हूँ, लेकिन मैंने आखिरकार मना कर दिया। जब मैं उनसे बात कर रहा था, तब तक मैंने यह भी तय नहीं किया था कि मैं web से जुड़ा काम करूँगा। यह मेरे करियर के सबसे बड़े ‘क्या होता अगर’ में से एक है। अगर मैं Netscape चला गया होता, तो काफी संभावना थी कि Tcl, JavaScript की जगह ब्राउज़र की भाषा बन जाती, और दुनिया अलग होती! लेकिन पीछे मुड़कर देखता हूँ तो यह पक्का नहीं कह सकता कि Tcl वास्तव में web के लिए JavaScript से बेहतर भाषा होती, इसलिए शायद जो हुआ वही सही हुआ।”
स्रोत: https://pldb.io/blog/JohnOusterhout.html
कुछ लोगों से ज़्यादा इस्तेमाल होने वाली कोई भी भाषा, चाहे कितनी भी अच्छी हो, कुछ न कुछ बोझ उठा ही लेती है। इसलिए उस वैकल्पिक ब्रह्मांड में ब्राउज़र स्क्रिप्टिंग भाषा का ecosystem शायद कहीं ज़्यादा बिखरा हुआ होता
चाहें तो पर्याप्त commands हटाकर भाषा को Turing-complete न रहने देने तक भी ले जा सकते हैं
https://sunsite.icm.edu.pl/pub/programming/tcl/plugin/
उससे भी पहले की याद है कि साथी छात्र कंप्यूटर लैब में आकर कहते थे, “देखो, अब Mosaic के लिए TK plugin भी है!” यह “माउस वाला gopher लग रहा है!” वाला दौर तो नहीं था, लेकिन उससे बहुत बाद की बात भी नहीं थी
बस फर्क यह था कि Tcl plugin इस्तेमाल करने के लिए आपको खुद कुछ करना पड़ता था, जबकि JavaScript एक बार आने के बाद default के रूप में मिलती थी
ज़्यादा संभावना यही थी कि कुछ समय TCL और किसी दूसरी चीज़ का साथ रहता, और फिर TCL को deprecated कर दिया जाता
हर जगह
set x [ expr $y + $z ]जैसा कोड देखना नहीं चाहता था। command language के रूप में यह इतना बुरा नहीं है, लेकिनयह कहना अतिशयोक्ति नहीं होगी कि मुझे Tcl सच में बहुत पसंद है। 1990 के दशक के आखिर में XiRCON IRC scripts लिखते समय इसे बस थोड़ी देर के लिए इस्तेमाल किया था, लेकिन यह इतनी सरल, सीखने में आसान, लचीली और सुरुचिपूर्ण भाषा लगी कि इसे इंसानों के लिए Lisp कहने का मन हुआ
काश यह ज़्यादा लोकप्रिय होती, और यह देखकर अच्छा लगता है कि यह अब भी ज़िंदा और सक्रिय है
हालाँकि उस समय मेरी दूसरी मुख्य भाषा x86 assembly थी, इसलिए हो सकता है कि प्रभावित होने की मेरी कसौटी थोड़ी नीचे रही हो
Tcl और Tk के लेखक प्रोफेसर John Ousterhout हैं, और software design पर उनकी किताब का दूसरा संस्करण भी आ चुका है
A Philosophy of Software Design:
https://web.stanford.edu/~ouster/cgi-bin/book.php
अभी मैं अध्याय 11 “Design it Twice” पर पहुँचा हूँ, इसलिए संभव है कि इसे पूरा पढ़ने के बाद ऊपर से नीचे तक पूरी तरह rewrite कर दूँ। अभी मॉडल ऐसा है कि variables सिर्फ minimal Python core में हैं और बाकी OpenSCAD में, लेकिन नए implementation में योजना है कि जितना संभव हो सब कुछ Python में रखा जाए और OpenPythonSCAD https://pythonscad.org/ के ज़रिए इस्तेमाल किया जाए
भाषा मुझे सच में पसंद है, लेकिन आजकल इसका ज़्यादा इस्तेमाल नहीं करता। सोचता हूँ कि क्या Linux पर भी यह अभी 1995 जैसा GUI ही बनाता है
अगर दूसरे platforms पर बहुत पहले से उपलब्ध स्तर का, कम-से-कम ठीक-ठाक समझदार Linux GUI support मिला होता, तो शायद मैं आज भी इसे इस्तेमाल कर रहा होता
हालांकि core theme के screenshots 8.5/8.6 पर आधारित हैं, और खासकर default theme Tk 9 में थोड़ी बदली है। दिक्कत यह है कि theme engine अपने अलग नए widgets इस्तेमाल करता है, इसलिए अगर application को themes अपनानी हैं तो उसे नया API इस्तेमाल करना होगा। अगर कोड 1995 या 2005 का है, तो GUI अब भी 1995 जैसा ही दिखेगा
documentation बहुत लंबे समय तक Tk(inter)-केंद्रित रही है, इसलिए लगता है ज़्यादातर लोग उसे default की तरह चुन लेते हैं। Python में GUI support बेहतर हुआ है, लेकिन शायद machine learning/AI के इस्तेमाल की लोकप्रियता का भी असर रहा होगा। Tcl कम लोकप्रिय है, इसलिए modern GUI इस्तेमाल करने के तरीके की docs ढूँढ़ने के लिए आपको और ध्यान से खोजना पड़ता है
हाल में मैंने Tcl के साथ बस MacPorts portfile का काम ही किया है
अगर आजकल कोई इसे किसी और काम के लिए इस्तेमाल कर रहा है, तो मैं जानना चाहूँगा कि क्यों। भाषा से नफरत नहीं है, लेकिन उससे लगाव भी नहीं बनता
एक अनुभवी Tcl programmer इससे जादू कर सकता है। 2005 से 2015 तक मैंने लगभग पूरी तरह Tcl/Tk में programming की और मुझे यह सच में बहुत पसंद था। उसके बाद से मैं इसे ऐप लिखने से ज्यादा हल्के scripts के लिए इस्तेमाल करता हूँ, लेकिन जब भी operating system स्तर के automation scripts लिखने हों, यह अब भी मेरी पहली पसंद है
मैं इसे रोज़ इसलिए इस्तेमाल करता हूँ क्योंकि इसमें Lisp जैसी खूबियों और एक सरल scripting language होने के बीच अच्छा संतुलन है, और इसका C interface शानदार है। REPL भी अच्छा है, और आप C में extensions लिखकर उन्हें 100% first-class Tcl की तरह stack कर सकते हैं। यह काफी हद तक, शायद पूरी तरह, इसलिए संभव है क्योंकि Tcl बहुत सरल भाषा[4] है और इसमें homoiconicity[5] है। इसे develop करना और इस्तेमाल करना मज़ेदार है
[0] https://community.f5.com/kb/technicalarticles/irules-concept...
[1] https://www.mcs.anl.gov/~wozniak/papers/Swift_Tcl_2015.pdf
[2] https://www.acoustic.com/pdf/Acoustic-Experience-Analytics-%...
[3] https://docs.python.org/3/library/tkinter.html
[4] https://www.tcl-lang.org/man/tcl/TclCmd/Tcl.htm
[5] https://stackoverflow.com/questions/6492704/what-exactly-doe...
इसका फायदा यह है कि EDA tools को
run_my_task -option_a -option_Bजैसे shell script commands की तरह चलाया जा सकता है। अगर आप chip design नहीं करते, तो इसे इस्तेमाल करने की कोई वजह नहीं है, और भाषा खुद में भयानक है। EDA उद्योग जितनी जल्दी TCL को छोड़े, उतना अच्छाऔर SQLite को आज जितना भरोसेमंद engine बनाता है, वह यही test suite है। test suite बना रहा, जबकि engine को पूरी तरह या आंशिक रूप से बार-बार फिर से लिखा गया
मैंने online sales application के लिए backup app, एक बड़े retail chain की buggy POS files को ठीक करने वाला app, Forms/Reports को server पर copy करके compile चलाने और फिर नई files को git में push करने वाला छोटा app, और media department के लिए कई PDF को एक में जोड़ना आसान बनाने वाला
gswrapper बनाया था। इन सबका code बस एक-दो पन्नों का थाPython 3.13 से भी ज्यादा महत्वपूर्ण
Bravo !!!!
मैं इंतज़ार कर रहा हूँ कि Scilab और Python, Tcl/Tk 9.0 को शामिल करके distribute करें। लगता है Next Scripting का latest release 9.0 के लिए तैयार है। official page के Undroidwish और Binary Releases सेक्शनों पर नज़र रखना ठीक रहेगा