LINUX.ORG.RU

Вышел Tcl/Tk 8.6

 ,


2

2

Сегодня, 20 декабря 2012 года, состоялся официальный мажорный релиз новой версии языка, среды программирования и соответствующего набора виджетов — Tcl/Tk 8.6.

Основные нововведения в самом Tcl:

  • Поддержка ООП из коробки:
    • встроенная объектная система TclOO;
    • 4-я версия Incr Tcl, основанная на TclOO (также встроена).
  • Бесстековое выполнение и, соответственно, полная поддержка сопроцедур (coroutines).
  • Все-таки добавлены try и throw.
  • Нормальная поддержка мультитрединга (многопоточности).
  • Множество других дополнительных модулей (по ссылке «Подробности»).

Основные нововведения в Tk:

  • встроенная поддержка PNG, с прозрачностью;
  • диалог выбора шрифтов;
  • поддержка поворачиваемого текста;
  • поддержка перемещения объектов на холсте;
  • встроенная поддержка «занятых» окон;
  • другие интересные фичи, (по ссылке «Подробности»).

>>> Подробности

★★★★★

Проверено: maxcom ()
Последнее исправление: maxcom (всего исправлений: 3)

Где бы найти хороший, годный пример реализации связки «GUI на TCL, функционал (к примеру) на C»?

А то хеллоуворлды-то на самом TCL я видел и даже немножко сам писал. Но хочется посмотреть, как можно этот инструмент применить для чего-то более масштабного.

hobbit ★★★★★
()
Ответ на: комментарий от cab

Кто мешал сделать красивую тему или довести до ума биндинги к GTK/QT?

Биндинги к жирным Qt/Gtk есть. Но на винде они почему-то не нужны для хорошего внешнего вида. Как не нужны и красивые темы. Следовательно, дело не в Tk. Осталось только услышать правильный ответ на вопрос «Кто виноват?».

anonymous
()
Ответ на: комментарий от anonymous

Это довольно годный интерфейс на Tk.

buddhist ★★★★★
() автор топика

Кстати, тикль-программисты. Не подскажете как регулярками на tcl из данного месива вытащить: 123-456-789-0, 098-765-432-1, 086-429-753-1.

TEXTTEXTTEXTTEXT<B>123-456-789-0</B>TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT<B>098-765-432-1</B>TEXT TEXT<B>086-429-753-1</B>TEXTTEXTTEXTTEXTTEXTTEXTTEXT TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT

а то в питоне всё нормально, а тут какие-то сложности. Интересно.

chinarulezzz ★★
()
Последнее исправление: chinarulezzz (всего исправлений: 1)
Ответ на: комментарий от gh0stwizard

gh0stwizard

По сабжу отличная новость ! Что у Tcl с событийкой ? Есть порт libev ?

У Tcl свой встроенный в язык mainloop и события файлов/сокетов/gui (в Qt также, например).

gv
()
Ответ на: комментарий от chinarulezzz

regexp -all -inline {[0-9-]+} {TEXTTEXTTEXTTEXT<B>123-456-789-0</B>TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT<B>098-765-432-1</B>TEXT TEXT<B>086-429-753-1</B>TEXTTEXTTEXTTEXTTEXTTEXTTEXT TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT}

anonymous
()
Ответ на: комментарий от anonymous
set a {EXTTEXTTEXTTEXT<B>123-456-789-0</B>TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT<B>098-765-432-1</B>TEXT TEXT<B>086-429-753-1</B>TEXTTEXTTEXTTEXTTEXTTEXTTEXT TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT}
regexp -all -inline {\d+-\d+-\d+-\d} "$a"
anonymous
()
Ответ на: комментарий от buddhist
<B>123-45F6-789-0</B> 123-45F6-789-0 <B>09z,8-765-432-1</B> 09z,8-765-432-1 <B>086-429-7Ю53-1</B> 086-429-7Ю53-1

он мне выводит вот что. почему просто не выведет: <B>123-45F6-789-0</B> <B>09z,8-765-432-1</B> <B>086-429-7Ю53-1</B> ?

В питоне ведь делаю просто: <B>(.*)</B> и всё. Тут не понимаю что тиклю надо еще формулировать, когда регулярка проста как бревно и требует предсказуемого поведения.

chinarulezzz ★★
()
Ответ на: комментарий от gv

все также выводит: <B>123-45F6-789-0</B> 123-45F6-789-0 <B>09z,8-765-432-1</B> 09z,8-765-432-1 <B>086-429-7Ю53-1</B> 086-429-7Ю53-1

вместо <B>123-45F6-789-0</B> <B>09z,8-765-432-1</B> <B>086-429-7Ю53-1</B>

chinarulezzz ★★
()
Ответ на: комментарий от chinarulezzz
set a {EXTTEXTTEXTTEXT<B>123-456-789-0</B>TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT<B>098-765-432-1</B>TEXT TEXT<B>086-429-753-1</B>TEXTTEXTTEXTTEXTTEXTTEXTTEXT TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT}

regexp -all -inline -nocase {<b>[0-9-]+</b>} "$a"
anonymous
()
Ответ на: комментарий от anonymous

спасибо. Помогло.

Кстати, есть ли еще возможность просматривать маны комманд? Например, хочу узнать что делает опция -all, и делаю как в питоне help(somefunc)

chinarulezzz ★★
()
Ответ на: комментарий от chinarulezzz

Кстати, есть ли еще возможность просматривать маны комманд?

Нет. И хорошей свободной среды для программирования с хелпом тоже нет. И документация хреновая. И книги плохие, и их мало. И с сайтами напряжёнка. И с сообществом. И с библиотеками.

А в остальном, прекрасная маркиза, всё хорошо, всё хорошо.

anonymous
()
Ответ на: комментарий от chinarulezzz

anonymous выше написал правильный вариант, у меня скобки лишние

gv
()
Ответ на: комментарий от chinarulezzz

и делаю как в питоне help(somefunc)

а вот и ненадо так делать :)

надо «man 3tcl somefunc» (это если деб/убунта и иже с ними) или «man n tcl» (для прочих). незнаю, можно ли сравнивать с питоном, но маны tcl исчерпывающе полны.

вообще-то tcl не подразумевает активное использование родной командной строки (той которая tclsh) - он язык для встраивания и расширений. Гляньте исх.код tclsh там фактически считанные строки и ничего лишнего.

Если взять софтину/железяку построенную на tcl и активно использующую командную строку, то там всё будет, но уже своё :)

ps. для удобства 'поиграть с tcl/tk' есть tkcon - замечательна штукенция о которой почему-то мало знают

MKuznetsov ★★★★★
()
Ответ на: комментарий от anonymous

Нет. И хорошей свободной среды для программирования с хелпом тоже нет. И документация хреновая. И книги плохие, и их мало. И с сайтами напряжёнка. И с сообществом. И с библиотеками.

Книги хорошие есть. Документация по языку и C API хорошая, немного разрозненная.

С библиотеками, их документацией и их сайтами не очень, да. ИМХО, если проект
требует много сторонних модулей, то лучше брать питон или перл.

Сообщество, по-моему, отличное — с проблемами и багами, на которые я натыкался, оперативно помогали.
В usenet загляните, comp.lang.tcl показательный пример :)

gv
()
Ответ на: комментарий от Const

ООП даже в Фортран (где оно точно нафиг не сдалось) воткнули.

Это неправда (что не сдалось). Очень даже облегчает жизнь. Причём не в ущерб производительности.

yvv ★★☆
()
Ответ на: комментарий от chinarulezzz

Видимо в питоне по умолчанию регекспы нежадные. Тут же оно у вас будет сопоставляться с наиболее длинной последовательностью между <B> и </B>. Квантификатор *? сопоставляется с наиболее короткой подходящей последовательностью.

buddhist ★★★★★
() автор топика

Закопайте.

Криокамера и так переполнена.

Bioreactor ★★★★★
()
Ответ на: комментарий от gv

Книги хорошие есть.

Кроме Уелша, который суть чуть лучше, чем справочник, что ещё есть?

ИМХО, если проект

требует много сторонних модулей, то лучше брать питон или перл.

Проект не обязан требовать много библиотек. Достаточно что-то одно, но нестандартное. Скажем, html-виджет. Или canvas-виджет со сглаживанием. Или математическая либка.

Сообщество, по-моему, отличное

Но сайтов нормальных нет. Особенно на русском.

В usenet загляните

Шёл 21 век...

anonymous
()

Урааааа!!! Уже хочется сесть и что-нибудь запрограммировать.

fk0
()
Ответ на: комментарий от MKuznetsov

надо «man 3tcl somefunc» (это если деб/убунта и иже с ними) или «man n tcl» (для прочих). незнаю, можно ли сравнивать с питоном, но маны tcl исчерпывающе полны.

нет такого, есть только

root@localhost # locate man | grep tcl
/usr/lib/tcl8.5/encoding/macRomania.enc
/usr/lib/tcl8.5/encoding/macRoman.enc
/usr/man/man7/gitcli.7.gz
/usr/man/man1/tclsh.1.gz
/usr/man/mann/tcl_startOfNextWord.n.gz
/usr/man/mann/tclvars.n.gz
/usr/man/mann/tcl_findLibrary.n.gz
/usr/man/mann/tcl_wordBreakBefore.n.gz
/usr/man/mann/tcl_startOfPreviousWord.n.gz
/usr/man/mann/tcl_endOfWord.n.gz
/usr/man/mann/tcl_wordBreakAfter.n.gz
/usr/man/mann/tcltest.n.gz
/usr/man/man8/vgimportclone.8.gz
/usr/man/man3/ldap_str2objectclass.3.gz
/usr/man/man3/catclose.3.gz
/usr/man/man3/ldap_objectclass_free.3.gz
/usr/man/man3/pthread_condattr_setclock.3p.gz
/usr/man/man3/gl_setclippingwindow.3.gz
/usr/man/man3/pthread_condattr_getclock.3p.gz
/usr/man/man3/ldap_objectclass2name.3.gz
/usr/man/man3/ldap_objectclass2str.3.gz
(/home/alex)
root@localhost #
chinarulezzz ★★
()
Ответ на: комментарий от Suntechnic

Чо тебе еще надо?

документацию по языку. Не в интернете, фиг знает по какой версии, а прям в языке, который выдаст актуальные, подробные маны от специалистов по этому языку.

Ну, так было бы хорошо.

Это чо Пыха - документацию толще описания форматов майкрософтовского офиса делать?

возьми пример с питона.

chinarulezzz ★★
()
Ответ на: комментарий от buddhist

угу, спасибо. Ранее точно пробовал данную регулярку, но вот про опции -all, -inline не знал.

chinarulezzz ★★
()
Ответ на: комментарий от buddhist

Видимо в питоне по умолчанию регекспы нежадные.

Нет, жадные. Нежадность также задается "?".

Virtuos86 ★★★★★
()
Ответ на: комментарий от akk

Во - точно. Очень хороший ресурс для быстрого старта. Я с него и начал.

Suntechnic ★★★★★
()
Ответ на: комментарий от chinarulezzz

Можно так

% string ?    
unknown or ambiguous subcommand "?": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, reverse, tolower, totitle, toupper, trim, trimleft, trimright, wordend, or wordstart

На самом деле единственной что вымораживает в tcl это не способность нормально отработать у функции string с параметрами tolower и toupper с не ASCII кодировкой. И вот по этому вопросу в доках точно ничего нет - всего остального за глаза. Не вижу недостатка в документации.

Suntechnic ★★★★★
()
Ответ на: комментарий от Suntechnic

Можно так

Это даже не полноценный список подкомманд (ибо парсить надо), а уж тем более не помощь.

anonymous
()
Ответ на: комментарий от Suntechnic

пасиб. Кстати, возник вопрос:

Есть список: set ll {a b c d e f g}

как вывести b c e? Только не набирать каждый раз в строку «[lindex $ll 1] [lindex $ll 2] [lindex $ll 4]», а как нибудь вроде [lindex $ll {1 2 4}]

chinarulezzz ★★
()
Ответ на: комментарий от anonymous

anonymous (22.12.2012 12:29:15)
[...]

На мой взгляд, Tcl — простой язык для простых проектов и его стоит использовать именно как tool control language: как DSL, встроенный в приложение, или как отдельный скрипт, взаимодействующий с движком по какому-нибудь простому протоколу.

Писать на Tcl большую программу целиком я бы не стал. Так что согласен, кроме Уэлша книг я не видел, и по наличию полезных модулей Tcl отстает, но я считаю, что и книги Уэлша слишком много, а проекты, требующие нестандартные модули, писать лучше на другом языке.

По поводу canvas со сглаживанием и html: это не пример нестандартных модулей. Это пример недоработок, которыми вы недовольны в существующих реализациях.

Шёл 21 век...

Usenet кто-то отменял? По многим областям там очень грамотное и отзывчивое сообщество. Вы не замечали, что если гуглить какие-то более-менее сложные вопросы по unix, c, сокетам, etc. — то часто хорошие ответы находишь на каких-нибудь зеркалах usenet?

Есть еще Google Groups.

gv
()
Ответ на: комментарий от gv

но я считаю, что и книги Уэлша слишком много

А достаточно тогда - это сколько?

а проекты, требующие нестандартные модули, писать лучше на другом языке.

Их и пишут на C, частенько делая либками к пайтону. Поэтому пайтон незаслуженно популярен, а хороший, годный тикль - нет.

Usenet кто-то отменял? По многим областям там очень грамотное и отзывчивое сообщество. Вы не замечали, что если гуглить какие-то более-менее сложные вопросы по unix, c, сокетам, etc. — то часто хорошие ответы находишь на каких-нибудь зеркалах usenet?

Usenet - это такой древний твиттер. С хорошими сайтами, а тем более книгами, рядом не стоял.

anonymous
()
Ответ на: комментарий от yvv

Это неправда (что не сдалось). Очень даже облегчает жизнь. Причём не в ущерб производительности.

В рамках холивора: но в каждых девяти случаях использования ООП в матмоделировании из десяти усложняет жизнь и роняет производительность.

Const
()
Ответ на: комментарий от anonymous

А достаточно тогда - это сколько?

Ну, по-моему часть про Tk в этой книге перегружена деталями, которые при необходиомости можно узнать, прочитав man. Можно было бы книгу в 1.5-2 раза тоньше сделать.

Их и пишут на C, частенько делая либками к пайтону. Поэтому пайтон незаслуженно популярен, а хороший, годный тикль - нет.

Я имел в виду не выбор «C или скриптовый язык», а выбор «Tcl или другой скриптовый язык».

Для приложения, которое в основном на C/C++, но поведение которого хочется скриптовать — Tcl отличный выбор. Для приложения, которое должно быть целиком на скриптовом языке, начиная с некоторого порога сложности я бы выбрал питон.

Usenet - это такой древний твиттер.

Гм. Причем здесь твиттер?

С хорошими сайтами, а тем более книгами, рядом не стоял.

Вопрос был про сообщество; usenet — это средство общения. Некоторые сообщества/проекты используют форумы, некоторые рассылки, некоторые usenet. Какая разница?

Непонятно, что конкретно вы хотите от хорошего сайта по Tcl? Соглашусь с тем, что чего не хватает — так это структурированности существующей документации и модулей. Полезная информация иногда беспорядочно раскидана по Tcl-вики.

Еще нехватает единого архива сторонних компонентов, хотя бы для Tk. В tcl-вики есть странички для многих, но они не систематизированы и иногда бесполезны.

gv
()
Ответ на: комментарий от gv

Ну, по-моему часть про Tk в этой книге перегружена деталями, которые при необходиомости можно узнать, прочитав man.

Да? А мне, наоборот, часть про Tk показалась куцей. Ибо то, что нужно показывать, рассказывалось словами. Да и описание связей между компонентами нет - один справочник да и только, и тот по алфавиту.

Причём книжку действительно можно сократить, но не за счёт содержания, а за счёт удаления воды и ухода от почти справочного вида. А содержания там мало, ИМХО.

Для приложения, которое должно быть целиком на скриптовом языке, начиная с некоторого порога сложности я бы выбрал питон.

Что такое «приложение целиком на скриптовом языке»? Алгоритмы на скриптовом языке делать? Или только логику?

Я имел в виду не выбор «C или скриптовый язык», а выбор «Tcl или другой скриптовый язык».

Этот выбор очень сильно набором библиотек определяется.

Непонятно, что конкретно вы хотите от хорошего сайта по Tcl? Соглашусь с тем, что чего не хватает — так это структурированности существующей документации и модулей. Полезная информация иногда беспорядочно раскидана по Tcl-вики.

Еще нехватает единого архива сторонних компонентов, хотя бы для Tk. В tcl-вики есть странички для многих, но они не систематизированы и иногда бесполезны.

Задали вопрос - ответили на него. Молодцы!

anonymous
()
Ответ на: комментарий от marvin_yorke

Какова его ниша?

Расширения для эггдропа.

fenris ★★★★★
()
Ответ на: комментарий от anonymous

Что такое «приложение целиком на скриптовом языке»? Алгоритмы на скриптовом языке делать? Или только логику?

Не знаю, как дать универсальный ответ. Если, например, архитектура определяется кодом на питоне, но некоторые модули реализованы на C — можно сказать, что приложение на питоне. Если архитектура определяется ядром на C, которое можно скриптовать на питоне — можно сказать, что приложение на C.

На самом деле лучше ни так, ни так не говорить :)

Для меня граница такая: если код, написаный на скриптовом языке, нужно проектировать (то есть разбивать на компоненты с продуманным API), то я не буду использовать Tcl. Если компоненты и API уже предоставляются скрипту движком или протоколом, а на скриптовом языке нужно писать только «glue code», то тут Tcl хорош.

Задали вопрос - ответили на него. Молодцы!

Ну я спросил чего не хватает вам, а пример привел чего не хватает лично мне.

gv
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.