脑洞,从键值对数据库联想到javascirpt的作用域

Post on Aug 20, 2017 by Lightfish Zhang

前言

  • 这篇东西只是我对对象模型的不上的台面的猜想和思考
  • 最近笔者阅读redis源代码,从redis简单实现的对象机制,忽然想到javascirpt的语言特性,javascirpt的对象是如何实现的呢?一查资料发觉水真深,javascirpt经过多年优化,v8使用了许多c++的奇技淫巧。我脑洞中提出一个疑问,javascirpt的链式作用域,如何查找,是不是javascirpt编译器也实现了类似键值对数据库的一些策略,比如键空间、字典空间什么的。。。作为一枚刚巩固c语言基础入门c++的新手,像验证这个猜想有些难度,或者说好高骛远了,姑且试试吧反正浪费点时间罢了

对象

  • C语言与面向对象的语言的区别,讲一个比较易懂的例子吧,那就是程序中连=等于号都不一样了!
// 在c语言是这样子的
int a = 1;

// 将之编译后大概是这样的汇编指令,mov指令是往寄存器里移动数据
movq	$1, -4(%rbp)
// C语言的编译器认知中,先给a变量一个地址(给它分配4个内存的寄存器,因为int占4个字节),然后往这个地址存放数据(movq就是向四个字节移动数据)
// 面向对象的语言,如
string str1 = "abc";
// 这里的等于号可不是C语言那样把"abc"的首地址赋值给`str1`,而是赋值给str1对象的一个代表值的成员,`st1`是一个对象,
// 在编译器的认知中,先给str1对象分配空间,类似结构体的内存布局,然后执行构建函数,`string str("abc")`....

未完待续