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

原创 2017年08月07日 22:40:04


孙广东  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中不能

 

 

 

 

动态语言/静态语言

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

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

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

 

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

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

 

动的:

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

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

 

静的:

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

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

 

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

x = 1

x = "shjkg"  

print(x)

 

 

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

 

 

 

 

编译型语言 和 解释型语言

编译型语言

        需通过编译器(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

 

元编程

          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软件架构中,响应式编程允许将相关模型的变化自动反映到视图上数据绑定),反之亦然。

来自 <https://zh.m.wikipedia.org/wiki/%E5%93%8D%E5%BA%94%E5%BC%8F%E7%BC%96%E7%A8%8B


             未完, 待续。。。。。

孙广东  2017.8.3

http://blog.csdn.NET/u010019717


版权声明:本文为博主原创文章,未经博主允许不得转载。出自 游戏开发实验室_孙广东

相关文章推荐

通过Unity3d创建二维码(利用zxing2.2)

首先 下载ZXing.Net.0.12.0.0.zip,下载地址为http://zxingnet.codeplex.com/ 然后找到其中的unity文件夹,将文件夹放到Unity的工程内。 脚本: ...

Unity 播放 带 alpha 通道的视频(Video Player组件)

通常是  .webm类型文件!!!!!  你可以下载这个文件到本地: Http://tsubakit1.sakura.ne.jp/temp/unity_B.webm         ...

VS code 编辑器(文件或者文件夹的右键打开菜单的显示)

孙广东  2016.7.24http://blog.csdn.net/u010019717使用 VSCODE的过程中非常好奇,  为什么没有  在文件或者文件夹上右键可以使用  VSCODE打开的快捷...

使用Visual Studio 2015开发Python Django

孙广东   2016.6.24http://blog.csdn.net/u010019717VS 本身就是全宇宙最强的开发工具,  微软官方开发和维护者.Net版的 python .  IronPyt...

解析p12格式的程序(提取公钥和私钥)

p12是常有的封装格式。#include #include #include #include #include #include #include  static const char *mon[1...

读书笔记之《七周七语言——理解多种编程范型》Ruby语言学习

正如此书中简介所介绍的一样,作为一个程序员,想要提高自己的编程水平,学习了解各种编程语言是一个很有效的途径。通过吸收各种语言的精髓融入到自己最熟悉的语言代码中去。也许你只是一个Objective-c程...

范型编程与STL--第一章(1)

1.STL算法范型不和任何特定数据结构和对象类型绑定一起 2.STL可以扩容的 3.iterator的适用范围可以从普通c语言指针到输出流的外层包装,很广泛 自己动手写一个从输出流一次返回一行的...

理解编程范型

理解编程范型所谓编程模型就是每种程序设计语言其开发都存在自己的编程模型. 四大编程范型面向对象编程模型如今面向对象无疑是最强势的编程范型,而java正是面向对象语言的典型代表. 这种范型有三大主要思想...

“主要的编程范型”及其语言特性关系(多图)

“主要的编程范型”(The principal programming paradigms)这幅图,其实出现得不算早,作者在2007年完成了该图的1.0版,到2008年更新至v1.08版本。本次提供的...

图书封面的故事之——“巴别塔”选自《七周七语言:理解多种编程范型》

我认为,图书的封面很重要,因为首先映入读者眼帘的就是封面,他可以诱发潜在的读者去注意图书,图书的封面可以显示出很多信息,例如书名、推荐语、评价、出版单位等,最重要的还是要给图书起一个好的名字,一本好书...
  • liuzif
  • liuzif
  • 2012-08-23 15:07
  • 4434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)