100多种编程语言学什么?编程范型/编程范式


孙广东  2016.4.3    (为什么是这个日期, 是我存入笔记的日期)

http://blog.csdn.NET/u010019717

        回想一下, 其实编程语言基础到了很多, 大学时的 C, C++,  C#  , Java, 数据库SQL,  汇编。  毕业后的 Lua, Python , Golang, Ruby ,  javaScript, TypeScript 等 很多只是接触皮毛而已。 



首先要知道语言是属于哪种范类:   强类型/弱类型  ,     动态语言/静态语言,     编译/解释

强类型/弱类型

         如果一门语言很少隐式转换类型,说明它是强类型语言;如果经常这么做,说明它是弱类型语言。 Java, C++ 和Python是强类型语言,   PHP, JavaScript 和 Perl是弱类型语言。 强类型定义语言带来的严谨性能够有效的避免许多错误。

             强类型,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了,   不允许两种不同类型的变量相互操作。  强类型定义语言是类型安全的语言

 

        比如在Python中不能

 100多种编程语言学什么?编程范型/编程范式_第1张图片

 

 

 

动态语言/静态语言

             编译时检查类型的语言是静态类型语言,在运行时检查类型的语言是动态类型语言   静态类型需要声明类型。   强类型能及早发现问题缺陷。  能为IDE等提供更好的之前。             我是特别喜欢静态类型语言。

               在用动态语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。

           静态类型语言  在写程序时要声明变量的数据类型。

 

           Python跟Ruby、javaScript类似是动态语言,类型根据=右面的值。

           而C、C++等语言则不属于动态语言。

 

动的:

优点:方便阅读,不需要写非常多的类型相关的代码;

缺点:不方便调试,命名不规范时会造成读不懂,不利于理解等

 

静的:

优点:结构非常规范,便于调试,方便类型安全

缺点:为此需要写更多类型相关代码,不便于阅读、不清晰明了

 

           python这样的代码是不会报错的:    x的类型是动态改变的!!!!

x = 1

x = "shjkg"  

print(x)

 

 

                我在想,对于js, lua ,python 下面这种命名方式不是更好么?一看就知道类型,方便别人使用和阅读。但是在C# ,  Java 中是不推荐,但是她们是静态类型啊!!!!

 100多种编程语言学什么?编程范型/编程范式_第2张图片

 

 

 

编译型语言 和 解释型语言

编译型语言

        需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。

                 C、C++、Pascal、Object-C以及最近很火的苹果新语言swift

 

 

解释型语言

            解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。

               JavaScript、Python、Erlang、PHP、Perl、Ruby

 

有两个特殊的语言: 既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕。就出现了半编译型语言。C#在编译的时候不是直接编译成机器码而是中间码.     Java先生成字节码(这个字节码不是编译型语言的机器码)再在Java虚拟机中解释执行(解释器)。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行(博友回复指出)。      所以C# 最终执行接近编译, java 最终执行接近解释。   Unity和 Mono的技术在ios 上除外。

           C# ,  Java 

 

多说一句:

              Java字节码的执行有两种方式:

1.即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。(这是C#采用的!)

2.解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程序的所有操作。(通常是这一种)






=============================================================================================================


每个语言都有他优美的地方,讨厌的地方。 我是最不爱参与“xxx是最牛x, 最叼的语言, 是世界上最好的语言”。 说明他一直在井里!

        每个语言基本上都是多重范式的组合。   


        多重编程范式:     并发编程,约束编程,数据流编程(Dataflow programming),声明性编程,分布式的编程,函数式编程,泛型编程,命令式编程,逻辑编程,元编程,面向对象编程,和响应式编程(Reactive programming)


           注: 一下内容链接, 可能需要科学上网,!

编程范型  :  https://zh.wikipedia.org/zh-cn/%E7%BC%96%E7%A8%8B%E8%8C%83%E5%9E%8B

  • 结构化编程对比非结构化编程
  • 命令式编程对比声明式编程
  • 消息传递编程对比命令式编程
  • 程序编程对比函数式编程
  • Value-level programming对比Function-level programming
  • 流程驱动编程对比事件驱动编程
  • 纯量编程对比阵列编程
  • 基于类编程对比基于原型编程(在面向对象编程的上下文中)
  • Rule-based programming对比Constraint programming(在逻辑编程的上下文中)
  • 基于组件编程(如OLE
  • 面向方面编程(如AspectJ
  • 符号式编程(如Mathematica
  • 面向表格编程(如Microsoft FoxPro
  • 管道编程(如Unix命令中的管道
  • Post-object programming
  • 面向主题编程
  • 自省编程或称反射编程

 

元编程

          metaprogramming  。根据百度百科的 介绍 ,是指某类计算机程序的编写,这类计算机程序编写或者操纵其他程序(或者自身)作为它们的数据,或者在运行时完成部分本应在编译时完成的工作。  最早听说到这个概念是在  C# .Net 平台中有所使用,因为有反射。 一门语言同时也是自身的元语言的能力称之为反射。编写元程序的语言称之为元语言,被操作的语言称之为目标语言

           反射是促进元编程的一种很有价值的语言特性。支持泛型编程的语言也使用元编程能力。  

               常见的开发语言均能做到元编程,Lisp这货就不用多说了,C的Marco,C++的Template、宏,Java的Annotation,C#的Attribute、Reflection、 CodeDom 和 IL Emitter, 各种脚本语言python(元编程:特性、描述符、类装饰器和元类等等),、Ruby , Elixir  ,甚至连Unix/Linux的shell脚本也能。Javascript 中,eval、new Function()便是两个可以用来进行元编程的特性。

            元编程常见的应用场景很多,扩展(重构)语法、开发DSL、生成代码、根据特定场景自动选择代码优化、解决一些正交的架构设计问题、AOP等等。

  链接: https://www.zhihu.com/question/22572900/answer/21828721

            《元编程艺术》 系列文章,  《Ruby元编程》, 


           我在学习的时候好奇过,就搜索了一下  【Python的decorater,与C#的attribute和Java的annotation有何异同? - 知乎】,  结论就是完全不是一回事儿。 

https://www.zhihu.com/question/40618143



命令式编程  和  声明式编程

          可以对比的(Imperative vs Declarative)

命令式编程:    应该是所有 C语言系的 ,有普通函数的语言都算。

声明式编程语言:SQL  、  d3.js ,  Python的 推导或内涵 ,C#中的特性  等等吧

网上流传着 这样的总结:

命令式编程:

命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。

声明式编程:

告诉“机器”你想要的是什么(what),让机器想出如何去做(how)。

 

 

响应式编程

            例如,在命令式编程环境中,a := b+c 表示将表达式的结果赋给,而之后改变b或c的值不会影响a。但在响应式编程中,a的值会随着bc的更新而更新

 

电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。

             例如,在MVC软件架构中,响应式编程允许将相关模型的变化自动反映到视图上数据绑定),反之亦然。

来自  


             未完, 待续。。。。。

孙广东  2017.8.3

http://blog.csdn.NET/u010019717


你可能感兴趣的:(C#语言,Erlang,学习笔记,Golang笔记,Lua,学习笔记,Python,学习笔记,Ruby,学习笔记)