command arg1 ...
set variable value
$variable
[]
expr func()
lindex
lsearch
foreach
if
==, !=, >, <=
proc
return
架构:9.0 API Programmer's Guide
内建类:Entity(列表见 Entity Type)
成员变量:Data Name(列表见 Data Names)
-
内建命令:(列表见 Commands & Functions)
- Tcl GUI: hm_command
- Tcl Modify: *command
command.cmf - *command(arg1, arg2) - nodepad++ macro
2.1 *createmark, *actionmark
2.2 两个兜加一个胸兜。面板切换,1、2换用。 - Tcl Query: hm_command
3.1 hm_getmark - Utility Menu: *command()
userpage.mac
-----------------------------Tcl/tk入门经典-------------------------------
用户界面元素:组件,或称窗口,因为每一个组件由一个tk窗口实现。窗口分顶层窗口(该程序)和内部窗口。
几何管理器:整合组件,绑定触发执行的脚本
窗口管理器=桌面环境,联想linux的多种窗口管理器。
窗口系统指的是一套按钮、菜单的组件。比如某些窗口系统没有下拉菜单组件(假设)。
主题指的是窗口系统各组件的样式。
组件名反应他在层级中的位置,层级分隔符为 . ,主窗口名本身就用 . 表示。
关于计算机底层设计的问题,我看计算机组成原理从来没懂过。
人都追求一个解释,我当年自己提出的问题,我给自己一个解释。
依据“人同此心,心同此理”的精神,我根据体会自行假设并承认。而且计算机属于人造学科(v.s.神造学科),设计者的意图更容易被揣摩到。
但始终要记得,这是自己的假设,否则未来遇到一些需要对真实情况的理解储备的问题时,就有可能会想不通。那时,要能够自我推翻和变通才行。
关于内存地址存在哪的问题。答案是他不用存。
什么段地址和偏移量我不懂,解释的人多故弄玄虚,讲前不给你解释基础概念,所以在大多数人没有基础概念的共识情况下,他说的就不是人话,因为大多数人听不懂。
我的猜测。寻址靠走线。8位地址信息,即从中央处理器出发,要经过八个三岔口才能抵达那块数据区(字节)。
如01001011,你给我这个地址,我用电流去走。左拐为0,右拐为1。则变为锦囊妙计:左右左左右左右右
先是一条线直走,到了岔口,看看锦囊,左走。下一个岔口,右走……直到最后,你就会见到一个小房子。这个小房子里面有八个卧室,如八卦数,每个卧室非阴即阳。而这个小房子整体表达的信息(数据)就是八位阴阳的排列。
这个小房子没有门牌号,只是说你从中央按照这个“地址”指示得走,就一定唯一能找到这家。
这就行了。
从中央出发,有八条路,过第一关,八条路变十六条路,以此类推,过完八关,共有256条路,这256条路的尽头分别有且只有一座房子,共256座小房子(256字节)。中央区不占字节,所有,这座城市(内存),一共有256户(256B=0.25K),即内存为0.25K。
故曰,8位地址线能识别的最大内存容量为0.25K。
所以,过去32位操作系统,最大能识别的内存容量为 2^32B/1024K/1024M/1024G=4G。这也是为什么传统32位XP系统无法识别4G以上大内存的原因。
注意,最大能识别的内存 和 有多大内存 不同。我一个有32位地址线的城市,有 2^32 条路,最多能建2^32 座房子,但是我只建了 2^31 座房子,也就是 2G 内存,这并不矛盾。
关于进程和线程。
进程是分配资源的基本单位,线程是独立运行和独立调度的基本单位。
CPU在同一时段内只能运行一个线程,所谓“多线程”只是切换时间足够快产生的假象。
线程有生睡醒死,切换进程要先让当前进程睡下,然后或生或叫醒待切换进程。
本质同一时刻运行的就是一个线程。
进程是什么?进程是分配资源的单位。什么是资源?内存就是资源,cpu的运算使用权就是资源。
比如开运动会,铅球项目要有一片场地和裁判员,百米要有一片场地和裁判员。场地和裁判就是资源。什么是线程?运动员选手就是线程。
同一个项目比如铅球,各铅球运动员只能一个一个的做出自己的成绩,这就是本质单线程。该项目的铅球运动员想要知道其他铅球选手的成绩,只需要到记录册那里查一下就行(数据共享)。让某个选手过来,歇会,先投或后投也很方便(线程调度)
。
但是,如果一个铅球手想知道另一个百米运动的成绩,就麻烦了。他要跑到百米区去,或问那个百米运动员,或者查成绩纪录册才行(数据不共享)。
拿百米举例有一处不恰当,就是这里的百米运动员不是一起跑,而是一个一个跑的;虽然是同时起步,但是一段时间只能有一个运动员前进,其他歇会,然后快速切换。看着是齐头并进同时在跑,呵呵,一同前进不假,只是不是同时在跑。运动会的项目也不是同时进行,而是一个项目进行时,其他项目的参赛人员都翘首呆着,看着。但是,百米进行一会,换铅球进行一会,再换别的……因为切换得非常快,让你觉得他们是同时在进行一样。就像快银,打会乒乓球,吃个面,再去看会电视,再打会乒乓球,明明同一时刻只能做一件事,事实也是如此,但是你感觉就像有四个快银一样。
那为什么进程调度比线程难呢?
所以,什么叫进程调度?所谓进程调度,就是开始一个新的竞赛项目,暂停,重启或结束一个项目。
进程的调度,说到底是资源的调度,运动场地是铁打的营,兵马未动粮草先行,你要准备好一切体育用具,至少首先要有一块地。
线程的调度,说到底是运动员的调度,运动员是流水的兵,调度起来相当容易。