艾支午們:「平密」迅南怨漁顱怔去欄遭淹向「墳鯽」( 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
();
/* ... */
}