1 पॉइंट द्वारा GN⁺ 2024-09-27 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 को नियंत्रित करने के लिए encoding profiles, और 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-threads build 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_ChannelTypeVersion 5 से कम के लिए support समाप्त किया गया है, Tcl_ObjType struct 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 टिप्पणियां

 
GN⁺ 2024-09-27
Hacker News की राय
  • यह 27 साल बाद पहली major release है। इसकी internal structure 64-bit है, इसलिए data बहुत बड़ा हो सकता है, और इसमें नवीनतम emoji समेत पूरा Unicode, Zip file system जैसी कई नई सुविधाएँ हैं।
    कुछ पुराना कचरा भी हटाया गया है, इसलिए कुछ programs को update की ज़रूरत पड़ सकती है, लेकिन compatibility अब भी काफ़ी ऊँची है। ऊपर वाले पेज से release notes पर लिंक मिलता है, जहाँ शामिल/हटाई गई सुविधाओं का विस्तार से विवरण है

    • Zip file system में बदलाव वाकई स्वागतयोग्य है। पहले standalone application बनाते समय community कुछ खास tools और अनुभव के सहारे कई तकनीकें इस्तेमाल करती थी, और अब वैसी चीज़ों को standard तरीके के बुनियादी toolkit में शामिल कर दिया गया है, जो शानदार बदलाव है
    • यह जानने की उत्सुकता है कि Home directory के लिए इस्तेमाल होने वाला सुविधाजनक shorthand tilde ~ क्यों हटा दिया गया
  • 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 करें, तो बहुत-सी चीज़ें बस काम कर जाती हैं

    • antirez के Tcl पर लिखे लेख [1] में एक दिलचस्प नज़रिया देखा था। अगर ठीक याद है, तो Redis test scripts के लिए Tcl इस्तेमाल करता है
      https://folk.computer के docs में लिंक के ज़रिए देखा था कि यह project भी Tcl को scripting language की तरह इस्तेमाल करता है। ऐसे use case में शायद Tcl से खास नफ़रत करने की कोई वजह नहीं है
      [1] http://antirez.com/articoli/tclmisunderstood.html
    • Tcl की वजह से हमारा startup संभव हुआ, और उस समय मिले अनुभव और सीख ही OutSystems की शुरुआत का आधार बने
      उनमें से एक सीख यह थी कि किसी पूर्ण web server में हम फिर कभी JIT compiler के बिना कोई dynamic language इस्तेमाल नहीं करना चाहेंगे। भाषा खुद बेहतरीन है, लेकिन performance issues की वजह से Tcl libraries को नियमित रूप से C में दोबारा लिखना अच्छा अनुभव नहीं था
    • “सब कुछ string या command है” यह बात कोई अतिशयोक्ति नहीं है। सचमुच सब कुछ command है, इसलिए यहाँ का comment करने का तरीका “आख़िर यह क्या हो रहा है” वाले स्तर का है: https://wiki.tcl-lang.org/page/comment
      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 किया जाता है
    • Citus के TPC benchmark काम के दौरान Tcl के साथ काफ़ी काम किया था
      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 को कम performance वाला मानने की मुख्य वजह यह है कि इसके बुनियादी operations CPython से लगभग दोगुने धीमे हैं। CPython भी कोई बहुत तेज़ नहीं है: https://news.ycombinator.com/item?id=41637953
      दूसरी वजह यह है कि हमें अच्छी तरह पता नहीं कि तेज़ 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/

    • यह 1990 के दशक के मध्य में Tcl और SQL सीखने वाली nostalgic stack थी। उस समय OpenACS नहीं, बल्कि ArsDigita Community System के साथ ही इधर-उधर प्रयोग किया था, और वह वही दौर था जब ArsDigita सचमुच मौजूद था
      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

    • ऐसा हो सकता था। मेरा मानना है कि JavaScript के जमने का एक बड़ा कारण यह था कि उस पर कोई बड़ा ऐतिहासिक बोझ नहीं था, इसलिए डिज़ाइनर उसे ज़रूरत के हिसाब से मोड़ सके
      कुछ लोगों से ज़्यादा इस्तेमाल होने वाली कोई भी भाषा, चाहे कितनी भी अच्छी हो, कुछ न कुछ बोझ उठा ही लेती है। इसलिए उस वैकल्पिक ब्रह्मांड में ब्राउज़र स्क्रिप्टिंग भाषा का ecosystem शायद कहीं ज़्यादा बिखरा हुआ होता
    • web के लिए Tcl के सुरक्षित subset पर हुआ काम आज भी अविश्वसनीय स्क्रिप्ट्स को आसानी से मैनेज होने वाले sandbox में चलाने के काम आ सकता है
      चाहें तो पर्याप्त commands हटाकर भाषा को Turing-complete न रहने देने तक भी ले जा सकते हैं
    • मज़े की बात यह है कि Tcl ब्राउज़र plugin कम से कम 1996 से मौजूद था
      https://sunsite.icm.edu.pl/pub/programming/tcl/plugin/
      उससे भी पहले की याद है कि साथी छात्र कंप्यूटर लैब में आकर कहते थे, “देखो, अब Mosaic के लिए TK plugin भी है!” यह “माउस वाला gopher लग रहा है!” वाला दौर तो नहीं था, लेकिन उससे बहुत बाद की बात भी नहीं थी
      बस फर्क यह था कि Tcl plugin इस्तेमाल करने के लिए आपको खुद कुछ करना पड़ता था, जबकि JavaScript एक बार आने के बाद default के रूप में मिलती थी
    • अगर ऐसा हुआ भी होता, तब भी नहीं लगता कि दुनिया TCL पर ही टिकी रहती। JavaScript इतना अच्छा था कि लोग उसकी कमियाँ झेलने को तैयार थे, लेकिन TCL निश्चित रूप से वैसा नहीं था
      ज़्यादा संभावना यही थी कि कुछ समय TCL और किसी दूसरी चीज़ का साथ रहता, और फिर TCL को deprecated कर दिया जाता
    • “शायद जो हुआ वही सही हुआ” इस बात से मैं पूरी तरह सहमत हूँ
      हर जगह set x [ expr $y + $z ] जैसा कोड देखना नहीं चाहता था। command language के रूप में यह इतना बुरा नहीं है, लेकिन
  • यह कहना अतिशयोक्ति नहीं होगी कि मुझे Tcl सच में बहुत पसंद है। 1990 के दशक के आखिर में XiRCON IRC scripts लिखते समय इसे बस थोड़ी देर के लिए इस्तेमाल किया था, लेकिन यह इतनी सरल, सीखने में आसान, लचीली और सुरुचिपूर्ण भाषा लगी कि इसे इंसानों के लिए Lisp कहने का मन हुआ
    काश यह ज़्यादा लोकप्रिय होती, और यह देखकर अच्छा लगता है कि यह अब भी ज़िंदा और सक्रिय है

    • मैंने Tcl को सिर्फ IRC bot scripts लिखने भर के लिए छुआ था, लेकिन उस अनुभव की सिर्फ अच्छी यादें हैं
    • 90s में मैंने IRC client के लिए TCL scripts लिखी थीं और वह सच में बहुत अच्छा था। उस काम के लिए यह भाषा बेहतरीन थी
      हालाँकि उस समय मेरी दूसरी मुख्य भाषा x86 assembly थी, इसलिए हो सकता है कि प्रभावित होने की मेरी कसौटी थोड़ी नीचे रही हो
    • इसे इंसानों के लिए Lisp कहना हो तो upvar बीच में आ जाता है
  • Tcl और Tk के लेखक प्रोफेसर John Ousterhout हैं, और software design पर उनकी किताब का दूसरा संस्करण भी आ चुका है
    A Philosophy of Software Design:
    https://web.stanford.edu/~ouster/cgi-bin/book.php

    • यह वाकई शानदार किताब है और मैं इसे अभी पढ़ रहा हूँ। मैं एक-एक अध्याय पढ़कर जितना संभव हो उतनी गहराई से सोचता हूँ, फिर उसकी सीख लागू करके अपने मौजूदा project को दोबारा लिख रहा हूँ
      अभी मैं अध्याय 11 “Design it Twice” पर पहुँचा हूँ, इसलिए संभव है कि इसे पूरा पढ़ने के बाद ऊपर से नीचे तक पूरी तरह rewrite कर दूँ। अभी मॉडल ऐसा है कि variables सिर्फ minimal Python core में हैं और बाकी OpenSCAD में, लेकिन नए implementation में योजना है कि जितना संभव हो सब कुछ Python में रखा जाए और OpenPythonSCAD https://pythonscad.org/ के ज़रिए इस्तेमाल किया जाए
  • भाषा मुझे सच में पसंद है, लेकिन आजकल इसका ज़्यादा इस्तेमाल नहीं करता। सोचता हूँ कि क्या Linux पर भी यह अभी 1995 जैसा GUI ही बनाता है
    अगर दूसरे platforms पर बहुत पहले से उपलब्ध स्तर का, कम-से-कम ठीक-ठाक समझदार Linux GUI support मिला होता, तो शायद मैं आज भी इसे इस्तेमाल कर रहा होता

    • theme engine तो करीब 15 साल पहले ही आ गया था। default theme काफी पुरानी दिखती है, लेकिन दूसरी themes भी बहुत हैं: https://wiki.tcl-lang.org/page/List+of+ttk+Themes
      हालांकि core theme के screenshots 8.5/8.6 पर आधारित हैं, और खासकर default theme Tk 9 में थोड़ी बदली है। दिक्कत यह है कि theme engine अपने अलग नए widgets इस्तेमाल करता है, इसलिए अगर application को themes अपनानी हैं तो उसे नया API इस्तेमाल करना होगा। अगर कोड 1995 या 2005 का है, तो GUI अब भी 1995 जैसा ही दिखेगा
    • Python सीखते समय Tkinter इस्तेमाल करने की याद अब भी है। दूसरे GUI भी हैं, लेकिन modern GUI की तरह चलने वाले examples ढूँढ़ना और भी झंझट वाला है
      documentation बहुत लंबे समय तक Tk(inter)-केंद्रित रही है, इसलिए लगता है ज़्यादातर लोग उसे default की तरह चुन लेते हैं। Python में GUI support बेहतर हुआ है, लेकिन शायद machine learning/AI के इस्तेमाल की लोकप्रियता का भी असर रहा होगा। Tcl कम लोकप्रिय है, इसलिए modern GUI इस्तेमाल करने के तरीके की docs ढूँढ़ने के लिए आपको और ध्यान से खोजना पड़ता है
  • हाल में मैंने Tcl के साथ बस MacPorts portfile का काम ही किया है
    अगर आजकल कोई इसे किसी और काम के लिए इस्तेमाल कर रहा है, तो मैं जानना चाहूँगा कि क्यों। भाषा से नफरत नहीं है, लेकिन उससे लगाव भी नहीं बनता

    • मुझे लगता है Tcl, C programmers के लिए Lisp के ज्यादा करीब है। यह Lisp जैसी metaprogramming क्षमता देता है, लेकिन रूप C जैसा लगता है, C के साथ अच्छी तरह फिट बैठता है, आम shell languages की तुलना में कहीं ज्यादा सहज है, और cross-platform GUI भी देता है
      एक अनुभवी Tcl programmer इससे जादू कर सकता है। 2005 से 2015 तक मैंने लगभग पूरी तरह Tcl/Tk में programming की और मुझे यह सच में बहुत पसंद था। उसके बाद से मैं इसे ऐप लिखने से ज्यादा हल्के scripts के लिए इस्तेमाल करता हूँ, लेकिन जब भी operating system स्तर के automation scripts लिखने हों, यह अब भी मेरी पहली पसंद है
    • इसका मानक उपयोग F5 network devices और A10 उपकरणों के BigIP iRules[0], Argonne National Labs के supercomputer orchestration[1], Tealeaf[2], Python Tkinter[3] आदि में है
      मैं इसे रोज़ इसलिए इस्तेमाल करता हूँ क्योंकि इसमें 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...
    • Tcl, EDA उद्योग की scripting language है। अगर आप computer chip design कर रहे हैं, तो आप TCL इस्तेमाल कर रहे हैं। Cadence और Synopsys ने 30 साल से भी ज्यादा समय से TCL को standard बनाया हुआ है
      इसका फायदा यह है कि EDA tools को run_my_task -option_a -option_B जैसे shell script commands की तरह चलाया जा सकता है। अगर आप chip design नहीं करते, तो इसे इस्तेमाल करने की कोई वजह नहीं है, और भाषा खुद में भयानक है। EDA उद्योग जितनी जल्दी TCL को छोड़े, उतना अच्छा
    • SQLite के creator Richard Hipp का कहना है कि SQLite, Tcl में लिखा गया है। database engine खुद, जाहिर है, C में लिखा गया था, लेकिन उससे कहीं बड़ा test suite ज्यादातर Tcl में लिखा गया था
      और SQLite को आज जितना भरोसेमंद engine बनाता है, वह यही test suite है। test suite बना रहा, जबकि engine को पूरी तरह या आंशिक रूप से बार-बार फिर से लिखा गया
    • मैंने Freewrap की वजह से कुछ बार Tcl इस्तेमाल किया है। बहुत कम code में GUI वाला Windows app बनाया जा सकता था और उसे executable के रूप में आसानी से deploy किया जा सकता था
      मैंने online sales application के लिए backup app, एक बड़े retail chain की buggy POS files को ठीक करने वाला app, Forms/Reports को server पर copy करके compile चलाने और फिर नई files को git में push करने वाला छोटा app, और media department के लिए कई PDF को एक में जोड़ना आसान बनाने वाला gs wrapper बनाया था। इन सबका code बस एक-दो पन्नों का था
  • Python 3.13 से भी ज्यादा महत्वपूर्ण
    Bravo !!!!
    मैं इंतज़ार कर रहा हूँ कि Scilab और Python, Tcl/Tk 9.0 को शामिल करके distribute करें। लगता है Next Scripting का latest release 9.0 के लिए तैयार है। official page के Undroidwish और Binary Releases सेक्शनों पर नज़र रखना ठीक रहेगा