команда interp в Tcl - PullRequest
       5

команда interp в Tcl

1 голос
/ 10 января 2020

Я изучаю Tcl, и теперь я заблокирован командой tcl interp

Я прочитал, что эта команда используется для создания и управления интерпретаторами, но что такое интерпретаторы и когда они используются?

1 Ответ

5 голосов
/ 10 января 2020

Tcl-интерпретаторы - это контексты выполнения. Каждый интерпретатор имеет свои собственные пространства имен, команды и глобальные переменные; они ничего не разделяют (за исключением нескольких вещей, таких как текущий рабочий каталог, которые являются глобальными для процесса). Интерпретаторы создаются либо как обычные (с полным набором встроенных команд Tcl), либо как safe интерпретаторы, в которых не представлены никакие команды, которые могут негативно повлиять на внешний мир.

In В общем, интерпретаторы изолированы друг от друга (до такой степени, что изоляция является функцией безопасности), но возможно сделать несколько вещей, которые пересекаются между ними: основные из них - то, что родительский интерпретатор может сказать одному из своих дочерних интерпретаторов: оцените скрипт для него и верните результат, и родительский интерпретатор может поместить команду alias в дочерний элемент, который при вызове вызовет (назначенную) команду в родительском элементе, передаваемом через родителей. Результатом этого является то, что вы можете рассматривать отношения родитель-потомок как нечто вроде отношений между ядром ОС и пользовательским процессом, а команда псевдонима похожа на системный вызов. (Это не идеальная аналогия, так что не задумывайтесь об этом.)

set foo [interp create -safe]
proc sayhelloto {who} {
    puts "Hello, $who!"
}
interp alias $foo hello {} sayhelloto

interp eval $foo {
    hello "World"
    hello "ThaDome23"
    exec echo rm -rf evilstuff
}
# Hello, World!
# Hello, ThaDome23!
# error: no such command 'exec'

Итак, вы используете дополнительные интерпретаторы всякий раз, когда вам нужен независимый контекст выполнения. Они тяжелые, поэтому вы не хотите создавать их слишком часто, но они намного дешевле, чем другой процесс.

Наконец, каждый интерпретатор связан с потоком, который его создает. Различные потоки всегда используют независимые взаимодействия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...