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)

Ответ на: комментарий от theNamelessOne

Если раньше зависание вашего приложения было багом, теперь вы можете сделать это фичей :)

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

Python 2.7.2, Tcl 8.5.12 Python жрет оперативку так, что можно на VPS-ках разориться. Единственный способ сделать чтобы Python не жрал оперативку, это не использовать Python.

anonymous
()

блин, а когда ActiveTcl разродится не бетой? (

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

Tcl цикл аналогичен

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

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

print в виде функции без лишнего импорта — похоже на третий питон

Принт со скобками можно написать в любом питоне, хоть в первом.

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

Внезапно админю одну узконаправленную систему (Тестирование сотовой связи со стороны абонента, используют некоторые ОПСОСОСЫ )

Там дохрена чего написано на тикле.

Вместо линукса используется SUSE (Что не очень удивительно, так как разрабы немцы и создатели сусе жили чуть ли не на соседней улице)

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

Это правда.

Просто исходя из того, что вменяемый питонист никогда не будет писать цикл на 100500 итераций, используя range во втором питоне, меня сбил с толку.

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

вообще поржал:

set temp 0
for {set i 0} {$i < 10000000} {incr i} {
    incr temp
}
puts $temp
alex@localhost $ time tclsh unnamed.tcl 
10000000

real	0m21.512s
user	0m21.241s
sys	0m0.016s

И python:

def f2():
    temp = 0
    for i in range(0,10000000):
        temp += 1
    return temp

print f2()
alex@localhost $ time python example.py                                                                              
10000000

real	0m2.800s
user	0m2.611s
sys	0m0.160s

И это при том, что так в питоне никто не пишет в здравом уме и трезвом рассудке) Тикль пипец какой медленный.

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

Странно, но скрипт

set t_begin [clock clicks -milliseconds]
for {set x 0} {$x<10000000} {incr x} {}
set t_end  [clock clicks -milliseconds]
puts [expr $t_end-$t_begin]
показал 9.8s на той же машине с Tcl 8.5

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

Хитрожопый какой, взял в питоне то функцию написал, чтобы тот байткомпилировал ее. Тикл тоже байткомпилирует только функции, а не основной текст. На моем i5-3470:

[nsf @ ~]$ cat test1.tcl
set temp 0
for {set i 0} {$i < 10000000} {incr i} {
        incr temp
}
puts $temp
[nsf @ ~]$ time tclsh test1.tcl
10000000

real    0m5.780s
user    0m5.753s
sys     0m0.010s
[nsf @ ~]$ cat test2.tcl
proc main {} {
        set temp 0
        for {set i 0} {$i < 10000000} {incr i} {
                incr temp
        }
        puts $temp
}
main
[nsf @ ~]$ time tclsh test2.tcl
10000000

real    0m0.416s
user    0m0.413s
sys     0m0.000s
[nsf @ ~]$ cat test.py
def f2():
    temp = 0
    for i in range(0,10000000):
        temp += 1
    return temp

print f2()
[nsf @ ~]$ time python2 test.py
10000000

real    0m0.627s
user    0m0.577s
sys     0m0.047s

Отсосал ваш питон на циклах :D

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

Отсосал ваш питон на циклах :D

~$ cat 1.c
#!/usr/bin/tcc -run

int main() {
    int temp = 0, i;
    for( i = 0 ; i < 10000000 ; ++i ) ++temp;
}

~$ time ./1.c

real	0m0.017s
user	0m0.012s
sys	0m0.008s

они все отсосали скрипту на C

wota ★★
()

от имени анонимусов - плюсую 2 раза

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

Отсосал ваш питон на циклах :D

сколько миллисекунд разницы? :D Или буду использовать sum, или воспользуюсь библиотекой для вычислений. А что пользы в цикле без задачи? :)

chinarulezzz ★★
()

Кстати раз вы тут обсуждаете tcl vs. python, я тут писал коммент на реддите как раз в тему, просто скину его сюда:

For those who think that tcl is slow compared to other scripting languages. It's not true.

Let's take a simple benchmark I wrote. It's a naive perlin noise image renderer. Nothing fancy, every script renders 256x256 perlin noise images 100 times and renders only one last image to the console (for checking correctness). I have versions written in many languages: https://gist.github.com/1170424

 * Python: https://gist.github.com/1170424#file-test-py
 * TCL: https://gist.github.com/1170424#file-test-tcl

(better clone it, because for me for some reason new gist.github.com interface displays indentation in a very wrong way, clone url: https://gist.github.com/1170424.git)

So, on my ivy bridge i5-3470 here are the results:

 * TCL (8.5.13): 1m23.956s
 * Python (2.7.3): 1m15.791s
 * Python (3.3.0): 1m35.352s

As you can see TCL is just ~10% slower than mature Python 2, and even faster than Python 3. To run the script on python 3 I just did s/xrange/range/.

Here some other results just for fun:

 * PyPy (2.0.0 beta1): 0m2.638s
 * C (gcc 4.7.2): 0m0.082s (flags: -std=c99 -ffast-math -O3 -march=native)
 * C (clang 3.1): 0m0.155s (flags: -std=c99 -ffast-math -O3)
 * Go (gc 1.0.3): 0m0.863s (no flags)
 * Go (gccgo 4.7.2): 0m0.287s (flags: -ffast-math -O3 -march=native)
 * Rust (rustc 0.4): 0m0.507s (flags: --opt-level=3)
 * D (dmd 2.060): xxx (my code is broken on amd64 arch)

Have fun. Tcl/Tk is nice.

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

меряетесь тут а вдруг меряете холдный старт интерпретатора потому что ваш цыкл просто удалется как мертвый код (особенно в примере с Си)

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

А теперь вводите данные извне.

~$ cat 1.c
#!/usr/bin/tcc -run

int main( int argc, char** argv ) {
    int temp = 0, i, n = atoi( argv[ 1 ] );
    printf( "%d\n", n );
    for( i = 0 ; i < n ; ++i ) ++temp;
}

~$ time ./1.c 10000000
10000000

real	0m0.017s
user	0m0.012s
sys	0m0.004s

tcc - не такой продвинутый компилятор, чтоб делать такие оптимизации, это gcc бы тут просто выкинул цикл

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

потому что ваш цыкл просто удалется как мертвый код

теоретики в треде:

~$ time ./1.c 1000000000
1000000000

real	0m1.581s
user	0m1.572s
sys	0m0.000s
wota ★★
()
Ответ на: комментарий от chinarulezzz

Угу... и сотнями метров памяти.

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

Ну, вот пришел дядя и достал свой могучий пеписькомер. Теперь детишкам осталось, плача навзрыд, разойтись по-домам.

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

Попробуй так

#!/bin/sh
# -*- tcl -*-
# The next line is executed by /bin/sh, but not tcl \
exec wish "$0" ${1+"$@"}

package require Tk

ttk::label .l1 -text 10000000
ttk::button .b1 -text "Start" -command tests
pack .l1 .b1 -side left -expand 1 -fill x

proc tests {} {
	set t_begin [clock clicks -milliseconds]
	set test 0
	for {set x 0} {$x<10000000} {incr x} {
		incr test
	}
	set t_end  [clock clicks -milliseconds]
	.l1 config -text [expr $t_end-$t_begin]
}

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

Поддержка ООП из коробки — сомнительная фича

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

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

В Tcl всегда сторонние ОО-системы были на уровне. В Фортране же нет возможности метапрограммирования и ООП не воткнешь дополнительной библиотекой.

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

Вот это новость! Надо бы отметить.

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

Для приличия можно было и перл протестить :)

                   
#!/usr/bin/perl
use strict;
use warnings;
$\ = "\n";

my $temp = 0;
for (my $i = 0; $i < 10000000; $i++) { 
  $temp++
}

print $temp;
» cat /proc/cpuinfo | grep 'model name' | head -n1
model name      : AMD Phenom(tm) II X4 925 Processor

» time ~/staticperl perl bn.pl
10000000
~/staticperl perl bn.pl  0.76s user 0.00s system 98% cpu 0.769 total

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

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

В TCL не силён, не могу сказать. А в Фортране ООП реализовывался де-факто ещё средствами F95. Просто явно ничего не именовалось. Но воткнули совсем явно. А то, что не дополнительной библиотекой, — факт. Всё-таки компилируемый язык, тяжко это в нём сделать, препроцессинг нужен и прочие радости жизни..

Const
()

Мертвецы восстали из могил. Символично, что именно сегодня.

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

Хитрожопый какой, взял в питоне то функцию написал, чтобы тот байткомпилировал ее. Тикл тоже байткомпилирует только функции, а не основной текст.
взял в питоне то функцию написал, чтобы тот байткомпилировал ее.

Аплодирую стоя. Виртуальная машина питона выполняет только байткод.

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

Я бы сказал, «не гламурненько», но вполне функционально. В конце концов, _в_работе_ вообще пофиг, круглые там кнопки или выпукло-светящиеся, главное - чтобы сами виджеты были удобные.

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

Я использовал Tcl/Tk для IRC клиента. :) С небольшим хаком получилось даже сделать многоплатформенно (со шрифтами боролся).
Думаю, что ниша этого языка - небольшие GUI перделки, т.к. позволяет без особых стомегабайтных дизайнеров сваять приличный тырфейс и при этом не потеряться в его коде. К тому же, достаточно прост для начинающих, не привязывая их к конкретной платформе.

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

А тикль сейчас вообще для чего используется?

Например, любимые МакПорты написаны на тикле. А чего тут такого? Язык как язык. Если кто-то скажет, что на нём пишут только оголтелые ретрограды, пускай говорят, нам-то что? Писали и будем писать. С уважением.

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