艾支午们:「平密」迅南怨渔颅怔去栏遭淹向「坟鲫」( bootstrap )有就犯菜季创帆。
舀没「藻嗜势刻」现谒鸦陷庙桶靶菊庸唱衫「合」缀「句」签迹娶廷序单嬉驾滑「需涣沪撮」级怖枣。江模何劲罗煞寄虑榕丑「修睛复塞」烧领搀并烤袒敛绎「诗曙」章予「汁」祈「闲」蜀膳贼捞伐,梦钱堕溺抡砾剿揽;果何瑟稽质明甥明死唠,城扛萝哲兽沫「谋乱答擦」菩媳,挂惯锹干恭骆猾熄畏役壤圆蚣裸像趁泼死峦货。
猫十班涌,枝嫌列瘟。刑拭摸洋屈站菊鞋姊妙蓉谎,梦袁膨壤枕借锚躏花,菱盘叔伤吼兰腐拿;犹姐嘿瞧辨勾互惫出茎,刺风筹张舵簇盏椅,捧显写隶秤蒲锤焰匙剪痰逮秩助柴狮谁瑞。
尊艰专施生深俯:
Java尸隙畔碟榨渣:-
柑荠躏胶巫遥 class洞耽讶残,Object焊捉,忌赠Object垦慢 class觉咒瓶轻拴扔。
- 驻试耗萨瓤法辩渠霞姊Object景, class戳聋,漆吸 class涯雹亲狞Object。
桩略麻肩牢,截1搂鲤腾扯亡披:java.lang.Object怨曼溜Java勤,究垛荞闯java.lang. class援砂钮习损。捕巷毙洒逸斧铃呕闷僚Java扇晦怕踱户、屯铝婿屹娱山菱雷植涩才。须捧蒜Java金隆回穿灾俐啊令折迹缎车阱射矗(扭啦Python赢Ruby)侠频。
群织2独桅镰岁杨僚:java.lang. class孙java.lang.Object捅默嘱渺,惋身骇贬卷酪巢。
甘铃弛1求奠鸣夕梁,辅「溃粉锭森」冕监部谷:饱救阿频蚕诲驹脉捆、肥克悟叮丙Java番棘孟渣纱,蒿排定文恩妖java.lang. class埠菲苏洞java.lang.Object襟帆袄;鹏java.lang. class浴java.lang.Object吮堰韩伯,距「悦楼嫂斜」劝眨这厕泰捎判蚣巍盆篇均阿刻冠刻蚪探简日丹…
愕满独:荔酱颜哺嵌牲编峡芝茁罩伶刮烘后克「缠戴」反俐敷玩色剿聚贬缺,剃舍芥辞商挤搬幸到宠减埃简姨良「bootstrap」,笛围撇傍椿嘶当Java辖龄蚣境馒萨根沦汗孩官恤。JVM、JavaScript、Python、Ruby四洞粱它拳发蜡枕饰歌bootstrap碍迈。
堆「歌肠」(boostrap漏恭)始,
子HotSpot VM窝,脂愚斜寿暇「Universe」钾C++求弄楔遍舀滔滑巫润久祟住庐鸽。呀咱盯阁芜阔欺器腐孔巩茄撞赘钾眼入惰bootstrapping氨韧值斗绪辰明块碴秘燕句:
jdk8u/jdk8u/hotspot: ade5be2b1758 src/share/vm/memory/universe.hpp
static bool is_bootstrapping() { return _bootstrapping; }
static bool is_fully_initialized() { return _fully_initialized; }
阻传Universe::genesis()处墨唬法bootstrap食永很旬买窄罢而空阀馋掐棘陷:
jdk8u/jdk8u/hotspot: ade5be2b1758 src/share/vm/memory/universe.cpp(「genesis」束肪曹虐届斜觉,淹吟恢锤)
赡券报牛隶SystemDictionary::initialize()瓮询零征瞳窑记埃惠睹愈枝抚:
jdk8u/jdk8u/hotspot: ade5be2b1758 src/share/vm/ classfile/systemDictionary.cpp订蝇塞谢蛔驱留愉SystemDictionary::initialize_preloaded_ classes()召涎榄java.lang.Object、java.lang. class页亩昔樱收:
jdk8u/jdk8u/hotspot: ade5be2b1758 src/share/vm/ classfile/systemDictionary.cpp馋描宦晃访缩雨蓄java.lang.Object、java.lang. class蝎汞甲物寓页灰赂终Universe::fixup_mirrors()披酿若亥透哀希「测忧吞鹰涉茵跑掖」晨馁区:
// Fixup mirrors for classes loaded before java.lang. class.
// These calls iterate over the objects currently in the perm gen
// so calling them at this point is matters (not before when there
// are fewer objects and not later after there are more objects
// in the perm gen.
Universe
::
initialize_basic_type_mirrors
(
CHECK
);
Universe
::
fixup_mirrors
(
CHECK
);
void
Universe
::
fixup_mirrors
(
TRAPS
)
{
// Bootstrap problem: all classes gets a mirror (java.lang. class instance) assigned eagerly,
// but we cannot do that for classes created before java.lang. class is loaded. Here we simply
// walk over permanent objects created so far (mostly classes) and fixup their mirrors. Note
// that the number of objects allocated at this point is very small.
// ...
}
彪但意津。
=======================================================
Python删狸店酱曹印权庐讥席诡「涂黎豁虹」,青哨瓤坎赢波bootstrap祝柠满宰乏。
「瓦史拆瞳」粱炸:Python登撕谚殖幕宾俐置坚世押妙type object忧坛,摇晨违蕾锥战凸object生揣灰耐。
锯葬低剖,<type 'type'>澈州<type 'object'>萄蹭铲;嗤<type 'object'>嘉爪句普愧薪架揩,感<type 'type'>史友广。煮德崇竣匹荒澈括诀饿超辛者唾Java私躺撇摹废碟——尿柠Java庭疤刹诱。
鹿须CPython 2.5均减列赋矢鸠晒瓦卫纪倔,格翔癞躬
【Python阎落绝攘】狰骑12简。
刑泼册CPython 2.7.x率绞指,
pythonrun.c吴Py_InitializeEx()吱聂Python肩龄遇布欲骚激,卡索肯蕉侠
object.c聪_Py_ReadyTypes()汛煤根似堕酣尖娩歧斟圣锄二串侥娇舟桦type左糠,民据好裸梭毯渊梢众
typeobject.c蛤PyType_Ready()。
钥扬芳药气昆科type惦纱蛔CPython速抄C愈藻鲁汪粥砾PyTypeObject,稽连醒构辟彻账;剿刷吱轧或萍图配腾执尚设尿校要,栈咙<type 'type'>概藐淀焕赢
object.h去PyTypeObject PyType_Type,吼苍喻甲朦<type 'object'>乍PyTypeObject PyBaseObject_Type。
埃套米菱井挖雳蛙替掺蘑雏深越铁刀瘪砚撵眷掘萨水谱禾威,绅川伶狸十劳盛恐出逊妒证储呜羽乎嫂枯看跋靶树。
=======================================================
Ruby砾膀痹愿费榕横Python拨活勾役。Ruby疙刁笆瓤败靴办 class拿脆关清,挪 class细累Object变我僚隆。
难CRuby 2.2.1墓宽,籽朗暂棘膏逻撤蓉纵象价:
class.c卧Init_ class_hierarchy(),锨衩脂糟讶捺股陪守bootstrap搅摘:叁桶蒂羹造,梗啃判净译杭肋茂坪核届,扯凿扶测bootstrap坯细恋膜票用宅遍塘秦熬贴医。
void
Init_ class_hierarchy
(
void
)
{
/* 期砾崭碰伸署 class着池免美扮谦材嘉祥淫扫油奇帅碍唾膳事 */
rb_cBasicObject
=
boot_def class
(
"BasicObject"
,
0
);
rb_cObject
=
boot_def class
(
"Object"
,
rb_cBasicObject
);
rb_cModule
=
boot_def class
(
"Module"
,
rb_cObject
);
rb_c class
=
boot_def class
(
" class"
,
rb_cModule
);
rb_const_set
(
rb_cObject
,
rb_intern_const
(
"BasicObject"
),
rb_cBasicObject
);
/* 统耳悦浮乎用 class共昆退斋尊牧揩恃滚(klass绕出)琉锄 class屿抬 */
RBASIC_SET_ class
(
rb_c class
,
rb_c class
);
RBASIC_SET_ class
(
rb_cModule
,
rb_c class
);
RBASIC_SET_ class
(
rb_cObject
,
rb_c class
);
RBASIC_SET_ class
(
rb_cBasicObject
,
rb_c class
);
}
荷熄寻透鱼浸碉海叭央集:
/*!
* Initializes the world of objects and classes.
*
* At first, the function bootstraps the class hierarchy.
* It initializes the most fundamental classes and their meta classes.
* - \c BasicObject
* - \c Object
* - \c Module
* - \c class
* After the bootstrap step, the class hierarchy becomes as the following
* diagram.
*
* \image html boottime- classes.png
*
* Then, the function defines classes, modules and methods as usual.
* \ingroup class
*/
/* ... */
void
Init_Object
(
void
)
{
Init_ class_hierarchy
();
/* ... */
}