-
Recent Posts
Recent Comments
Categories
Links
Monthly Archives: August 2019
big endian&little endian
在機器層級的指令集裡有些特定的data type,如int, float 以integer bit representation為例,可分為LSB(least significant bit 代表2^0)和MSB(most significant bit 代表 2^(n-1)) 我們一般書寫二進位的描述,MSB在左邊,LSB在右邊。例如書寫一千二百三十四會先寫 1再寫234 (positional notation),就是big endian(從big end開始)寫法,這在一般程式語言裡numeric literal也是這樣表示。 在記憶體中是以多個byte儲存,就會有哪個byte在低位哪個byte在高位如果方向從MSB開始以byte為單位依序存進記憶體,就是big end=> big endian, 如果方向從LSB開始以byte為單位依序存進記憶體,就是little end=> little endian, 而在記憶體中資料儲存依序的順序是從低位(低位址)開始算。 big endian也叫做network byte order,其實應該是network byte order採用big endian(rfc 1700), 例如ip header裡的total length欄位是跨byte。 … Continue reading
Posted in General
Leave a comment
javascript code hot swapping
最近看到erlang的動態更新patch https://stackoverflow.com/questions/1840717/achieving-code-swapping-in-erlangs-gen-server 事實上在nodejs也可以做到類似的作法 基本的思路是透過eval動態將輸入的程式碼字串置換 注意在eval裡面要返回expression value,在裡面的程式碼加上'()’ 上面的作法只是一個簡單的範例, 完整的設計可以考慮針對執行介面設計一個code置換處理的handler, 包含如何定位到要改動的變數(狀態)或是函式,透過外部統一的訊息介面將要更新的程式碼送到對應的handler來處理。 這邊主要說明的是當function被置換時,並不會影響到原來正在執行的function, 在javascript裡,function是first-class citizenship,而其生命週期就如同物件的生命週期,但有可能因為javascript engine的optimization而延長。
Posted in nodejs
Leave a comment
define/global define
在上面這段code,裡面使用了boost spirit unicode char_class,在預設情況下,如果沒有#define BOOST_SPIRIT_UNICODE 是compile不過的 如果發現在include前面無論如何define都還是找不到定義的話(qi::unicode),要先檢查是否在include前已經有其他include,導致在一開始include因為還未define而沒有include unicode。 這個比較常發生在cpp include B前又include其他header A,在include A裡已經也include B 就會導致這個現象,這時候除了注意include順序問題,也可以透過compile flag設定global define來解決(g++: -D , -D如果沒指定define值時,預設為1)
Posted in Library
Leave a comment