А что это, если это не так?
Все, что я читал о TCL, гласит, что все это просто строка в нем.Внутри интерпретатора могут быть некоторые другие типы и структуры (для производительности), но на уровне языка TCL все должно вести себя как строка.Или я не прав?
Я использую IDE для программирования на ПЛИС под названием Vivado.Там активно используется автоматизация TCL.(Версия TCL все еще 8.5, если это помогает). Сценарии TCL в Vivado опираются на какую-то «объектно-ориентированную» систему.Веб-поиск не показывает никаких следов этой системы в другом месте.В этой системе объекты обычно получают из внутренней базы данных с помощью команд get_ *.Я могу манипулировать свойствами этих объектов с помощью команд типа get_property
, set_property
, report_property
и т. Д. Но эти объекты кажутся чем-то большим, чем просто строка.Я попытаюсь проиллюстрировать:
> set vcu [get_bd_cells /vcu_0]
/vcu_0
> puts "|$vcu|"
|/vcu_0|
> report_property $vcu
Property Type Read-only Value
CLASS string true bd_cell
CONFIG.AXI_DEC_BASE0 string false 0
<...>
> report_property "$vcu"
Property Type Read-only Value
CLASS string true bd_cell
CONFIG.AXI_DEC_BASE0 string false 0
<...>
Но:
> report_property "/vcu_0"
ERROR: [Common 17-58] '/vcu_0' is not a valid first class Tcl object.
> report_property {/vcu_0}
ERROR: [Common 17-58] '/vcu_0' is not a valid first class Tcl object.
> report_property /vcu_0
ERROR: [Common 17-58] '/vcu_0' is not a valid first class Tcl object.
> puts |$vcu|
|/vcu_0|
> report_property [string range $vcu 0 end]
ERROR: [Common 17-58] '/vcu_0' is not a valid first class Tcl object.
Итак, мой вопрос: что это за «действительный объект Tcl первого класса»?
Пояснение: Этот вопрос может показаться, что вы просите помощи в сценариях Vivado, , но это не .(Я даже сомневался в добавлении [vivado] в теги.) Я могу просто жить и писать сценарии с этими мистическими объектами.Но было бы весьма полезно (для меня и, возможно, для других) лучше понять их внутреннюю работу.Является ли эта «объектная система» грязным хаком?Или это совершенно правильное использование TCL?Если это действительно так, где я могу прочитать об этом?Если это хак, как это (или может быть) реализовано?Где именно конец строки и начало объекта?
Связанный: Часть этого ответа можно рассматривать как мнение в пользу "хакерской" версии, но это довольно поверхностно всмысл моего вопроса.