计算机编程语言的特性汇总

Tags: 系统设计 

目录

说明

记录在了解编程语言时遇到一些特性。这里只关心那些可能影响到软件架构、开发模式的特性。常规语法、语法糖等不在此列。

Decorator in Python

面向对象中的概念。

语法:

在类中定义:
static returntype  fucnname (arguments)
{
	...
}

规则:

静态方法只能访问类的静态成员

非静态方法可以访问类的静态成员

静态方法可以用实例调用,也可以用类名调用

Reflection in Golang

http://blog.golang.org/laws-of-reflection

Reflection(反射), 在上面连接中做了非常详细准确的说明。

在Golang中, Interface(接口)也是一种类型, 一个变量的类型(MyInt)如果满足了一种接口类型(Reader)的要求,那么这个变量(m)就可以被赋值给接口变量(r), 反射操作的对象是接口变量(r)

通过反射可以: 从r中获得m的相关信息(Type and Value)、修改m的值

type Reader interface{
	Read(p []byte)(n int, err error)
}

type MyInt int

func (v MyInt) Read(p []byte)(n int, err error){
	...
}

var r io.Reader
var m MyInt

r = m

在软件设计或编程过程中,假设我们定义了一个参数是接口类型(Reader)的函数,那么所有满足这个接口类型的变量(m)都可以传递给这个函数。按照我个人理解,通常情况下,这样实现的时候应该意味着在函数内部我们只能够使用接口类型(Reader)中定义的成员(Read)。reflection则提供了更多的选择,使得我们可以在函数内部获得接口类型以外的内容(例如MyInt的成员).

如果用C语言来模拟,应该是如下情形:

Struct A{
	int a;
	int b;
};

struct A a;

void func(void *p){                 //在golang中传入的是接口, C中以空指针代替
	...
	struct A *pa = (struct A *)p;   //在golang中用reflection获得Struct A的其它成员信息, C中通过类型转换实现
	...
}

特别注意: 有一个特别需要注意的地方,上面的C语言的模拟中,是在事先知道Struct A类型的情况下进行的。golang中则是通过把类型信息存放在接口变量中的方式,得知p与Struct A的关联的。

golang的反射应当主要就是这个用途。(一直折腾浅显的C开发, 没有接触到过这种应用场景, 在开发技术方面落伍很多啊… 2014/06/27)

Closure

Decorator in Python

在tornado中看到python中@的用法,摸不着头脑,查了下@的来源。

最早在python2.4中引入了Decorator语法.

PEP 318: Decorators for Functions and Methods

python2.4中引入了@staticmethod和@classmethod用更清晰的方式(Decorator)声明静态成员和类成员

语法糖

编程中的一些通用或者常规的用法,被一些编程语言吸收成为新的语法, 这样的语法可以称作是语法糖。语法糖可以减少编程过程中的体力劳动, 但是语言学习过程中需要学习的内容也相应增加。

with – in Python

https://docs.python.org/3/reference/compound_stmts.html#the-with-statement

使用with时,with的作用对象必须是实现了属性__enter__(self)__exit__(self, exc_type, exc_value, traceback)

示例:

class Sample:
	def __init__(self,name):
		self.name=name;
	def __enter__(self):
		print("__enter__")
		return self
	def __exit__(self, type, value, trace):
		print("__exit__")

with Sample("hahah") as s:
	print("sample name%s", s.name)

执行步骤:

1 类Sample的__init__函数被执行, 构建了对象
2 对象的__enter__函数被执行, 返回的值被赋予了"with XXX as s"中的s
3 with下的语句块被执行
4 对象的__exit__函数被执行  //__exit__函数用来处理with下语句块执行时抛出的异常

__enter__与__exit__的详细说明


系统设计

  1. 各大云厂商的 API 设计风格
  2. Google 是如何实践 RESTful API 设计的?
  3. Netflix 的异地多活设计: Active-Active for Multi-Regional Resiliency
  4. Facebook 的缓存系统实践经验《Scaling Memcache at Facebook》
  5. 多机数据系统的正确性与一致性
  6. 《大型网站技术架构: 核心原理与案例分析》阅读摘录
  7. 《分布式金融架构课》阅读笔记2: 线性一致的分布式数据系统的实现过程
  8. 《分布式金融架构课》阅读笔记1: 单机&多机并发/多副本读写正确性和一致性
  9. 《消息队列高手课》阅读笔记: Rabbit/Rocket/Kafka/模型/消息事务/保序等
  10. 《消息队列高手课》阅读笔记: Rabbit/Rocket/Kafka/模型/消息事务/保序等
  11. 《Redis核心技术与实践》阅读笔记: 数据类型/存储开销/Rehash/案例等
  12. 《Redis核心技术与实践》阅读笔记: 数据类型/存储开销/Rehash/案例等
  13. 《高并发系统设计40问》阅读笔记: 数据库/缓存/消息队列/分布式服务
  14. 《高并发系统设计40问》阅读笔记: 数据库/缓存/消息队列/分布式服务
  15. 《MySQL实战45讲》阅读笔记: 索引类型/数据可靠性/事务/间隙锁/临时表等
  16. 系统性能分析方法论: 统计图谱工具
  17. 张磊《深入剖析Kubernetes》专栏的阅读笔记
  18. 代理服务软件haproxy、nginx、envoy对比,以及开源的API网关项目对比
  19. 蓝绿部署、金丝雀发布(灰度发布)、A/B测试的准确定义
  20. 阿里巴巴的应用限流和服务降级是怎样实现的?|如何打造平台稳定能力
  21. 陈皓《左耳听风》专栏的阅读笔记(持续更新)
  22. 好雨云帮,一款不错的国产开源PaaS
  23. 怎样为软件的不同版本命名?
  24. 怎样选择开源项目的license?
  25. Glusterfs的架构
  26. 怎样设计一个企业级的PaaS平台?
  27. 几种常见的LDAP系统
  28. DNS SRV介绍(一种用DNS做服务发现的方法)
  29. DNS,DNS-Domain Name System
  30. 思科的网络设备
  31. 虚拟化技术汇总
  32. 认证与授权系统的汇总
  33. 高可用实现方法汇总
  34. 编译器汇总
  35. Linux系统的优化方法
  36. CentOS7的一些变化
  37. 分布式系统的一些知识
  38. 计算机编程语言的特性汇总
  39. 网络通信的一些基础知识
  40. PCIE总线的一些知识
  41. 操作系统的API
  42. 网卡的一些知识
  43. Linux系统的构建过程
  44. 数据结构与算法
  45. CPU的相关知识

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  李佶澳的博客  系统软件  程序语言  运营经验  关注方向  水库文集  网文收藏  网络课程  发现知识星球  百度搜索 谷歌搜索