[Richard Suchenwirth] 2002-10-30 - A need that comes up every now and then (see [Persistent Tcl and Tk applications]) is to dump the state of an interpreter to a file, so the application can later be restored (by [source]ing the resulting file) to a state with the same settings. Here's a simple generic test for [serializing] global variables (scalar or array), interpreter aliases, and procedures, taking care to skip ''env'' and Tcl internals. Feel free to improve on this ;-) As mentioned on comp.lang.tcl, this is '''not''' a complete state dump; just a reasonable facimile. Things like open file descriptors, sockets, daemons started, etc. are particularly difficult to handle, as are various extension specific items (like Tk widgets, Snack components, and many other such entities). Packages are sort of taken care of in the code below; namespaces would require traversal of the namespace tree, repeating variable and proc dumping. [AK]: Note that tkcon contains dump routines as well, for namespaces too. - [RS]: Sure - it's just the little mental challenge of building something "with your bare hands"... more fun for a short break than reading yet more documentation or source code ;-) ---- proc interp'dump {} { set res "\# interpreter status dump\n" catch {package require "a non-existing one"} foreach package [lsort [package names]] { if {![catch {package present $package} version]} { append res "package require $package $version" \n } } foreach i [lsort [info globals]] { if {$i == "env"} continue ;# don't dump environment.. if {[string match tcl_* $i]} continue ;# ..or Tcl system vars if {[string match auto_index $i]} continue ;# ..or Tcl system vars if {[array exists ::$i]} { append res [list array set $i [array get ::$i]]\n } else { append res [list set $i [set ::$i]]\n } } foreach proc [lsort [info procs]] { if {[string match auto_* $proc] || $proc == "unknown"} { continue ;# prevents most of the init.tcl procs from dumping } if {[string match pkg_* $proc]} continue ;# ..or Tcl system vars if {[string match tcl* $proc]} continue ;# ..or Tcl system vars append res "proc [list $proc] {" set space "" foreach i [info args $proc] { if [info default $proc $i value] { append res "$space{$i [list $value]}" } else { append res "$space$i" } set space " " } append res "} {[info body $proc]}\n" } foreach alias [lsort [interp aliases {}]] { append res "interp alias {} $alias {} [interp alias {} $alias]\n" } set res } if {[file tail [info script]] == [file tail $argv0]} { # prepare some playing material set scalar hello array set arry {foo 1 bar 2 grill 3} proc foo {bar} {puts grill-$bar} interp alias {} print {} puts stdout puts [interp'dump] } [http://b27.zhiliaotuofa.com 充电器][http://c128.voip99.net 面料][http://c129.voip99.net ][http://c48.voip99.net 读卡器][http://w25.voip99.net 切割机][http://w26.voip99.net 深圳印刷][http://w29.voip99.net ][http://c77.voip99.net 抛丸机][http://c78.voip99.net 制罐][http://c87.voip99.net 木工机械][http://c88.voip99.net 物流设备][http://c89.voip99.net ][http://c91.voip99.net 吸塑机][http://c92.voip99.net 毛毡][http://c93.voip99.net 交通设施][http://c94.voip99.net 压滤机][http://c95.voip99.net ][http://c134.voip99.net ][http://b100.zhiliaotuofa.com 铝箔][http://c01.voip99.net ][http://b51.zhiliaotuofa.com 吹塑机][http://b52.zhiliaotuofa.com 喷涂][http://b53.zhiliaotuofa.com 喷涂设备][http://c34.voip99.net ][http://a28.voip99.com 风水][http://a29.voip99.com 密封胶][http://a30.voip99.com 胶粘][http://a31.voip99.com 吸尘器][http://a32.voip99.com 消毒柜][http://a33.voip99.com 货架][http://a34.voip99.com 展架][http://aaa17.zhiliaotuofa.com ][http://a80.voip99.com 印花机][http://a81.voip99.com 金刚石][http://a82.voip99.com 陶瓷][http://c34.voip99.net 钢板][http://c35.voip99.net ][http://c129.voip99.net 拉链][http://c130.voip99.net 自动门][http://c131.voip99.net 自吸泵][http://c132.voip99.net 容器][http://c133.voip99.net 软管][http://c138.voip99.net ][http://a93.voip99.com 温度仪表][http://a94.voip99.com 仪表][http://a95.voip99.com ][http://b40.zhiliaotuofa.com 催化剂][http://b41.zhiliaotuofa.com 化学试剂][http://b46.zhiliaotuofa.com 胶粘剂][http://b47.zhiliaotuofa.com 染料][http://b55.zhiliaotuofa.com ][http://a83.voip99.com 注塑机][http://a84.voip99.com 造粒机][http://w31.voip99.net IP超市计费系统][http://w46.voip99.net ][http://c33.voip99.net 纺织机械][http://c34.voip99.net ][http://a05.voip99.com 液位计][http://a06.voip99.com 插座][http://a07.voip99.com 体育用品][http://a08.voip99.com 服务器][http://www35.voip99.com 继电器][http://w12.voip99.net 紧固件][http://w13.voip99.net 制服][http://w14.voip99.net 健身器材][http://w15.voip99.net 太阳能热水器][http://w16.voip99.net 婚纱摄影][http://w17.voip99.net ][http://aaa01.zhiliaotuofa.com 包装设计][http://aaa02.zhiliaotuofa.com ][http://aaa04.zhiliaotuofa.com 电话变声器][http://w29.voip99.net 照排机][http://w30.voip99.net 餐具][http://w31.voip99.net ][http://mudiban.voip99.net 实木地板][http://qianzheng.voip99.com ][http://c31.voip99.net 手套][http://c32.voip99.net 防水材料][http://qianzheng.voip99.com 签证][http://kaoqinji.voip99.com ][http://www46.voip99.com 反光材料][http://www47.voip99.com 打标机][http://www48.voip99.com 温湿度计][http://www49.voip99.com ][http://aaa14.zhiliaotuofa.com 实验室设备][http://aaa15.zhiliaotuofa.com 玻璃器皿][http://aaa16.zhiliaotuofa.com 耗材][http://aaa17.zhiliaotuofa.com ][http://www42.voip99.com 纸箱][http://www43.voip99.com 丝印][http://www44.voip99.com 纳米焊条][http://www45.voip99.com 升降机][http://aaa02.zhiliaotuofa.com 压缩机][http://aaa03.zhiliaotuofa.com 手机窃听器][http://aaa06.zhiliaotuofa.com 振动筛][http://aaa07.zhiliaotuofa.com 空气净化][http://aaa08.zhiliaotuofa.com ][http://ww3.zhiliaotuofa.com 深圳机票][http://ww4.zhiliaotuofa.com ][http://w36.voip99.net GK][http://w40.voip99.net 网络电话卡][http://w41.voip99.net VOIP][http://w44.voip99.net ][http://ww1.voip99.com 卫星电视][http://ww0.voip99.net 监视器][http://www41.voip99.com ][http://www37.voip99.com 机床][http://www38.voip99.com 电子秤][http://www39.voip99.com ][http://w33.voip99.net VOIP网关][http://w34.voip99.net ][http://w70.voip99.net 板蓝根][http://www05.voip99.com 电力猫][http://www13.voip99.com 化工机械][http://a88.voip99.com 分离设备][http://a89.voip99.com 粉碎机][http://a95.voip99.com 仪器][http://a96.voip99.com 仪表仪器][http://a97.voip99.com 光学仪器][http://a98.voip99.com ][http://www27.voip99.com 印刷机][http://www28.voip99.com 耐火材料][http://www29.voip99.com ][http://www01.agreatserver.com 六合彩][http://jipiao.voip99.com/ 深圳机票][http://vod.voip99.net 视频点播][http://sudi.voip99.com/ 速递公司][http://guojihuoyun.voip99.com ][http://aaa23.zhiliaotuofa.com 密封件][http://aaa24.zhiliaotuofa.com 电动工具][http://aaa25.zhiliaotuofa.com 办公家具][http://aaa26.zhiliaotuofa.com 热水器][http://aaa27.zhiliaotuofa.com 金属丝网][http://aaa28.zhiliaotuofa.com ][http://guojihuoyun.voip99.com 国际货运][http://baojingqi.voip99.com 报警器][http://chaye.voip99.com 茶叶][http://www49.voip99.com 热处理设备][http://www50.voip99.com ][http://c66.voip99.net 建材机械][http://c67.voip99.net 工程塑料][http://c73.voip99.net ][http://c81.voip99.net 综合布线][http://c82.voip99.net ][http://c82.voip99.net 燃烧器][http://c83.voip99.net ][http://a15.voip99.com 注册英国公司][http://b05.zhiliaotuofa.com 工业胶带][http://b06.zhiliaotuofa.com 液压机][http://b07.zhiliaotuofa.com 过滤器][http://b13.zhiliaotuofa.com 整流器][http://b14.zhiliaotuofa.com 逆变器][http://b15.zhiliaotuofa.com 扬声器][http://b17.zhiliaotuofa.com 蜂鸣器][http://b18.zhiliaotuofa.com 显示屏][http://b19.zhiliaotuofa.com 天线][http://c12.voip99.net 塑封机][http://c13.voip99.net 望远镜][http://c19.voip99.net ][http://c150.voip99.net ][http://aaa10.zhiliaotuofa.com 机电设备][http://aaa35.zhiliaotuofa.com 防盗器][http://aaa36.zhiliaotuofa.com 印刷机械][http://w46.voip99.net ][http://w63.voip99.net 语音网关][http://w65.voip99.net ip超市][http://w69.voip99.net 保健品][http://w70.voip99.net ][http://b80.zhiliaotuofa.com 消防器材][http://b81.zhiliaotuofa.com 建筑机械][http://b88.zhiliaotuofa.com ][http://c126.voip99.net 医疗设备][http://c127.voip99.net 仓储][http://c128.voip99.net ][http://www.voip99.com/bbs/ voip在线交易中心][http://aaa19.zhiliaotuofa.com 电容器][http://aaa20.zhiliaotuofa.com ][http://a22.voip99.com 会计师事务所][http://a23.voip99.com 法律咨询][http://b08.zhiliaotuofa.com ][http://c29.voip99.net 离心机][http://c45.voip99.net 触摸屏][http://c46.voip99.net 条码][http://c47.voip99.net 工业设计][http://c53.voip99.net 臭氧][http://c54.voip99.net 润滑脂][http://c55.voip99.net ][http://c17.voip99.net 铜制品][http://c18.voip99.net 石墨][http://c19.voip99.net ][http://c76.voip99.net 转换器][http://c89.voip99.net 铁塔][http://c90.voip99.net 热电偶][http://c95.voip99.net 刻字机][http://c100.voip99.net ][http://a73.voip99.com ][http://c11.voip99.net 投影仪][http://c12.voip99.net ][http://a14.voip99.com 注册美国公司][http://b56.zhiliaotuofa.com 相框][http://b57.zhiliaotuofa.com 蜡烛][http://b73.zhiliaotuofa.com 石材][http://b74.zhiliaotuofa.com 钢结构][http://b75.zhiliaotuofa.com 管材][http://b76.zhiliaotuofa.com ][http://jipiao.voip99.com/ 深圳机票][http://sudi.voip99.com/ 快递|速递公司][http://shipinhuiyi.zhiliaotuofa.com ][http://ww3.voip99.com ][http://www16.voip99.com 钛白粉][http://www17.voip99.com 塑料制品][http://www18.voip99.com 阀门][http://www19.voip99.com 纯水设备][http://www20.voip99.com ][http://www36.voip99.com 工艺品][http://w09.voip99.net 脱毛][http://w10.voip99.net 净水器][http://w11.voip99.net 蜂蜜][http://w12.voip99.net ][http://w75.voip99.net 门禁][http://w76.voip99.net 瓷砖][http://w77.voip99.net 电机][http://ww0.voip99.com 耳机][http://www39.voip99.com ][http://www09.voip99.com 轮胎][http://www10.voip99.com 电子仪器][http://www11.voip99.com 汽车配件][http://www12.voip99.com ][http://ww5.voip99.net 光端机][http://b27.zhiliaotuofa.com 充电器][http://c128.voip99.net 面料][http://c129.voip99.net ][http://c48.voip99.net 读卡器][http://w25.voip99.net 切割机][http://w26.voip99.net 深圳印刷][http://w29.voip99.net ][http://c77.voip99.net 抛丸机][http://c78.voip99.net 制罐][http://c87.voip99.net 木工机械][http://c88.voip99.net 物流设备][http://c89.voip99.net ][http://c91.voip99.net 吸塑机][http://c92.voip99.net 毛毡][http://c93.voip99.net 交通设施][http://c94.voip99.net 压滤机][http://c95.voip99.net ][http://c134.voip99.net ][http://b100.zhiliaotuofa.com 铝箔][http://c01.voip99.net ][http://b51.zhiliaotuofa.com 吹塑机][http://b52.zhiliaotuofa.com 喷涂][http://b53.zhiliaotuofa.com 喷涂设备][http://c34.voip99.net ][http://a28.voip99.com 风水][http://a29.voip99.com 密封胶][http://a30.voip99.com 胶粘][http://a31.voip99.com 吸尘器][http://a32.voip99.com 消毒柜][http://a33.voip99.com 货架][http://a34.voip99.com 展架][http://aaa17.zhiliaotuofa.com ][http://a80.voip99.com 印花机][http://a81.voip99.com 金刚石][http://a82.voip99.com 陶瓷][http://c34.voip99.net 钢板][http://c35.voip99.net ][http://c129.voip99.net 拉链][http://c130.voip99.net 自动门][http://c131.voip99.net 自吸泵][http://c132.voip99.net 容器][http://c133.voip99.net 软管][http://c138.voip99.net ][http://a93.voip99.com 温度仪表][http://a94.voip99.com 仪表][http://a95.voip99.com ][http://b40.zhiliaotuofa.com 催化剂][http://b41.zhiliaotuofa.com 化学试剂][http://b46.zhiliaotuofa.com 胶粘剂][http://b47.zhiliaotuofa.com 染料][http://b55.zhiliaotuofa.com ][http://a83.voip99.com 注塑机][http://a84.voip99.com 造粒机][http://w31.voip99.net IP超市计费系统][http://w46.voip99.net ][http://c33.voip99.net 纺织机械][http://c34.voip99.net ][http://a05.voip99.com 液位计][http://a06.voip99.com 插座][http://a07.voip99.com 体育用品][http://a08.voip99.com 服务器][http://www35.voip99.com 继电器][http://w12.voip99.net 紧固件][http://w13.voip99.net 制服][http://w14.voip99.net 健身器材][http://w15.voip99.net 太阳能热水器][http://w16.voip99.net 婚纱摄影][http://w17.voip99.net ][http://aaa01.zhiliaotuofa.com 包装设计][http://aaa02.zhiliaotuofa.com ][http://aaa04.zhiliaotuofa.com 电话变声器][http://w29.voip99.net 照排机][http://w30.voip99.net 餐具][http://w31.voip99.net ][http://mudiban.voip99.net 实木地板][http://qianzheng.voip99.com ][http://c31.voip99.net 手套][http://c32.voip99.net 防水材料][http://qianzheng.voip99.com 签证][http://kaoqinji.voip99.com ][http://www46.voip99.com 反光材料][http://www47.voip99.com 打标机][http://www48.voip99.com 温湿度计][http://www49.voip99.com ][http://aaa14.zhiliaotuofa.com 实验室设备][http://aaa15.zhiliaotuofa.com 玻璃器皿][http://aaa16.zhiliaotuofa.com 耗材][http://aaa17.zhiliaotuofa.com ][http://www42.voip99.com 纸箱][http://www43.voip99.com 丝印][http://www44.voip99.com 纳米焊条][http://www45.voip99.com 升降机][http://aaa02.zhiliaotuofa.com 压缩机][http://aaa03.zhiliaotuofa.com 手机窃听器][http://aaa06.zhiliaotuofa.com 振动筛][http://aaa07.zhiliaotuofa.com 空气净化][http://aaa08.zhiliaotuofa.com ][http://ww3.zhiliaotuofa.com 深圳机票][http://ww4.zhiliaotuofa.com ][http://w36.voip99.net GK][http://w40.voip99.net 网络电话卡][http://w41.voip99.net VOIP][http://w44.voip99.net ][http://ww1.voip99.com 卫星电视][http://ww0.voip99.net 监视器][http://www41.voip99.com ][http://www37.voip99.com 机床][http://www38.voip99.com 电子秤][http://www39.voip99.com ][http://w33.voip99.net VOIP网关][http://w34.voip99.net ][http://w70.voip99.net 板蓝根][http://www05.voip99.com 电力猫][http://www13.voip99.com 化工机械][http://a88.voip99.com 分离设备][http://a89.voip99.com 粉碎机][http://a95.voip99.com 仪器][http://a96.voip99.com 仪表仪器][http://a97.voip99.com 光学仪器][http://a98.voip99.com ][http://www27.voip99.com 印刷机][http://www28.voip99.com 耐火材料][http://www29.voip99.com ][http://www01.agreatserver.com 六合彩][http://jipiao.voip99.com/ 深圳机票][http://vod.voip99.net 视频点播][http://sudi.voip99.com/ 速递公司][http://guojihuoyun.voip99.com ][http://aaa23.zhiliaotuofa.com 密封件][http://aaa24.zhiliaotuofa.com 电动工具][http://aaa25.zhiliaotuofa.com 办公家具][http://aaa26.zhiliaotuofa.com 热水器][http://aaa27.zhiliaotuofa.com 金属丝网][http://aaa28.zhiliaotuofa.com ][http://guojihuoyun.voip99.com 国际货运][http://baojingqi.voip99.com 报警器][http://chaye.voip99.com 茶叶][http://www49.voip99.com 热处理设备][http://www50.voip99.com ][http://c66.voip99.net 建材机械][http://c67.voip99.net 工程塑料][http://c73.voip99.net ][http://c81.voip99.net 综合布线][http://c82.voip99.net ][http://c82.voip99.net 燃烧器][http://c83.voip99.net ][http://a15.voip99.com 注册英国公司][http://b05.zhiliaotuofa.com 工业胶带][http://b06.zhiliaotuofa.com 液压机][http://b07.zhiliaotuofa.com 过滤器][http://b13.zhiliaotuofa.com 整流器][http://b14.zhiliaotuofa.com 逆变器][http://b15.zhiliaotuofa.com 扬声器][http://b17.zhiliaotuofa.com 蜂鸣器][http://b18.zhiliaotuofa.com 显示屏][http://b19.zhiliaotuofa.com 天线][http://c12.voip99.net 塑封机][http://c13.voip99.net 望远镜][http://c19.voip99.net ][http://c150.voip99.net ][http://aaa10.zhiliaotuofa.com 机电设备][http://aaa35.zhiliaotuofa.com 防盗器][http://aaa36.zhiliaotuofa.com 印刷机械][http://w46.voip99.net ][http://w63.voip99.net 语音网关][http://w65.voip99.net ip超市][http://w69.voip99.net 保健品][http://w70.voip99.net ][http://b80.zhiliaotuofa.com 消防器材][http://b81.zhiliaotuofa.com 建筑机械][http://b88.zhiliaotuofa.com ][http://c126.voip99.net 医疗设备][http://c127.voip99.net 仓储][http://c128.voip99.net ][http://www.voip99.com/bbs/ voip在线交易中心][http://aaa19.zhiliaotuofa.com 电容器][http://aaa20.zhiliaotuofa.com ][http://a22.voip99.com 会计师事务所][http://a23.voip99.com 法律咨询][http://b08.zhiliaotuofa.com ][http://c29.voip99.net 离心机][http://c45.voip99.net 触摸屏][http://c46.voip99.net 条码][http://c47.voip99.net 工业设计][http://c53.voip99.net 臭氧][http://c54.voip99.net 润滑脂][http://c55.voip99.net ][http://c17.voip99.net 铜制品][http://c18.voip99.net 石墨][http://c19.voip99.net ][http://c76.voip99.net 转换器][http://c89.voip99.net 铁塔][http://c90.voip99.net 热电偶][http://c95.voip99.net 刻字机][http://c100.voip99.net ][http://a73.voip99.com ][http://c11.voip99.net 投影仪][http://c12.voip99.net ][http://a14.voip99.com 注册美国公司][http://b56.zhiliaotuofa.com 相框][http://b57.zhiliaotuofa.com 蜡烛][http://b73.zhiliaotuofa.com 石材][http://b74.zhiliaotuofa.com 钢结构][http://b75.zhiliaotuofa.com 管材][http://b76.zhiliaotuofa.com ][http://jipiao.voip99.com/ 深圳机票][http://sudi.voip99.com/ 快递|速递公司][http://shipinhuiyi.zhiliaotuofa.com ][http://ww3.voip99.com ][http://www16.voip99.com 钛白粉][http://www17.voip99.com 塑料制品][http://www18.voip99.com 阀门][http://www19.voip99.com 纯水设备][http://www20.voip99.com ][http://www36.voip99.com 工艺品][http://w09.voip99.net 脱毛][http://w10.voip99.net 净水器][http://w11.voip99.net 蜂蜜][http://w12.voip99.net ][http://w75.voip99.net 门禁][http://w76.voip99.net 瓷砖][http://w77.voip99.net 电机][http://ww0.voip99.com 耳机][http://www39.voip99.com ][http://www09.voip99.com 轮胎][http://www10.voip99.com 电子仪器][http://www11.voip99.com 汽车配件][http://www12.voip99.com ][http://ww5.voip99.net 光端机] ---- Smalltalk provides a mechanism for dumping state into a so called image. Smalltalk images contains all global variables, classes und compiled methods. The image is the internal (byte-coded) state of interpreter. The example on this page trys instead to create one big Tcl script to reset variables after an application begins. (What is this new created procs, tcl is dynamic). I would think more about dumping the interpreter's internal state (binary) and then loading it. Loading byte code should be much faster than compiling the sources anew. the Tcl interpreter could realize such functionality if it could serialize Tcl_Obj (internal Tcl) but I think the current Tcl interpreter does not allow this (or perhaps no one has thought about it). The biggest problem are the Tcl extensions. All Tcl extensions should then also serialize their states. In principle if in tcl everything were a string it would be easy. In fact, often these strings are names of handles (file handle, tk windows handle, etc.). This is not so easy to differenciate what to dump and what needs to be recreated - or for that matter, '''how''' to recreate it. I think TclPro has the ability to save byte-coded procedures, but I do not know how it could be used for such dumping. ---- Recently [Karl Lehenbauer] mentioned that [TclX] has a proc called showproc which extracts named procs or all procs. He also mentioned that it would be neat for a Tcl hacker with some spare time to create a new '''interp clone''' command that creates a new intepreter, copying in all of the original's procs, variables, open file descriptors, namespaces, packages, etc. This if done quickly, could be used as something lighter weight than fork. ---- [XOTcl] has a class called Serializer that can dump objects, classes and all the whole workspace (in the right order) into a string which can be used to recreate at some later time [http://media.wu-wien.ac.at/doc/Serializer-xotcl.html]. This is used to generate the blueprint of the interpreter state in [AOLserver] or e.g. for object migration between threads. ---- [Arts and crafts of Tcl-Tk programming]