P1
Tcl является программируемым языком программирования, таким как Lisp, в обоих можно писать новые структуры управления, а в более общем плане можно специализироваться на обоих языках. Но в то время как в Lisp обычно нужно писать макросы, в Tcl нужно писать обычные процедуры.
На Lisp есть типы, более или менее похожие на Python и Ruby. Например, чтобы использовать число в качестве аргумента функции манипулирования строками, необходимо произвести преобразование из одного типа в другой.
В Tcl сериализация происходит только для многих типов, потому что почти все имеет строковое представление. Вы можете записать список Tcl в файл, просто поместив $fd $list. Это невозможно в Lisp, где необходимо выполнить сериализацию.
Центральный тип данных на Lisp - это список, а центральный тип данных Tcl - строка. Tcl также широко использует списки, которые являются просто специальными строками. В современном мире наличие строк в качестве базового типа обычно более полезно, потому что многие думают, как HTML, XML, сетевые протоколы, о строках больше, чем о списках. Работа со строками в Lisp не так естественна, как с Tcl. С другой стороны, возможности списков на Tcl позволяют использовать многие парадигмы программирования, используемые в Lisp. Например, преобразовать строку в список символов, и манипулировать ею как списком, когда это удобнее.
Мир Tcl менее фрагментирован. Существует не большое количество реализаций Tcl, а также большая библиотека по умолчанию.
Tcl имеет встроенное событийно-ориентированное программирование, интегрированное с библиотекой ввода/вывода. Написать сложные сетевые программы, используя только то, что предусмотрено в языке ядра, настолько просто, что это забавно.