2021年5月8日 星期六

new 操作子 | JavaScript | 克服 JS 的奇怪部分

Photo by Michael Aleo on Unsplash

前一篇文章中,我們談到了 Javascript 的原型鏈的概念,了解了原型鏈是 Javascript 中實現繼承的方式。而今天我們利用原型鏈的概念,來看看 new 操作子到底是什麼東東。

2021年5月1日 星期六

原型鏈與繼承 | Javascript | 克服 JS 的奇怪部分

Photo by Aida L on Unsplash

前言

過去在學習 JavaScript 的時候,常常會聽到原型鏈這個名詞,那時候看了許多的資料,卻還是被它錯綜複雜的關係給迷惑。比如: __proto__prototype 的區別是什麼? 它們之間又有什麼關係。直到最近在 Udemy 上了 克服 JS 的奇怪部分 這門課之後,才對原型鏈有了較深刻的體會。下面就把我學習的心得寫出來和大家交流交流~~

2021年4月24日 星期六

Calling Convention in LLVM (2)

Photo by John Gamell on Unsplash
Introduction

In the previous article, two files related to calling convention are introduced: <Arch>CallingConv.td and <Arch>ISelLowering.cpp. However, in <Arch>ISelLowering.cpp, we only discuss LowerFormalArguments(). The other two functions, LowerReturn() and LowerCall() would be discussed in this article and we still take the source code of Sparc architecture as an example.

2021年4月18日 星期日

[Effective C++] [閱讀心得]: public 繼承代表 is-a 的關係

Photo by Hamza NOUASRIA on Unsplash

所謂 is-a 代表能施加在父類別的每一件事情也要能夠施加在子類別身上,Scott Meyers 在書中舉了一個鮮明的例子

class Bird {
public:
    virtaul void fly();
    ...
};

class Penguin : public Bird {
    ...
};

在這個例子中, Penguin 是一種 Bird,但是 Penguin 並不會飛,這就違反了 is-a 的關係。因此,這樣的塑模方式並不正確。比較理想的方式是

2021年4月2日 星期五

LLVM 是如何處理呼叫慣例(Calling Convention) (2)

Photo by Markus Spiske on Unsplash
前言

前一篇文章中,我們提到了 LLVM 後端中處理呼叫慣例的兩個關鍵檔案: <Arch>CallingConv.td 與 <Arch>ISelLowering.cpp 。不過在 <Arch>ISelLowering.cpp 中,我們只探討了 LowerFormalArguments() 函式。另外兩個函式 LowerReturn() 與 LowerCall() 將於本篇文章討論。

2021年3月27日 星期六

Calling Convention in LLVM

Photo by Pavan Trikutam on Unsplash

Introduction

The calling convention is a specification which describes how parameters are passed to a function or how a return value is returned from a function. Different processor architectures may have different calling conventions. For example, in x86, function parameters would be put in the stack. In ARM, some of the function parameters would be put in the registers and the others would be put in the stack.