\documentclass[]{article}
\usepackage{amsmath,graphicx,supertabular,hyperref,tabularx,ifthen}
\title{TIP \#9: Tk Standard Library}
\date{November 07, 2000}
\author{Marty Backe, Larry W. Virden, Jeff Hobbs}
\urlstyle{sf}
\setlength{\parskip}{1ex}
\setlength{\parindent}{0pt}
\def\tipversion$#1${\texttt{\$#1\$}}
\def\tiplangle#1{\ensuremath{<}}
\def\tiprangle#1{\ensuremath{>}}
\def\tipbar#1{\ensuremath{|}}
\def\tipmail#1#2{\(\langle\){\small\expandafter\url{#1@#2}}\(\rangle\)}
\ifx\pdfoutput\undefined
\newcommand{\tipimage}[2]{\typeout{Make sure you download #1.eps}\ifthenelse{\lengthtest{0.8\textwidth>#2}\and\lengthtest{0pt<#2}}{\includegraphics{#1.eps}}{\includegraphics[width=0.8\textwidth]{#1.eps}}}
\newcommand{\tipxref}[1]{}
\newcommand{\tipxrefend}{}
\else
\newcommand{\tipimage}[2]{\typeout{Make sure you create #1.pdf}\ifthenelse{\lengthtest{0.8\textwidth>#2}\and\lengthtest{0pt<#2}}{\includegraphics{#1.pdf}}{\includegraphics[width=0.8\textwidth]{#1.pdf}}}
\pdfcatalog{/PageMode /UseOutlines}
\newcommand{\tipxref}[1]{\pdfannotlink attr {/C [0.5 0.5 1.0] /Border [0 0 1]} goto name {#1}}
\newcommand{\tipxrefend}{\pdfendlink}
\fi
\newenvironment{tipabstract}{\begin{abstract}}{\end{abstract}}
\begin{document}\maketitle
\begin{center}\begin{tabularx}{\linewidth}{|r@{: }X|}\hline
\textbf{TIP \#9}&\textbf{Tk Standard Library}\\\hline
Author&

Marty Backe \tipmail{mgbacke}{usa.net}
\par
Larry W. Virden \tipmail{lvirden}{yahoo.com}
\par
Jeff Hobbs \tipmail{jeffh}{activestate.com}
\\
Created&Tuesday, \(\text{7}^{\text{th}}\) November 2000\\
Type&Project\\
Tcl Version&\(8.4\)\\
State&Withdrawn\\
Vote&Pending\\
Version&\tipversion$Revision: 1.9 $\\
Post History&\\
\hline\end{tabularx}\end{center}
\thispagestyle{empty}\pagestyle{empty}
\begin{tipabstract}

A Tk standard library shall be bundled with the core Tcl/Tk distribution. The library will consist of general purpose widgets and composite widgets for use in constructing Tcl/Tk applications. The library of Tk components will be written in Tcl/Tk.
\end{tipabstract}
\tableofcontents\setcounter{page}{0}\clearpage\pagestyle{plain}

\section{Rationale}

Although Tcl ``ships'' with a comprehensive set of native (compiled) base Tk widgets, it lacks a library of composite widgets, from which sophisticated applications can readily be built with minimal reinvention.

Although the Tcl community has created a wealth of general purpose Tk widgets, generally they are not centrally located or distributed, making their use problematic. This requires that Tcl programs which make use of such widgets must either distribute them or direct the end user on their acquisition and installation. Arguably, the success and higher visibility of other ``competing'' scripting languages can be attributed in some part to their extensive libraries. Tcl/Tk should continue this trend.

Tcl is perhaps unique in that it is considered both a graphical (Tk) and non-graphical (Tcl) programming language. Work has begun in implementing a standard library for Tcl. It could be argued that Tcl/Tk's largest base, and its largest growth area, is with regards to graphical applications. To this end, Tcl needs a comprehensive, and well maintained Tk standard library.

Finally, to lower the barrier of using the Tk libraries, they should be Tcl/Tk based. This helps to assure cross platform independence without requiring the user to compile code against a source distribution.

\section{Specification}
\begin{itemize}
\item{}
The standard Tk library will be called ``tklibX.Y'', where ``X.Y'' will follow the version number of the Tcl/Tk distribution that it's compatible with.
\item{}
Major/minor releases of the tklib shall coincide with the major/minor releases of Tcl/Tk. That is, if Tcl/Tk version 8.5 is released, a tklib8.5 shall be released. The tklib8.5 version shall be tested and confirmed to be compatible with the release of Tcl8.5 \& Tk8.5. Note that changes to tklib will not necessarily be required for it to receive a new version number, but the new version shall indicate that it has been tested and verified compatible with the new Tcl/Tk version.
\item{}
The tklib shall be considered part of the ``core'' of Tcl/Tk. That is, releases of major/minor versions of Tcl/Tk shall not be made independent of tklib.
\item{}
Additions to the tklib shall be made through a voting process, which is to be decided.
\item{}
Tklib components shall include a test suite. This test suite will be the means by which the library is verified as compatible with a new release of Tcl/Tk.
\item{}
Tklib components shall include documentation to the same standards as Tcl/Tk, i.e., man pages, etc. Let's continue the tradition of Tcl/Tk having the best documentation.
\item{}
The tklib components will include one or more demonstration scripts that show to best effect all of the features and options provided by the component. A picture is worth a thousand words! The Tk, BWidgets, and Iwidgets demos are prime examples to be emulated.
\item{}
Tklib components can be dependent on other tklib components. If tklib and tcllib become coordinated efforts, the tklib components can be dependent on tcllib components.
\item{}
The tklib can (and hopefully will) include megawidgets.
\item{}
Tklib components shall be written in Tcl/Tk.
\item{}
Tklib components shall be implemented in their own namespace and distributed in package form.
\item{}
Tklib components do not have to be unique with regards to other tklib components, although there shall be differentiating characteristics between them. There is more then one way to skin a cat.
\item{}
The tklib shall not contain applications, IDEs, or development tools.
\end{itemize}

\section{Notes}

A tklib module has been created next to the aforementioned tcllib at \url{http://tcllib.sf.net/} This creates the basic infrastructure for people to work in, but does not set any status related to the core as yet.

\vspace{3ex}\hrule\vspace{1.5ex}

\textit{Larry W. Virden writes}:

\begin{quote}
It appears to me that tklib isn't going to be bundled with the tk source code distribution any more than tcllib getting distributed with the tcl core distribution.
\end{quote}

\begin{quote}
If the TCT concurs that this is the case, then I would propose that this TIP be withdrawn. tklib exists now, and to date, submissions are extremely rare.
\end{quote}

\begin{quote}
Here we are, some time later, and no action still on either withdrawing or rejecting this TIP. Perhaps some action could be taken on this TIP?
\end{quote}

\vspace{3ex}\hrule\vspace{1.5ex}

\section{Copyright}

This document has been placed in the public domain.

\section{Colophon}

\textit{TIP AutoGenerator --- written by Donal K. Fellows}
\end{document}
