Проект Tcl/Tk получил новую версию 9.1, которая продолжает развитие платформы после выпуска Tcl/Tk 9.0. Обновление затрагивает сразу два компонента: интерпретатор Tcl и графический инструментарий Tk. Наиболее заметными изменениями стали улучшения доступности графических приложений, начальная поддержка двунаправленного текста и языков с написанием справа налево, а также ряд новых команд и элементов интерфейса.
Tcl/Tk 9.1 является свободным программным обеспечением с открытым исходным кодом и распространяется по BSD-подобной лицензии. Она позволяет использовать, изменять и распространять Tcl/Tk, в том числе в коммерческих и закрытых приложениях, без обязательного раскрытия исходного кода собственного проекта.
Для Tcl/Tk это важный этап не столько из-за появления одного крупного нововведения, сколько из-за совокупности изменений. Разработчики постепенно модернизируют достаточно зрелый инструментарий, сохраняя совместимость с существующей экосистемой и одновременно добавляя возможности, которые давно стали стандартом для современных GUI-фреймворков.
Поддержка экранных дикторов в Tk
Одним из главных нововведений Tk 9.1 стала поддержка программ экранного доступа. Такие приложения позволяют пользователям с нарушениями зрения работать с графическими интерфейсами: они озвучивают элементы окон, их состояние, содержимое и действия, которые доступны пользователю.
Раньше отсутствие встроенной поддержки accessibility было одним из заметных ограничений Tk. Теперь для стандартных элементов Tk и ttk появился специальный механизм, который позволяет взаимодействовать с экранными дикторами. В документации Tk 9.1 для этого предусмотрена команда tk accessible.
Новый интерфейс предоставляет операции для задания и получения различных характеристик элемента, включая его роль, имя, описание, значение, состояние и доступные действия. Также предусмотрены механизмы уведомления об изменении фокуса и выбора.
Это особенно важно для приложений, построенных на стандартных виджетах Tk. Разработчику не обязательно самостоятельно создавать отдельную систему доступности для каждого элемента интерфейса: базовая инфраструктура теперь входит непосредственно в Tk.
Поддержка реализована с учетом особенностей разных операционных систем. В проекте используются соответствующие системные механизмы доступности для Windows, macOS и X11. При этом интерфейс на уровне Tk старается скрыть платформенные различия от разработчика.
RTL и двунаправленный текст
Еще одно существенное изменение связано с отображением текста, который читается справа налево. Это актуально прежде всего для арабского и иврита, а также для интерфейсов, где одновременно присутствуют фрагменты RTL- и LTR-текста.
Tk 9.1 получил начальную поддержку bidirectional text, то есть двунаправленного текста. Для чистого RTL-текста теперь может использоваться корректное выравнивание по правому краю, а смешанные фрагменты текста могут отображаться с учетом направления письма.
Задача оказалась сложнее обычного изменения направления строки. В арабском письме символы должны не просто располагаться в обратном порядке: их графическое представление зависит от соседних символов. Кроме того, в одной строке могут одновременно находиться арабские слова, латиница, цифры и знаки пунктуации.
В ходе разработки RTL-поддержки были улучшены механизмы формирования текста на разных платформах. Для X11 разработчики интегрировали необходимые компоненты для двунаправленной обработки и формирования глифов. В результате Tk может корректнее отображать сложные письменности, чем в предыдущих версиях.
При этом разработчики не позиционируют новую систему как полноценный текстовый движок уровня современных браузеров или офисных пакетов. Речь идет прежде всего о корректном отображении и базовом редактировании текста в рамках архитектуры Tk.
Новый виджет ttk::toggleswitch
В набор стандартных элементов Tk добавлен новый виджет ttk::toggleswitch. Он предназначен для создания переключателей, которые обычно используются для включения и отключения определенной функции.
Подобный элемент хорошо знаком пользователям современных операционных систем и мобильных приложений. В отличие от обычной кнопки или флажка, переключатель визуально показывает два устойчивых состояния — включено и выключено.
Появление такого виджета в стандартном наборе ttk уменьшает необходимость создавать собственные реализации переключателей. Это также позволяет приложениям сохранять более единообразный интерфейс при использовании стандартных механизмов Tk.
Другие изменения в Tk
Помимо крупных изменений, разработчики добавили и целый ряд менее заметных улучшений графической подсистемы.
- Добавлена команда
tk attribtable. - Появилась поддержка повернутого текста в метках.
- Расширены состояния элементов
ttk::treeviewиttk::notebook. - Улучшена работа с цветами выделения в
listbox. - Диалоговые окна теперь лучше учитывают физическую ширину экрана.
- Улучшена обработка некоторых особенностей отображения текста на различных платформах.
- Удалена устаревшая поддержка визуального оформления Windows XP.
Изменения в treeview и notebook особенно интересны разработчикам, которые используют ttk как основу интерфейса. Новые состояния дают больше возможностей для визуального представления элементов и их состояний без необходимости полностью заменять стандартные виджеты.
Новая команда unicode в Tcl
Изменения коснулись не только Tk. В Tcl 9.1 появилась новая команда unicode, предназначенная для операций, связанных с нормализацией Unicode.
Нормализация необходима потому, что один и тот же визуальный текст Unicode иногда может быть представлен различными последовательностями кодовых точек. Для программ, которые сравнивают строки, выполняют поиск или работают с пользовательским вводом, это может иметь практическое значение.
В Tcl 9.1 соответствующие возможности получили не только уровень команд языка, но и C API. Таким образом, функциональность доступна как разработчикам Tcl-скриптов, так и создателям расширений на C.
Таймер с монотонными часами
Еще одним новым элементом Tcl стала команда timer. Она предоставляет доступ к монотонным часам с микросекундным разрешением.
Монотонные часы отличаются от обычного системного времени тем, что предназначены для измерения интервалов. Системные часы могут быть скорректированы операционной системой, синхронизацией времени или пользователем. Для измерения продолжительности операции это нежелательно.
Поэтому отдельный механизм для работы с монотонным временем полезен в задачах профилирования, тестирования, измерения задержек и других сценариях, где важно получить стабильную продолжительность интервала.
Фильтрация списков и изменения subst
В Tcl 9.1 появилась команда lfilter, предназначенная для выбора элементов списка, соответствующих заданному условию. Это расширяет стандартные возможности обработки списков непосредственно средствами языка.
Кроме того, были расширены команды subst и switch. В subst появились дополнительные параметры, позволяющие точнее управлять обработкой обратных слешей, команд и переменных. Для switch добавлена возможность работы с целочисленным режимом сопоставления.
Такие изменения не выглядят столь заметно, как новый графический виджет, однако они важны для разработчиков, которые используют Tcl для обработки данных, автоматизации и создания прикладных сценариев.
Изменения C API и работа с большими данными
В новой версии продолжилось развитие программного интерфейса Tcl для приложений и расширений, написанных на C. В частности, появились новые функции для работы со списками, хеш-таблицами, кодировками и строками.
Разработчики также улучшили внутреннюю реализацию списков с точки зрения использования памяти. Это особенно актуально для программ, которые работают с большими наборами данных и создают или изменяют крупные Tcl-списки.
Кроме того, расширена поддержка 64-битных размеров. Это соответствует современному оборудованию и позволяет языковой инфраструктуре лучше работать с большими объемами данных.
Изменения для macOS и Windows
В Tcl 9.1 появились изменения, специфичные для отдельных операционных систем. Например, на macOS улучшена работа с регистронезависимыми путями файловой системы.
В Windows переработан поиск исполняемых файлов, используемый механизмами auto_execok и exec. Это затрагивает сценарии, в которых Tcl-программа запускает внешние приложения и команды.
Такие изменения могут быть менее заметны пользователю, чем новые элементы интерфейса, но они важны для переносимых приложений. Tcl исторически используется в разных операционных системах, поэтому корректная работа платформенных функций остается существенной частью развития проекта.
Что это означает для разработчиков
Tcl/Tk 9.1 не меняет основную концепцию платформы. Tcl остается интерпретируемым языком с лаконичным синтаксисом и мощными средствами обработки строк, списков и команд, а Tk продолжает предоставлять кроссплатформенный набор графических компонентов.
Главное значение версии 9.1 заключается в постепенном устранении ограничений, которые становились все заметнее по мере развития современных требований к программному обеспечению.
Поддержка экранных дикторов делает приложения Tk более пригодными для пользователей, работающих с технологиями экранного доступа. RTL и bidirectional text расширяют возможности создания многоязычных интерфейсов. Новые команды Tcl предоставляют разработчикам более удобные средства для работы с Unicode, временем и списками.
При этом переход на новую версию стоит тестировать так же, как и любое другое обновление основной версии инструментария. Особенно это касается проектов, использующих собственные расширения Tcl/Tk, низкоуровневый C API или нестандартные виджеты.
Как получить Tcl/Tk 9.1
Официальный сайт проекта указывает Tcl/Tk 9.1.0 как актуальный выпуск ветки 9.1. Исходные архивы доступны отдельно для Tcl и Tk. Для сборки полноценного графического приложения обычно требуются оба компонента.
Исходный код распространяется в архивах для Unix-подобных систем и Windows. Для macOS также предусмотрены соответствующие проекты и файлы сборки.
Перед обновлением существующего приложения желательно проверить используемые расширения и сторонние библиотеки. Особенно это касается программ, которые напрямую обращаются к внутренним API или зависят от особенностей конкретной версии Tk.
Выводы
Tcl/Tk 9.1 продолжает развитие платформы сразу в нескольких направлениях. Наиболее заметными нововведениями стали встроенная инфраструктура доступности для экранных дикторов, поддержка RTL и двунаправленного текста, а также новый виджет ttk::toggleswitch.
На уровне Tcl обновление принесло команду unicode для нормализации Unicode, механизм timer с монотонными часами и микросекундным разрешением, команду lfilter и ряд дополнительных возможностей языка и C API.
Таким образом, версия 9.1 представляет собой не революционную смену архитектуры, а последовательное расширение возможностей зрелой платформы. Для новых проектов это означает более современный набор инструментов, а для существующих приложений — дополнительные возможности без необходимости отказываться от Tcl и Tk.
Часто задаваемые вопросы
Tcl/Tk 9.1 — новая версия программной платформы, состоящей из языка Tcl и графического инструментария Tk. Tcl используется для создания сценариев и приложений, а Tk предоставляет кроссплатформенные графические элементы интерфейса.
В Tk 9.1 появилась поддержка экранных дикторов, начальная поддержка двунаправленного и RTL-текста, новый виджет ttk::toggleswitch, повернутый текст в метках и другие улучшения стандартных компонентов.
Tk 9.1 получил начальную поддержку языков и текстовых сценариев с направлением справа налево. Для сложного текста также реализована обработка двунаправленного отображения и формирования символов, однако возможности Tk в этой области не следует приравнивать к специализированным текстовым движкам современных браузеров или офисных приложений.
Она позволяет стандартным элементам Tk и ttk предоставлять информацию технологиям экранного доступа. Это делает графические приложения более доступными для пользователей, которые используют экранные дикторы.
Это новый стандартный виджет Tk в пространстве ttk, предназначенный для переключения функции между двумя состояниями — например, включено и выключено.
Среди наиболее заметных новых команд — unicode для нормализации Unicode, timer для работы с монотонными часами и lfilter для фильтрации элементов списка.
Исходный код можно получить на официальном сайте Tcl/Tk. Там доступны архивы Tcl 9.1.0 и Tk 9.1.0 для соответствующих платформ.
Необходимость обновления зависит от конкретного проекта. Новая версия предоставляет дополнительные возможности, но приложения с большим количеством сторонних расширений или собственным C-кодом желательно сначала проверить в тестовой среде.
