编程范式全貌概要

引言:经常在一些社区上看到莫名的一句话PHP是世界上最好的语言,在语言的争论上,确实是大有华山论剑的门派之争。本文将通过编程语言的范式角度,来了解整个编程语言的发展史,同时更清晰的认知编程范式,以达到知己知彼,百战不殆

  编程语言发展到今天,出现了好多不同的代码编写方式,但不同的方式解决的都是同一个问题,那就是如何写出更为通用、更具可重用性的代码或模块。

一、从C语言谈起

  C语言的历史悠久,自其问世以来,其影响了太多太多的编程语言,到现在还一直被广泛使用,不得不佩服它的生命力。但是,我们也要清楚的知道,大多数的使用C语言来做内核的编程语言其实都是在改善C语言带来的问题+时代发展带来的变化。
下面来简单回顾下C语言的特性:

  1. C 语言是一个静态弱类型语言,在使用变量时需要声明变量类型,但是类型间可以有隐式转换;
  2. 不同的变量类型可以用结构体(struct)组合在一起,以此来声明新的数据类型;
  3. C 语言可以用 typedef 关键字来定义类型的别名,以此来达到变量类型的抽象;
  4. C 语言是一个有结构化程序设计、具有变量作用域以及递归功能的过程式语言;
  5. 通过指针,C 语言可以容易地对内存进行低级控制,然而这加大了编程复杂度;
  6. 编译预处理让 C 语言的编译更具有弹性,比如跨平台。

然而,在代码组织和功能编程上,C语言的上述,却不那么美妙了,eq:

//一个简单的交换两个变量的函数
void changeVar(int* x, int* y)
{
    int tmp = *x;
    *x = *y;
    *y = tmp;
}

可以想一想,这里为什么要用指针呢?因为如果不用指针的话,只是传进来的行参,即函数的形参是调用实参的一个拷贝,函数闭包里对形参的修改无法影响实参的结果。

然而,这个函数最大的问题是int tmp = *x决定了这个函数只能给int值使用,但是还有好多类型也等着能被调用呢,eq:double、float、string等,这就是个静态语言最糟糕的问题。

当然,这个时候大家都会想到类型转换,然而对于C语言的类型转换,是会出现很多问题的。

  • 比如:一个 double a[10] 的数组,a[2] 意味着 a + sizeof(double) * 2。如果你把 a 强转成 int,那么 a[2] 就意味着 a + sizeof(int) * 2。我们知道 sizeof(double) 是 8,而 sizeof(int) 是 4。于是访问到了不同的地址和内存空间,这就导致程序出现严重的问题。下面这种使用临时交换数据的buffer拷贝方案可以去掉类型转换时导致的地址变换:
//加入泛型变量的交换两个变量的函数
void changeVar(void* x, void* y, size_t size)
{
    char tmp[size];  //交换数据时需要用的 buffer
    memcpy(tmp, y, size);                                          
    memcpy(y, x, size);
    memcpy(x, tmp, size);
    /**
    * 1.函数接口中增加了一个size参数,用了 void* 后,类型被“抽象”掉了
,编译器不能通过类型得到类型的长度了,所以,需要我们手动地加上一个类型长度的标识。
2.函数的实现中使用了memcpy()函数,因为类型被“抽象”掉了,所以不能用赋值表达式了,很有可能传进来的参数类型还是一个结构体,因此,为了要交换这些复杂类型的值,我们只能使用内存复制的方法了。
    */
}

除了上面使用void* 来做泛型,在C语言中,还可以用宏定义来做泛型,不过却会带来宏的字符串替换,导致代码膨胀,导致编译出的执行文件相对较大,此处感兴趣的可以去深入学习一下。

还有 92% 的精彩内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
支付 ¥2.00 继续阅读
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容