Tcl 로고

Tcl (원래 "Tool Command Language"에서 왔지만 관례적으로 "TCL"이 아니라 "Tcl"이라고 쓰며 "티클" 또는 "티씨엘"[1]로 발음한다.)은 스크립트 언어로써 존 오스터하우트가 만들었다. 처음에 같이 일하던 프로그래머들이 응용 프로그램에 포함시키기 위한 (조악한) 언어를 직접 만들며 좌절하는 모습을 보고 만들었다고 하지만, Tcl은 빠르게 인기를 얻었다. 비교적 배우기 쉽다고 알려져 있지만 충분히 강력하다. 보통 빠른 프로토타이핑, 스크립트 프로그램, GUI 및 테스팅에 많이 사용된다. 임베디드 플랫폼에서도 광범위하게 사용되며 Tcl 언어 전체 또는 그 작은 일부분만 떼어낸 버전을 이용하기도 한다. 또한 CGIIRC 봇을 만드는 데에도 사용되고 있다.

Tcl과 Tk GUI 툴킷을 묶어서 Tcl/Tk라고 자주 부른다.

특징

[편집]

Tcl은 아래와 같은 특징이 있다:

Tcl은 원래 함수형 언어로써 객체 지향 문법을 지원하지는 않았다. 그러나 최근 버전은 XOTcl과 같이 객체 지향 기능을 제공하는 확장을 지원한다. incr Tcl, Snit, 및 STOOOP (simple tcl-only object-oriented programming)와 같은 다른 객체 지향 확장도 존재한다.

Tcl은 고차 함수와 함수 요약이 언어 자체에서 지원되므로 함수형 프로그래밍은 쉽게 가능하지만 그러한 목적으로 많이 쓰이지는 않는다. 아래 예는 쉽게 두 함수를 합성할 수 있음을 보여준다.

proc o {f g x} {$f [$g $x]}

예제

[편집]

아래 예제는 아무 Tcl 셸에 붙여넣어도 실행 가능한 간단한 코드이다.

수 더하기

[편집]

방법 (ㄱ) - 'foreach' 반복문을 이용하여 덧셈

set numbers {1 2 3 4 5 6 7 8 9 10}
set result 0
foreach number $numbers {
    set result [expr {$result + $number}]
}
puts $result

방법 (ㄴ) - 'join' 명령을 이용하여 훨씬 더 우아한 방법으로 덧셈

 set numbers {1 2 3 4 5 6 7 8 9 10}
 puts [expr [join $numbers +]]

방법 (ㄷ) - 더하기 명령을 리스트 펼치기 문법과 함께 사용

 namespace import tcl::mathop::+
 set numbers {1 2 3 4 5 6 7 8 9 10}
 puts [+ {*}$numbers]

메아리 서버

[편집]

이벤트 기반 소켓 처리를 보여주는 잘 동작하는 간단한 예제

#!/usr/bin/env tclsh

# echo server that can handle multiple
# simultaneous connections.

proc newConnection { sock addr port } {

     # client connections will be handled in
     # line-buffered, non-blocking mode
     fconfigure $sock -blocking no -buffering line

     # call handleData when socket is readable
     fileevent $sock readable [ list handleData $sock ]
}

proc handleData { sock } {
     puts -nonewline $sock [ gets $sock ]
     if { [ eof $sock ] } {
        close $sock
     }
}

# handle all connections to port given
# as argument when server was invoked
# by calling newConnection
set port [ lindex $argv 0 ]
socket -server newConnection $port

# enter the event loop by waiting
# on a dummy variable that is otherwise
# unused.
vwait forever

전자 시계

[편집]

Tk와 timer 이벤트를 이용하는 또다른 예제(A simple A/D clock). 네 줄의 코드로 전자 시계를 만든다.

package require Tk
proc every {ms body} {
    eval $body
    after $ms [list every $ms $body]
}
pack [label .clock -textvar time]
every 1000 {set ::time [clock format [clock seconds] -format %H:%M:%S]} ;# RS

설명: 첫 번째 줄은 Tk 패키지를 불러들인다. (실제로는 4줄에 걸쳐있는) 두 번째 줄은 액션('body')를 매 'ms' 밀리초마다 반복해서 실행하는 명령어 "every"를 정의하고, 세 번째 줄은 변수 'time'에 연동되는 라벨을 만들고 스크린에 출력되도록 한다. 네 번째 줄은 매 초마다 변수 'time'이 형식이 갖춰진 지역 시간으로 갱신되도록 한다.

같이 보기

[편집]

각주

[편집]
  1. Tcler's Wiki Tcl vs. TCL Archived 2008년 7월 19일 - 웨이백 머신

외부 링크

[편집]