Форум программистов, компьютерный форум, киберфорум
Другие языки программирования
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
5 / 5 / 3
Регистрация: 25.07.2016
Сообщений: 182
1

Крайне непопулярный язык Tcl/Tk

26.08.2018, 18:23. Просмотров 5161. Ответов 36
Метки нет (Все метки)

Цитата Сообщение от mik-a-el Посмотреть сообщение
Это крайне непопулярные языки.
Приведу пару приложений для того чтобы можно было немного представить
что собой представляет язык Tcl и его графическая библиотека Tk ...
№1 Перевод из арабских в римские и обратно.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#Rim_Arab.tcl
source [file join [file dirname [info script]] chisla_rim_arab.tcl]
source [file join [file dirname [info script]] chisla_arab_rim.tcl]
source [file join [file dirname [info script]] Valid_Int.tcl]
source [file join [file dirname [info script]] Valid_Rim.tcl]
 
package require Tk
. config -bg gray75
set w .search
catch {destroy $w}
toplevel $w
wm title $w "Арабские << >> Римские!"
frame  $w.one
label  $w.one.label    -text "Это приложение переводит числа из арабской системы \
                             счисления в римскую и обратно!"
pack   $w.one.label    -side left
 
frame  $w.two
label  $w.two.label           -text " Арабское  число:"
entry  $w.two.entry           -textvar Arab  -fg red   -validate  all  -vcmd {Valid_Int %P}
ttk::button $w.two.button     -text "Вычислить!"  -command {$w.three.entry  insert 0 "[eval {Arab_Rim $Arab}]"}
bind   $w.two.entry     <Return>  {$w.three.entry  insert 0 "[eval {Arab_Rim $Arab}]"}
ttk::button $w.two.button1    -text "Очистить!"   -command {$w.two.entry   delete 0 end}
bind   $w.two.entry     <Delete>  {$w.two.entry  delete  0 end}
 
frame  $w.three
label  $w.three.label         -text " Римское    число:"
entry  $w.three.entry         -textvar Rim   -fg blue  -validate  all  -vcmd {Valid_Rim  %P}         
ttk::button $w.three.button   -text "Вычислить!"  -command {$w.two.entry    insert 0 "[eval {Rim_Arab $Rim }]"}
bind   $w.three.entry   <Return>  {$w.two.entry    insert 0 "[eval {Rim_Arab $Rim }]"}              
ttk::button $w.three.button1  -text "Очистить!"   -command {$w.three.entry delete 0 end}
bind   $w.three.entry   <Delete>  {$w.three.entry delete 0 end}
 
pack   $w.two.label    $w.two.entry    $w.two.button     $w.two.button1    -side left
pack   $w.three.label  $w.three.entry  $w.three.button   $w.three.button1  -side left
pack   $w.one  $w.two  $w.three    -side top
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#chisla_arab_rim.tcl
proc Arab_Rim {Arab} {
source [file join [file dirname [info script]] data_arab_rim.tcl]
set E 0; set Rim ""
while {0 < $Arab} {
 while {[lindex $arab $E] <= $Arab} {
  append Rim [lindex $rim $E]
  set Arab [expr {$Arab - [lindex $arab $E]}]
      }
      incr E
   }
   return $Rim
}
Python
1
2
3
# data_arab_rim.tcl
set arab {1000 900 500 400 100 90 50 40 10 9 5 4 1}
set rim  {M CM D CD C XC L XL X IX V IV I}
Python
1
2
#Valid_Int.tcl
proc Valid_Int {Arab} {return [expr {[string is integer $Arab] && [expr {$Arab < 4000}]}]}
Python
1
2
3
4
5
6
7
8
#chisla_rim_arab.tcl
proc Rim_Arab {Rim} {
source [file join [file dirname [info script]] data_rim_arab.tcl]
set RimCM [string map {IV IIII IX VIIII XL XXXX XC LXXXX CD CCCC CM DCCCC} $Rim]
set RimN  [split $RimCM {}]
set Qwer 0; foreach P $RimN {set Qwer [expr {$Qwer + $r_a($P)}]}
set Arab $Qwer 
}
Python
1
2
3
#data_rim_arab.tcl
set r_a(I) 1;   set r_a(V) 5;   set r_a(X) 10; set r_a(L) 50
set r_a(C) 100; set r_a(D) 500; set r_a(M) 1000
Python
1
2
#Valid_Rim.tcl
proc Valid_Rim {Rim} {return [regexp {^(M{0,3})(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$} $Rim]}
Добавлено через 15 минут
№2 Игра "Жизнь"
Python
1
2
3
4
5
6
7
8
9
10
11
12
#Live.tcl
label       .label     -text     "Введите размерность жизненого пространства:" 
entry       .entry     -textvar  razmer        -validate   all     -vcmd  {Valid %P}
ttk::button .button_1  -text     "Вычислить!"  -command    {source [file join [file dirname [info script]] forma.tcl]}
bind        .entry     <Return>                            {source [file join [file dirname [info script]] forma.tcl]}
ttk::button .button_2  -text     "Очистить!"   -command    {.entry delete 0 end}
bind        .entry     <Delete>  {.entry delete 0 end}
pack        .label  .entry  .button_1  .button_2    -side   left
# --------------------------------------------------------------------------------------------------
proc Valid {razmer} {
     return [regexp {^(3{0,1}|4{0,1}|5{0,1}|6{0,1}|7{0,1}|8{0,1}|9{0,1}|10{0,1})$} $razmer]
}
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#forma.tcl
source [file join [file dirname [info script]] tablica.tcl]
source [file join [file dirname [info script]] spisok.tcl]
 
set u [format "%d" $razmer]
set d [expr {1.0 / $u}]
set t [expr {pow($u, 2)}]
set order [Spisok $t]
 
package require Tk
set w .puzzle
catch {destroy $w}
toplevel $w  
set font 04ddd84
label $w.msg  -font  $font  -wraplength  4i  -justify  left  -text  "Жизненное пространство - $u на $u."
pack  $w.msg  -side  top
 
wm title    $w    "Игра \"Жизнь\""
wm iconname $w    "$t - Жизнь"
scrollbar   $w.s
 
if {[tk windowingsystem] eq "aqua"} {set frameSize 360} else {set frameSize 240}
 
frame $w.frame    -width    $frameSize     -height   $frameSize     -borderwidth  2 \
                  -relief   sunken         -bg       [$w.s cget     -troughcolor]        
pack  $w.frame    -side     top            -pady     1c             -padx    1c
 
destroy $w.s
 
tablica $order
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#tablica.tcl
source [file join [file dirname [info script]] pokolenie.tcl]
 
proc tablica {order } {
 global  i u d w t
 for {set i 0} {$i < $t} {incr i} {
 destroy  $w.frame.$i
 set num [lindex  $order $i]
 set xpos($i) [expr {($i%$u)*$d}]
 set ypos($i) [expr {($i/$u)*$d}]
ttk::button  $w.frame.$i   -text  $num        -command   {set order [pokolenie $order]; tablica $order}
place        $w.frame.$i   -relx  $xpos($i)   -rely   $ypos($i)   -relwidth  $d   -relheight  $d
   }
}
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#pokolenie.tcl
proc pokolenie {order} {    
 global   u t
 set Q {lindex $order $f}
 set W {set Xs [expr {$Xs+1}]}
 set E {set order1 [lappend order1 "" ]}
 set R {set order1 [lappend order1 "X"]}
  for {set i 0} {$i < $t} {incr i} {           
          set Xs 0; set q [expr {($i+1)%$u}]
   if {([set f [expr {$i-$u}]]    >= 0              && [eval $Q] == "X" && [eval $W]) |
       ([set f [expr {$i-$u+1}]]  >= 0 &&  $q != 0  && [eval $Q] == "X" && [eval $W]) |  
       ([set f [expr {$i+1}]]     < $t &&  $q != 0  && [eval $Q] == "X" && [eval $W]) |
       ([set f [expr {$i+$u+1}]]  < $t &&  $q != 0  && [eval $Q] == "X" && [eval $W]) |
       ([set f [expr {$i+$u}]]    < $t              && [eval $Q] == "X" && [eval $W]) |
       ([set f [expr {$i+$u-1}]]  < $t &&  $q != 1  && [eval $Q] == "X" && [eval $W]) | 
       ([set f [expr {$i-1}]]     >= 0 &&  $q != 1  && [eval $Q] == "X" && [eval $W]) |
       ([set f [expr {$i-$u-1}]]  >= 0 &&  $q != 1  && [eval $Q] == "X" && [eval $W])} {  
    switch -- $Xs {
     1 {eval $E}
     2 {if {[lindex  $order  $i] == "X"} then {eval $R} else {eval $E}}
     3 {eval $R}
     4 {eval $E}
     5 {eval $E}
     6 {eval $E}
     7 {eval $E}
     8 {eval $E}
}     
      } else {eval $E}
   }
    return $order1
}
Python
1
2
3
4
5
6
7
8
9
#spisok.tcl
proc Spisok {t} {    
 for {set i 0} {$i < $t} {incr i} {        
  set n [expr {round(rand()*1)}] 
   if {$n == 1} then {set order [lappend order "X"]} \
                 else {set order [lappend order ""]}     
   }
   return $order    
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2018, 18:23
Ответы с готовыми решениями:

[TCL] Чем компилировать TCL?
Очень актуальной на настоящий момент для меня является известная программа Coyote, ибо хочу...

Необходим малоизвестный непопулярный стабильный браузер. Ваши варианты.
Доброго времени суток. Задался целью перейти на какой-нибудь малоизвестный, непропиаренный браузер....

TCL, Expect
Как можно одновременно подключиться к нескольким машинам по SSH используя Expect-скрипт. Моя идея...

скрипт announces.tcl
Подскажите пожалуйста извените конечно что не там тему создала бо не знаю где имеется скрипт...

36
Эксперт Python
4315 / 3188 / 1033
Регистрация: 28.10.2013
Сообщений: 8,227
18.12.2019, 22:43 21
Цитата Сообщение от supmener Посмотреть сообщение
embeddable сборку в него засунуть?
Да.

-----------------------------------
Разумеется, exe-шник .NET приложения частично настоящий, поэтому он способен запуститься даже при отсутствии нужного рантайма (CLR), но только для того, чтобы сказать юзеру - "установи-ка ты все-таки вот такую версию .Net Framework":-)
1
114 / 62 / 9
Регистрация: 26.06.2013
Сообщений: 3,003
18.12.2019, 22:51 22
Здесь узнал, какие преимущества у Python в сравнении с Tcl/Tk. А существует ли в чем то превосходство у Tcl/Tk над Python?
0
Фрилансер
3680 / 2051 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
19.12.2019, 11:40 23
supmener, Tcl/Tk давно мёртв. Зачем Вы реанимируете полчища трупов по разным темам?
0
3336 / 1364 / 231
Регистрация: 10.12.2013
Сообщений: 4,676
04.05.2020, 15:00 24
Есть такая специализация у форумных священных воинов: "Могильщик компьютерных языков"




Cisco IOS Scripting with TCL Configuration Guide
https://www.cisco.com/c/en/us/... h_Tcl.html
0
Black Fregat
04.05.2020, 16:01
  #25

Не по теме:

volodin661, у Вас полгода ушло на поиски единственного примера реального использования Tcl?

0
3336 / 1364 / 231
Регистрация: 10.12.2013
Сообщений: 4,676
04.05.2020, 16:35 26
Black Fregat,
нет.
0
3336 / 1364 / 231
Регистрация: 10.12.2013
Сообщений: 4,676
08.05.2020, 16:54 27
Продолжая тему Восставшие мертвецы,

скажу, что замечательная база SQLite родилась сначала как расширение Tcl и сохранила с ним
до сих пор самую тесную связь. Tcl, кстати, произносится как [тикeль]', поэтому интерфейс Tcl/SQLite
смело можно называть тикeль-сикeль.

Так вот, именно в связке с Tcl sql-интерфейс смотрится наиболее органично.
  • Retrieve the names of the tables stored in a sqlite database:
Perl
1
2
3
4
5
package require sqlite3
# 'db'  выступает в качестве  database-handle 
sqlite3 db "database.db" ; # Open up an existing database or create a new empty one.
set tableNames [db eval {SELECT tbl_name FROM sqlite_master}]
puts $tableNames
  • Retrieve the names of the columns stored in a sqlite database(variable columnName):
Perl
1
2
db eval "SELECT * FROM $tableName LIMIT 1" x {set columnName $x(*)} 
puts $columnName
  • You can also use the PRAGMA statement table_info(table_name) to retrieve column information.
Perl
1
2
set columns [db eval "PRAGMA table_info($tableName)"]
puts $columns
  • Retrieve the row data from a table
Perl
1
2
3
4
5
6
7
8
db eval "Select * FROM $i" values {
   set columnNames $values(*)
   set rowList {}
   foreach column $columnNames {
      lappend rowList $values($column)
   }
   puts $rowList
}
  • SQLite allows the TCL programmer to extend the functionality of the underlying SQL language by adding
  • new SQL functions written in TCL and by intercepting and modifying the processing of SQL commands
  • at strategic points.
  • Tcl procedures can be used to create new SQL functions. As a trivial example, consider giving SQLite an
  • sqrt() function (which it lacks by default) using a Tcl script:
Perl
1
2
proc sql_sqrt {v} {return [expr {sqrt($x)}]
db function sqrt sql_sqrt
  • Once a new function is defined in this way, it can be used wherever any of the built-in SQL functions are
  • allowed. For instance:
Perl
1
2
db eval {CREATE TABLE t2 AS SELECT sqrt(b) FROM t1}
db eval {SELECT x FROM t3 WHERE sqrt(a*a+b*b)>10}
Добавлено через 10 минут
И, продолжая тему расширений, напомню о полезнейшей утилите Expect,
реализованной как расширение к языку Tcl.

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#spawn_id is another default variable in expect.
#It is good practice to close spawn_id handle created by spawn command
set timeout 60
spawn ssh $user@machine
while {1} {
  expect {
 
    eof                          {break}
    "The authenticity of host"   {send "yes\r"}
    "password:"                  {send "$password\r"}
    "*\]"                        {send "exit\r"}
  }
}
wait
close $spawn_id
3
894 / 643 / 216
Регистрация: 30.06.2015
Сообщений: 3,527
Записей в блоге: 34
09.05.2020, 18:03 28
Цитата Сообщение от supmener Посмотреть сообщение
А существует ли в чем то превосходство у Tcl/Tk над Python?
Преимущество в простоте синтаксиса и в простоте философии. Философия одна: все есть команда и все есть строка. Это придает удивительную мощность языку. Я не веду речь об эффективности реализации.
Тем, кто утверждает, что данный язык не заслуживает отдельного раздела я приведу цитату из вики:
Tcl, наряду с Perl и Python, стал одним из трёх классических скриптовых языков общего назначения.
То есть один из трех скриптовых языков. Если бы был раздел, то и интерес к нему усилился бы. Питон и перл это языки от людей с пулей в голове. Взяли все от всего, смешали в кучу, заранее решив, что это понравится многим, и этот винегрет приправленный своими прибамбасами, от которых тошнит, они предложили в качестве продукта. Получилось то, что получилось: ширпотреб А тикль делали просто нормальные люди. И используют его в сотнях корпораций, но не трезвонят об этом, достаточно посмотреть список того, что на нем сделано, боюсь вы устанете читать этот список.
На мой взгляд это лучший скриптовый язык.
1
114 / 62 / 9
Регистрация: 26.06.2013
Сообщений: 3,003
09.05.2020, 20:20 29
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Я не веду речь об эффективности реализации
А какая там ситуация?
0
3336 / 1364 / 231
Регистрация: 10.12.2013
Сообщений: 4,676
09.05.2020, 21:26 30
CoderHuligan,
возьму на себя смелость предложить не использовать здесь весь этот чудо-арсенал аргументов от ветеранов священных войн
типа выстрела в ногу, пули в голове или кинжала в жопе.
Надоели.
0
894 / 643 / 216
Регистрация: 30.06.2015
Сообщений: 3,527
Записей в блоге: 34
10.05.2020, 11:41 31
Цитата Сообщение от supmener Посмотреть сообщение
А какая там ситуация?
С 8 версии значительно лучше, во всяком случае производительность не ниже PHP и немного уступает питону.
Цитата Сообщение от volodin661 Посмотреть сообщение
возьму на себя смелость предложить не использовать здесь весь этот чудо-арсенал аргументов от ветеранов священных войн
Ну, конечно - наступил на любимую мозоль. Извините, больше не буду. А насчет TCL, то скорее всего надо создать отдельную тему, так как название этой темы довольно провокационное в угоду другим языкам. Да и не правда это, что не популярный. Популярный в определенных кругах, которые не афишируют свои разработки.. Рабочая лошадка, одним словом.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10898 / 6814 / 1623
Регистрация: 25.07.2009
Сообщений: 12,519
10.05.2020, 15:47 32
Цитата Сообщение от CoderHuligan Посмотреть сообщение
А насчет TCL, то скорее всего надо создать отдельную тему,
Ну и будет там в год полторы темы создаваться. Был когда-то PERL отдельным разделом, и тот в "другие языки" перенесли, активность там "не бей лежачего". А он всё-таки несколько популярнее TCL...
0
894 / 643 / 216
Регистрация: 30.06.2015
Сообщений: 3,527
Записей в блоге: 34
10.05.2020, 16:06 33
Цитата Сообщение от easybudda Посмотреть сообщение
А он всё-таки несколько популярнее TCL...
То есть разделы создаются по критериям популярности/непопулярности, мэйнстрим/немэйнстрим, модно/немодно? А искусства ради нельзя что ли? Думаю одной темы пока достаточно будет.
0
3336 / 1364 / 231
Регистрация: 10.12.2013
Сообщений: 4,676
10.05.2020, 18:18 34
хе-хе.
напомнило классическое из "Доживём до понедельника"

«Никто не обязан помнить второстепенных авторов»

Добавлено через 23 секунды
Ща поищу ..

Добавлено через 57 секунд
0
894 / 643 / 216
Регистрация: 30.06.2015
Сообщений: 3,527
Записей в блоге: 34
11.05.2020, 13:59 35
Может все-таки организовать темку типа "сравниваем Perl, Pithon и TCL", а там уже мериться пипи.. И кстати выяснить все-таки что есть по сути скриптовый язык, что отличает скриптовость от нескриптовости и какое отношение язык общего назначения приписывается к скриптовым языкам и т.д. И что в итоге останется от первых двух озвученных в смысле их скриптовсти..
0
3336 / 1364 / 231
Регистрация: 10.12.2013
Сообщений: 4,676
11.05.2020, 14:13 36
Я - за.

Добавлено через 3 минуты
Не знаю, как сравнивать 'скриптовость', но утверждение тиклеров, что Tcl ныне не уступает Perl в производительности
и в некоторых regexp тестах превосходит последний в 4 раза, я бы проверил.

Добавлено через 5 минут
Anyway,
не давать отдельную ветку в этом разделе языку, который входит в Core всех дистрибутивов Unix - вопиющее жлобство НМВ.
0
Администратор
Эксперт .NET
12936 / 10547 / 4365
Регистрация: 17.03.2014
Сообщений: 21,260
Записей в блоге: 1
11.05.2020, 18:54 37
Цитата Сообщение от volodin661 Посмотреть сообщение
не давать отдельную ветку в этом разделе языку, который входит в Core всех дистрибутивов Unix - вопиющее жлобство НМВ.
Это как-то мешает обсуждению? Созданию тем?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2020, 18:54

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

Перевести код в TCL
Помогите перевести в язык TCL или есть трансляторы? use strict; use warnings; my $f1 =...

Телевизор TCL и китайская антенна
Всем доброго времени суток. Когда то давно купили телевизор TCL за 25$ б/у. Старого типа, ЭЛТ....

Tcl/Tk via Common Lisp и LTK
Можно подробнее? Во-первых, интерес есть, и по мере наличия времени я бы присоединился. Ну и...

Ryzen 5 1600x Tdie и Tcl
Процессор в простое греется до ~55 градусов. В стресс тесте Аида до 85 градусов. Почему такая...

Ремонт телевизора TCL. Кадровая
Привет всем! Прошу помощи понять проблему телевизора TCL (см.схему). Проблема началась ни с...

Лисп против TCL, или наоборот?
Нет идеальных языков, так как даже на солнце бывают пятна. Часто, тот или иной иснструмент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.