Category Archives: Language

开源项目列表

红色字体是现阶段比较火的

—————————————————————————————————————-

奇虎360 https://github.com/Qihoo360


1.MySQL中间层 Atlas

Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。

主要功能:
* 读写分离
* 从库负载均衡
* IP过滤
* SQL语句黑白名单
* 自动分表

更多内容:https://github.com/Qihoo360/Atlas

 

2.360黑科技=》DroidPlugin

​DroidPlugin 是360手机助手在 Android 系统上实现了一种新的插件机制:它可以在无需安装、修改的情况下运行APK文件,此机制对改进大型APP的架构,实现多团队协作开发具有一定的好处。

特点:

  1. 支持Androd 2.3以上系统
  2. 插件APK完全不需做任何修改,可以独立安装运行、也可以做插件运行。要以插件模式运行某个APK,你无需重新编译、无需知道其源码。
  3. 插件的四大组件完全不需要在Host程序中注册,支持Service、Activity、BroadcastReceiver、ContentProvider四大组件
  4. 插件之间、Host程序与插件之间会互相认为对方已经”安装”在系统上了。
  5. API低侵入性:极少的API。HOST程序只是需要一行代码即可集成Droid Plugin
  6. 超强隔离:插件之间、插件与Host之间完全的代码级别的隔离:不能互相调用对方的代码。通讯只能使用Android系统级别的通讯方法。
  7. 支持所有系统API
  8. 资源完全隔离:插件之间、与Host之间实现了资源完全隔离,不会出现资源窜用的情况。
  9. 实现了进程管理,插件的空进程会被及时回收,占用内存低。
  10. 插件的静态广播会被当作动态处理,如果插件没有运行(即没有插件进程运行),其静态广播也永远不回被触发。

更多查看:https://github.com/Qihoo360/DroidPlugin/

 

3.高性能分布式存储服务 HustStore

huststore 是一个高性能的分布式存储服务,不但提供了 10w QPS 级别的 kv 存储的功能,还提供了 hash、set 等一系列数据结构的支持,并且支持 二进制 的 kv 存储,可以完全取代 Redis 的功能。此外,huststore 还结合特有的 HA 模块实现了分布式消息队列的功能,包括消息的流式推送,以及消息的 发布-订阅 等功能,可以完全取代 RabbitMQ 的功能。

特性

huststore 分为 hustdb 以及 HA 模块两大部分。hustdb (存储引擎)的底层设计采用了自主开发的 fastdb,通过一套独特的 md5 db 将QPS 提升至 10w 级别的水准(含网络层的开销)。HA 以 nginx 模块的方式开发。nginx 是工业级的 http server 标准,得益于此,huststore 具备以下特性:

    • 高吞吐量
      hustdb 的网络层采用了开源的 libevhtp 来实现,结合自主研发的高性能 fastdb 存储引擎,性能测试 QPS 在 10w 以上。
    • 高并发
      参考 nginx 的并发能力。
    • 高可用性
      huststore 整体架构支持 Replication (master-master),支持 load balance 。
      HA 的可用性由nginx 的 master-worker 架构所保证。当某一个 worker 意外挂掉时, master 会自动再启动一个 worker 进程,而且多个 worker 之间是相互独立的,从而保证了 HA 的高可用性。
      huststore 的高可用性由其整体架构特点保证。由于 hustdb 的存储节点采用了 master-master 的结构,当某一个存储节点挂掉时,HA 会自动将请求打到另外一台 master,同时 HA 会按照自动进行负载均衡,将数据分布存储在多个 hustdb节点上,因此存储引擎不存在单点限制。
      同时 HA 集群本身也是分布式的设计,而且每个 HA 节点都是独立的,当某一台 HA 挂掉时, LVS 会自动将请求打到其他可用的 HA 节点,从而解决了 HA 得单点限制。
    • 通用性的接口
      huststore 使用 http 作为通用协议,因此客户端的实现不限制于语言。
    • 支持二进制的 key-value

更多查看:https://github.com/Qihoo360/huststore

 

4.分布式配置管理工具 QConf

QConf 是奇虎 360 内部分布式配置管理工具。用来替代传统的配置文件,使得配置信息和程序代码分离,同时配置变化能够实时同步到客户端,而且保证用户高效读取配置,这使的工程师从琐碎的配置修改、代码提交、配置上线流程中解放出来,极大地简化了配置管理工作。

特点

  • 一处修改,所有机器实时同步更新
  • 高效读取配置
  • 安装部署方便,使用简单
  • 服务器宕机、网络中断、集群迁移等异常情况对用户透明
  • 支持c/c++、shell、php、python、lua 等语言

更多查看:https://github.com/Qihoo360/QConf

 

5.开源类Redis存储系统 Pika

Pika 是 360 DBA 和基础架构组联合开发的类 Redis 存储系统,完全支持 Redis 协议,用户不需要修改任何代码,就可以将服务迁移至 Pika。有维护 Redis 经验的 DBA 维护 Pika 不需要学习成本。

Pika 主要解决的是用户使用 Redis 的内存大小超过 50G、80G 等等这样的情况,会遇到启动恢复时间长,一主多从代价大,硬件成本贵,缓冲区容易写满等问题。Pika 就是针对这些场景的一个解决方案。

特点

  • 容量大,支持百G数据量的存储
  • 兼容redis,不用修改代码即可平滑从redis迁移到pika
  • 支持主从(slaveof)
  • 完善的运维命令

更多内容:https://github.com/Qihoo360/pika

 

6.对象缓存服务器 kmemcache

分布式linux内核内存对象缓存服务器,实现基于memcached v1.4.15,基本兼容memcached的所有操作。经初步测试,内存数据操作比memcached快1倍,网络并发量比memcached的也大许多,目前处于alpha版本。

优点:由于在内核的socket层实现,所有处理网络事件性能比epoll机制快,另外无需内存由用户空间到内核空间的拷贝。

缺点:不建议在32bits下使用。

更多内容: https://github.com/Qihoo360/kmemcache

 

7.ngx_http_subrange_module

当Nginx作为文件下载服务的反向代理,用户请求一个非常大的文件的时候,它会一直占满反向代理服务器与后端主机之间的带宽。因为nginx一次获取整个文件,缓冲获取到的文件,导致客户端不能马上读取到。带宽使用和iowait会很高。

ngx_http_subrange_module就是为了解决这个问题,它能分割HTTP requests。将大数据量的HTTP请求切分为多个子请求,当下载一个1 G的文件,subrange将从后端主机中下载文件块,比如先获取5 M,然后再获取5 M,直到客户端下载完整个文件。

更多查看:https://github.com/Qihoo360/ngx_http_subrange_module

 

8.同步到异步的类库 Mario

Mario是一个让编写从同步到异步的类库,它的线程安全较大,易于使用。Mario 的最基本的想法就是为了减少人员的安排,降低成本和时间投入。但是有了这个类库,操作人员就可以抽出精力做别的事情了。所以 Mario 类库能够很轻易的解决你的问题,你只需要你自己的消息功能。

引擎类型:

  • memory,这种类型就是将数据缓冲存储器留在内存里。
  • file,这种类型就是能够在本地日志路径里创建做出一个 write2file。

更多查看:https://github.com/Qihoo360/Mario

 

其他系列请去360github库观看

—————————————————————————————————————-

百度 Baidu https://github.com/fex-team/

https://github.com/ecomfe
1.UEditor 编辑器

UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。

主要特点:

轻量级:代码精简,加载迅速。

定制化:
全新的分层理念,满足多元化的需求。
采用三层架构:
1. 核心层: 为命令层提供底层API,如range/selection/domUtils类。
2. 命令插件层: 基于核心层开发command命令,命令之间相互独立。
3. 界面层: 为命令层提供用户使用界面。
满足不同层次用户的需求。

https://github.com/fex-team/ueditor

https://github.com/fex-team/umeditor

 

2.ECharts 图表库

ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。提供商业产品常用图表,底层基于ZRender(一个全新的轻量级canvas类库),创建了坐标系,图例,提示,工具箱等基础组件,并在此上构建出折线图(区域图)、柱状图(条状图)、散点图(气泡图)、饼图(环形图)、K线图、地图、力导向布局图以及和弦图,同时支持任意维度的堆积和多图表混合展现。

更多:https://github.com/ecomfe/echarts

 

ECharts-X是 ECharts 团队推出的全新 3D 可视化库,它是基于 ECharts 的扩展,底层深度整合了 WebGL 库QTEK和 Canvas2D 库ZRender。

扩展:https://github.com/ecomfe/echarts-x

 

3.WebUploader 上传控件

WebUploader 是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,延用原来的FLASH运行时,兼容IE6+,Andorid 4+,IOS 6+。两套运行时,同样的调用方式,可供用户任意选用。采用大文件分片并发上传,极大的提高了文件上传效率。

https://github.com/fex-team/webuploader

 

4.百度脑图 KityMinder

KityMinder 是百度FEX团队的f-cube小组(原UEditor小组)的又一力作。作为一款在线的脑图编辑工具,它有着很多Native编辑工具的交互体验。KM与UE有着一样的宗旨,就是注重最终用户的使用体验。同时,它充分发挥了Web云存储的优势,可以直接将编辑中的脑图同步到云端。此外,借由独创的 “云盘分享”功能,用户可以一键将当前编辑的脑图直接生成在线链接共享给其他用户,实现无缝沟通。
KM是基于SVG技术实现,使用JavaScript+html实现。支持绝大多数的主流浏览器。
支持列表如下
1. chrome
2. firefox
3. safari
4. ie9-11

https://github.com/fex-team/kityminder

 

5.人工智能系统 WARP-CTC

WARP-CTC 基于 CTC 方法,当前可用的一些 CTC 实现通常要求大量的内存或者是慢十到几百倍。

百度研究所首席科学家 Andrew Ng 称他的研究主要是人工神经网络如何在图形处理单元 (GPUs) 上运行,让 WARP-CTC 实现对 GPUs 和 x86 CPUs 的支持。

connectionist temporal classification (CTC) 方法可以追溯到 2006 年,在 Swiss AI 研究所 IDSIA 论文上有记录。 百度研究所开发的 WARP-CTC 就基于 CTC 方案,但是改进了其自身的语音识别功能

https://github.com/baidu-research/warp-ctc

 

其他系列请去baidu github库观看
—————————————————————————————————————-

腾讯 QQ http://alloyteam.github.io/

https://github.com/AlloyTeam/Mars

https://github.com/tencent-wechat
1.WeUI 为微信Web服务量身设计

WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知更加统一。包含buttoncelldialogprogresstoastarticleactionsheeticon等各式元素。

https://github.com/weui/weui

 

2.手机前端开发调试利器 vConsole

我们在开发手机版网页的时候,常常会出现下面的情景:

(1) 开发时,在自己电脑上运行得好好的,在手机上打开就挂了,但是手机上又看不到error log;

(2) 上线后,某用户表示页面失灵,但我们自己又重现不出来,看不到用户侧的出错信息。

如果说(1)还可以通过电脑连接手机以查看log来解决,那(2)在没有完善的前端上报体系时就非常被动了。

作为开发者,我们的诉求很简单:有没有快捷的方法在手机前端页面看到log日志?vConsole就这样出现了!

https://github.com/WechatFE/vConsole

 

3.专业级Web图像处理引擎 AlloyImage

AlloyImage是一个使用Javascript语言开发的,基于Web的在线图像处理引擎,除了核心底层图像处理引擎,还同时集成了一些方便快捷的图像处理API,您可以将它简单快捷的引用到您的Web网页中,做出与PhotoShop一样的优美效果。甚至,你可以用AlloyImage来开发一个Web在线图像处理软件。

https://github.com/AlloyTeam/AlloyImage

https://github.com/AlloyTeam/AlloyPhoto

 

4. GoPng 图片合并并生成CSS

Css Sprite,有时也称为雪碧图、精灵图,是每一个前端开都会遇到的问题,也是常见的小图片加载优化手段。

在线版本:https://alloyteam.github.io/gopng/

源码地址:https://github.com/AlloyTeam/gopng

合成分解:https://github.com/luyongfugx/hcSpriteCuter (一个由多张小图合并而成的雪碧图中抠出其中一张或者几张图片)

 

5.可视化Web构建工具 AlloyDesigner

AlloyDesigner 是一款致力于提高前端生产效率的浏览器内运行工具,AlloyDesigner + Chrome F12(Especially with WorkSpace) 打造前端新的开发和测试模式

https://github.com/AlloyTeam/AlloyDesigner

 

6.Koala跨平台图形编译工具

Koala是一款预处理器语言图形编译工具,支持Less、Sass、CoffeeScript、Compass framework 的即时编译。 无需手动输入命令去编译,后台监听文件是否有改变,如有修改会自动进行编译。能够大大提升 Web 开发中的工作效率。

功能特性

  • 多语言支持 支持Less、Sass、CoffeeScript 和 Compass Framework。
  • 实时编译 监听文件,当文件改变时自动执行编译,这一切都在后台运行,无需人工操作。
  • 编译选项 可以设置各个语言的编译选项。
  • 项目配置 支持为项目创建一个全局配置,为文件设置统一编译选项。
  • 错误提示 在编译时如果遇到语法的错误,koala将在右下角弹出错误信息,方便开发者定位代码错误位置。
  • 跨平台 Windows、Linux、Mac都能完美运行。

系统支持及要求

Koala支持跨平台运行,完美兼容Windows、Linux与Mac 。
Linux系统下需安装好ruby运行环境, e.g. $ sudo apt-get install ruby.

https://github.com/oklai/koala

 

7.轻量级 CSS3 动画库 JX.Animate

JX.Animate 是一个开源的轻量级的CSS3动画库。动画可以使用标准的CSS3关键帧动画(KeyFrame)制作,也可以使用JavaScript制作,而且还可以支持在JavaScript中动态生成动画关键帧。

https://github.com/AlloyTeam/JXAnimate

 

8.Fanvas swf转为html5 canvas

Fanvas是一个把swf转为html5 canvas动画的系统,由两部分组成:Actionscript实现的解析器、js运行库。Flash做动画是最成熟最高效的方式,但由于终端基本不支持Flash播放,这给终端的动画制作带来了不少麻烦。Fanvas是Flash和Canvas的完美结合,可以把swf(包括矢量和位图)完美地转化为canvas动画.

https://github.com/TencentOpen/Fanvas

 

9.随身调测平台 GT

GT(随身调)是APP的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug Environment)。利用GT,仅凭一部手机,无需连接电脑,您即可对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、 开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。如果您觉得GT提供的功能还不够满足您的需要,您还 可以利用GT提供的基础API自行开发有特殊功能的GT插件,帮助您解决更加复杂的APP调试问题。

https://github.com/TencentOpen/GT

 

10.Frozen UI 移动端UI框架

Frozen UI是一个开源的简单易用,轻量快捷的移动端UI框架。基于手Q样式规范,选取最常用的组件,做成手Q公用离线包减少请求,升级方式友好,文档完善,目前全面应用在腾讯手Q增值业务中。

https://github.com/frozenui/frozenui

 

11.LivePool Web 开发调试工具

LivePool 是一个基于 NodeJS,类似 Fiddler 支持抓包和本地替换的 Web 开发调试工具,是 Tencent AlloyTeam 在开发实践过程总结出的一套的便捷的 WorkFlow 以及调试方案。

特性

  • 基于 NodeJS, 跨平台
  • 支持 http 抓包和本地替换调试,Https/WebSockets 直接代理转发(暂不支持本地替换)
  • 便捷的 UI 管理界面,跟 Fiddler 类似,降低学习成本
  • 可以脱离 UI 后台运行,适应于某些不需要抓包,只需要使用替换和简单路由的场景
  • 基于项目的替换规则管理,方便高效,规则支持拖曳排序
  • 支持基于请求路径的本地文件替换,支持基于请求路径的路由转发(host 配置)
  • 替换类型支持:文件/文件夹替换,combo合并替换,qzmin替换(批量combo),delay延时等
  • 支持自动设置系统代理
  • 支持规则过滤,只显示关注的请求
  • 提供构建 http get/post 请求界面,方便接口调试
  • 特色功能:模拟gprs/3g等低网速(mac only)
  • 特色功能:支持离线站点到本地,并自动代码格式化

https://github.com/rehorn/livepool

 

12.KNVProtoEngine 高性能树型协议处理引擎

KNV是一个模式自由的高性能树型协议处理引擎,是对Key-Value的一个通用结构化扩展。

应用特性

正如NoSQL对SQL的彻底变革一样,KNV是对Key-Value的彻底变革!
大家都很熟悉Key-Value系统,但KV操作极不方便:
— 你不得不自己做乐观锁(读返回seq->修改->带seq写->seq变化则重头开始);
— 你不得不拉取一堆数据,然后再提取你想要的部分;
— 为了修改一个bit,你不得不把一串数据拉取修改后再一起提交更新
不过现在有KNV,一切都解决了。KNV时代来了,你还在犹豫吗?

应用场景

KNV是专门针对以Protocol Buffers(或类似树型结构)存储的存储系统开发的,有3个应用场景:

    1. 存储系统 处理用户请求的通用解决方法(Get/Set/Delete),可以适配任意用户自定义的数据结构。
    2. 代理/通用逻辑层 服务器处理Protocol Buffers协议的通用方法 – 比如通用Proxy,透传多个协议, 对请求包进行鉴权、限频、统计等等操作,还支持对包体内容进行审计,使用KNV协议, 这种方法就有可能而且很简单。
    3. 原生态 Protocol Buffers打解包库 的高性能代替品。

https://github.com/TencentOpen/KNVProtoEngine

 

13.Behaviac 游戏AI的开发框架组件

Behaviac是游戏AI的开发框架组件,也是游戏原型的快速设计工具。支持行为树BT,状态机FSM,HTN等多种范式,方便的编辑和调试。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发。编辑器可以运行在PC上,操作方便直观可靠,支持实时和离线调试;编辑器可以导出xml,bson等多种格式,更可以导出C++,C#源码,提供最高效率。运行时支持全平台,有C++和C#两个版本,原生支持Unity。

已被《天天炫斗》、《QQ飞车》、《全民突击》、《全民夺宝》、《九龙战》等游戏及其他更多预研项目使用。

https://github.com/TencentOpen/behaviac

 

14.现代构建系统 Typhoon Blade

Blade主要定位于linux下的大型C++项目,密切配合研发流程,比如单元测试,持续集成,覆盖率统计等。但像unix下的文本过滤程序一 样,保持相对的独立性,可以单独运行。目前重点支持i386/x86_64 Linux,未来可以考虑支持其他的类Unix系统。

特点:

  • 自动分析头文件依赖关系,构建受影响的代码。
  • 增量编译和链接,只构建因变更受影响而需要构建的。
  • 自动计算库的间接依赖,库的作者只需要写出直接依赖,构建时自动检查所依赖的库是否需要重新构建。
  • 在任意代码树的任意子目录下都能构建。
  • 支持一次递归构建多个目录下的所有目标,也支持只构建任意的特定的目标。
  • 无论构建什么目标,这些目标所依赖的目标也会被自动连坐更新。
  • 内置 debug/release 两种构建类型。
  • 彩色高亮构建过程中的错误信息。
  • 支持 ccache
  • 支持 distcc
  • 支持基于构建多平台目标
  • 支持构建时选择编译器(不同版本的gcc,clang等)
  • 支持编译 protobuf,lex, yacc, swig
  • 支持自定义规则
  • 支持测试,在命令行跑多个测试
  • 支持并行测试(多个测试进程并发运行)
  • 支持增量测试(无需重新运行的测试程序自动跳过)
  • 集成 gperftools,自动检测测试程序的内存泄露
  • 构建脚本 vim 语法高亮
  • svn 式的子命令命令行接口。
  • 支持 bash 命令行补全
  • 用 Python 编写,无需编译,直接安装使用。

彻底避免以下问题:

  • 头文件更新,受影响的模块没有重新构建。
  • 被依赖的库需要更新,而构建时没有被更新,比如某子目录依赖遥远的某外部目录的代码,我在这个目录构建,外部目录的代码会被自动检查是否也需要重新构建。

https://github.com/chen3feng/typhoon-blade

 

15.RapidJSON C++的JSON开发包

Rapidjson 是一个 C++ 的快速 JSON 解析器和生成器,使用 SAX/DOM 风格的 API 设计。

https://github.com/miloyip/rapidjson

 

16. 微信开源PhxSQL

PhxSQL是一个兼容MySQL、服务高可用、数据强一致的关系型数据库集群。PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下,可自身实现自动Master切换,且保证数据一致性。

https://github.com/tencent-wechat/phxsql

 

更多请自行查看:http://alloyteam.github.io/ https://github.com/tencent-wechat
—————————————————————————————————————-

新浪:WeiBo https://github.com/weibocom


1.分布式缓存服务器 memcachedb

memcachedb是 一个由新浪网的开发人员开放出来的开源项目,给memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异步主辅复制机制,让memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合于需要超高性能读写速度,但是 不需要严格事务约束,能够被持久化保存的应用场景,例如memcachedb被应用在新浪博客上面。

https://github.com/stvchu/memcachedb

2.动态流量管理方案 Upsync

Upsync,微博开源基于Nginx容器动态流量管理方案 。Nginx 以其超高的性能与稳定性,在业界获得了广泛的使用,微博的七层就大量使用了 Nginx 。结合 Nginx 的健康检查模块,以及动态 reload 机制,可以近乎无损的服务的升级上线与扩容。这个时候扩容的频次比较低,大多数情况下是有计划的扩容。Upsync,开发了模块 nginx-upsync-module,它的功能是拉取 consul 的后端 server 的列表,并更新 Nginx 的路由信息。此模块不依赖于任何第三方模块。consul 作为 Nginx 的 db,利用 consul 的 KV 服务,每个 Nginx work 进程独立的去拉取各个 upstream 的配置,并更新各自的路由。

https://github.com/weibocom/nginx-upsync-module

3.高性能的内核 Socket 实现 Fastsocket

Fastsocket 是一个高扩展性的 Socket 以及 Linux 内核的底层网络实现。可以在多核机器上提供极好的性能,此外使用和维护还非常简单。目前该项目已经在新浪的生产环境中使用。该项目由清华大学和新浪网联合组成的 Fastos 团队开发,该团队的使命是提升 Linux 内核的效率。Fastsocket 目前已经使用在新浪微博的生产环境上,主要用于提供负载均衡服务的 HAProxy,线上实际性能提升一倍,从2014年3月份稳定运行至今,预计2014年底完成负载均衡全部集群的 Fastsocket 升级。Fastsocket 完全兼容 BSD Socket API,现有各类基于 Socket 的网络应用可以直接使用 Fastsockt。 目前经过兼容测试的常用服务软件有:HAProxy、Nginx、Lighttpd、Redis 和 Memcached。

https://github.com/fastos/fastsocket

4.轻量级 RPC 框架 Motan

Motan 是一套高性能、易于使用的分布式远程服务调用(RPC)框架。

功能

  • 支持通过spring配置方式集成,无需额外编写代码即可为服务提供分布式调用能力。
  • 支持集成consul、zookeeper等配置服务组件,提供集群环境的服务发现及治理能力。
  • 支持动态自定义负载均衡、跨机房流量调整等高级服务调度能力。
  • 基于高并发、高负载场景进行优化,保障生产环境下RPC服务高可用。

https://github.com/weibocom/motan

5.TCP 性能剖析工具 Tcpdive

Tcpdive 是 TCP 性能剖析工具,主要特性:

  • 更多 TCP 内部性能信息
  • 定量评估 TCP 性能改进
  • 描述在 TCP 层的 HTTP 处理,依赖于 HTTP Apps
  • 容易部署,使用友好

Tcpdive 已经在新浪的生产环境上部署使用:

  • 提高微博图片服务质量
  • 提高微博视频服务质量
  • 在有线和无线网络中比较 TCP 性能
  • 记录不同应用的 TCP 流量

https://github.com/fastos/tcpdive

6.PHP框架 Yaf

Yaf是一个C语言编写的PHP框架,Yaf 的特点:

  1. 用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销.
  2. 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存.
  3. 更短的内存周转周期, 提高内存利用率, 降低内存占用率.
  4. 灵巧的自动加载. 支持全局和局部两种加载规则, 方便类库共享.
  5. 高性能的视图引擎.
  6. 高度灵活可扩展的框架, 支持自定义视图引擎, 支持插件, 支持自定义路由等等.
  7. 内建多种路由, 可以兼容目前常见的各种路由协议.
  8. 强大而又高度灵活的配置文件支持. 并支持缓存配置文件, 避免复杂的配置结构带来的性能损失.
  9. 在框架本身,对危险的操作习惯做了禁止.
  10. 更快的执行速度, 更少的内存占用.

https://github.com/laruence/yaf
—————————————————————————————————————-

小米:XiaoMi https://github.com/XiaoMi


1.分布式的发布和监控系统 Minos

Minos 是小米公司开发的一个分布式的发布和监控系统。最初是小米开发的用来在 Hadoop 和 ZooKeeper 集群上发布和管理的工具。Minos 可轻松扩展来支持其他的系统,目前已经支持包括 HDFS、YARN 和 Impala 。

https://github.com/XiaoMi/minos

 

2.互联网企业级监控系统 OpenFalcon

Open-Falcon 是小米运维部开源的一款互联网企业级监控系统解决方案.

监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择。当公司刚刚起步,业务规模较小,运维团队也刚刚建立的初期,选择一款开源的监控系统,是一个省时省力,效率最高的方案。之后,随着业务规模的持续快速增长,监控的对象也越来越多,越来越复杂,监控系统的使用对象也从最初少数的几个SRE,扩大为更多的DEVS,SRE。这时候,监控系统的容量和用户的“使用效率”成了最为突出的问题。

监控系统业界有很多杰出的开源监控系统。我们在早期,一直在用zabbix,不过随着业务的快速发展,以及互联网公司特有的一些需求,现有的开源的监控系统在性能、扩展性、和用户的使用效率方面,已经无法支撑了。

因此,我们在过去的一年里,从互联网公司的一些需求出发,从各位SRE、SA、DEVS的使用经验和反馈出发,结合业界的一些大的互联网公司做监控,用监控的一些思考出发,设计开发了小米的监控系统:Open-Falcon。

Highlights and features

  • 数据采集免配置:agent自发现、支持Plugin、主动推送模式
  • 容量水平扩展:生产环境每秒50万次数据收集、告警、存储、绘图,可持续水平扩展。
  • 告警策略自发现:Web界面、支持策略模板、模板继承和覆盖、多种告警方式、支持回调动作。
  • 告警设置人性化:支持最大告警次数、告警级别设置、告警恢复通知、告警暂停、不同时段不同阈值、支持维护周期,支持告警合并。
  • 历史数据高效查询:秒级返回上百个指标一年的历史数据。
  • Dashboard人性化:多维度的数据展示,用户自定义Dashboard等功能。
  • 架构设计高可用:整个系统无核心单点,易运维,易部署。

https://github.com/XiaoMi/open-falcon

 

3.物联网框架 IoT.js

IoT.js 旨在为物联网提供一个基于 Web 技术的可相互操作的服务平台。IoT.js 的目标是要在资源受限的设备上良好运行,例如只有几 KB 的 RAM。所以它支持广泛的物联。

https://github.com/Samsung/iotjs
—————————————————————————————————————-

豆瓣 DouBan https://github.com/douban


1.分布式计算框架 DPark

DPark 是 Spark 的 Python 克隆,是一个Python实现的分布式计算框架,可以非常方便地实现大规模数据处理和迭代计算。 DPark 由豆瓣实现,目前豆瓣内部的绝大多数数据分析都使用DPark 完成,正日趋完善。

https://github.com/douban/dpark

 

2.iOS/Mac 音频播放器 DOUAudioStreamer

DOUAudioStreamer 是 iOS 和 Mac 的基于核心音频的流媒体音频播放器。

https://github.com/douban/DOUAudioStreamer

 

3.CODE 豆瓣代码托管系统

Douban CODE 是豆瓣开发的一个基于 git 版本控制系统的协作平台。

CODE —— C: Community O: Original D: Developer E: Eldamar

目前 CODE 仅开放了一个框架,支持:

  • clone & push project
  • create project
  • create user

准备环境

  • MySQL
  • Memcached
  • Python >= 2.7
  • pip >= 1.4.1
  • virtualenv
  • git

https://github.com/douban/code
—————————————————————————————————————-

网易 NetEase https://github.com/netease


1.分布式TCP压力测试工具 tcpcopy

tcpcopy是一种应用请求复制(基于tcp的packets)工具,其应用领域较广,目前已经应用于国内各大互联网公司。

总体说来,tcpcopy主要有如下功能:

1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测试工具真实地多),也可以提前发现一些bug
2)普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开发者有信心上线
3)对比试验,同样请求,针对不同或不同版本程序,可以做性能对比等试验
4)利用多种手段,构造无限在线压力,满足中小网站压力测试要求
5)实战演习(架构师必备)

https://github.com/session-replay-tools/tcpcopy

 

2.桌面应用软件的跨平台解决方案 heX

heX 是网易有道搜索部门开发的一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案,基于HTML5 + node.js,类似appjs。是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁琐的UI和交互开发工作,使其变的简单而高效。特别适合重UI,重交互的桌面应用软件。

https://github.com/netease-youdao/hex

https://github.com/netease-youdao/hex-samples

 

3.Android性能测试工具 Emmagee

Emmagee是监控指定被测应用在使用过程中占用机器的CPU、内存、流量资源的性能测试小工具。

支持SDK:Android2.2以及以上版本

Emmagee功能介绍

1、检测当前时间被测应用占用的CPU使用率以及总体CPU使用量

2、检测当前时间被测应用占用的内存量,以及占用的总体内存百分比,剩余内存量

3、检测应用从启动开始到当前时间消耗的流量数

4、测试数据写入到CSV文件中,同时存储在手机中

5、可以选择开启浮窗功能,浮窗中实时显示被测应用占用性能数据信息

6、在浮窗中可以快速启动或者关闭手机的wifi网络

https://github.com/NetEase/Emmagee

 

4.基于udp的请求复制工具 udpcopy

udpcopy用来解决udp应用的一个开源软件,与tcpcopy同属于xcopy系列,可以导入udp流量到测试系统中去,这样就可以有效地对系统进行各种测试,比如压力测试,冒烟测试等等。

https://github.com/wangbin579/udpcopy

 

5.实时编辑刷新的前端服务器 Puer (推荐:browser-sync https://github.com/BrowserSync/browser-sync

简而言之,Puer是一个可以实时编辑刷新的前端服务器。特性一览:

  • 提供一个当前或指定路径的静态服务器
  • 所有浏览器的实时刷新:编辑css实时更新(update)页面样式,其它文件则重载(reload)页面
  • 提供简单熟悉的mock请求的配置功能,并且配置也是自动更新。
  • 可用作代理服务器,调试开发既有服务器的页面,可与mock功能配合使用
  • 集成了weinre,并提供二维码地址,方便移动端的调试
  • 可以作为connect中间件使用(前提是后端为nodejs,否则请使用代理模式)

https://github.com/leeluolee/puer
————————–阿里巴巴开源的好软件太多,请自行选择所需,我列几个我们用的————————-

阿里巴巴 Alibaba https://github.com/alibaba/ https://github.com/thx


1.分布式key/value存储系统 Tair

Tair是由淘宝网自主开发的Key/Value结构数据存储系统,在淘宝网有着大规模的应用。您在登录淘宝、查看商品详情页面或者在淘江湖和好友“捣浆糊”的时候,都在直接或间接地和Tair交互。Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别和我们通常所说的缓存和持久化存储对应。

Tair除了普通Key/Value系统提供的功能,比如get、put、delete以及批量接口外,还有一些附加的实用功能,使得其有更广的适用场景,包括:

  • Version支持
  • 原子计数器
  • Item支持

https://github.com/alibaba/tair

 

2.TFS 分布式文件系统

TFS(Taobao FileSystem)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,其设计目标是支持海量的非结构化数据。

目前,国内自主研发的文件系统可谓凤毛麟角。淘宝在这一领域做了有效的探索和实践,Taobao File System(TFS)作为淘宝内部使用的分布式文件系统,针对海量小文件的随机读写访问性能做了特殊优化,承载着淘宝主站所有图片、商品描述等数据存储。

https://github.com/alibaba/tfs

 

3.消息中间件 RocketMQ

https://github.com/alibaba/RocketMQ

https://github.com/alibaba/RocketMQ-docs

 

4.分布式计算系统 JStorm

Jstorm是参考storm的实时流式计算框架,在网络IO、线程模型、资源调度、可用性及稳定性上做了持续改进,已被越来越多企业使用

https://github.com/alibaba/jstorm

 

5.淘宝Web服务器 Tengine

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

 

以下沿引项目主页上的特性介绍:

 

  • 继承Nginx-1.2.8的所有特性,100%兼容Nginx的配置;
  • 动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine;
  • 更多负载均衡算法支持。如会话保持,一致性hash等;
  • 输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便;
  • 动态脚本语言Lua支持。扩展功能非常高效简单;
  • 支持管道(pipe)和syslog(本地和远端)形式的日志以及日志抽样;
  • 组合多个CSS、JavaScript文件的访问请求变成一个请求;
  • 可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线;
  • 自动根据CPU数目设置进程个数和绑定CPU亲缘性;
  • 监控系统的负载和资源占用从而对系统进行保护;
  • 显示对运维人员更友好的出错信息,便于定位出错机器;
  • 更强大的防攻击(访问速度限制)模块;
  • 更方便的命令行参数,如列出编译的模块列表、支持的指令等;
  • 可以根据访问文件类型设置过期时间;

https://github.com/alibaba/tengine

 

6.SeaJS 模块加载框架

Sea.JS 是一个遵循 CommonJS 规范的模块加载框架,可用来轻松愉悦地加载任意 JavaScript 模块。SeaJS 支持的标准模块遵循 Modules/Wrappings 规范的 define 形式,可运行于 Web 浏览器以及 node.JS 等环境中。

https://github.com/seajs/seajs

 

7.阿里巴巴分布式数据库同步系统 otter

otter 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。

https://github.com/alibaba/otter

 

8.Taobao Open API 客户端 TOP (有Net版)

TOP 是 Taobao Open API 客户端。

APIs

  • User
    • taobao.user.buyer.get 查询买家信息API
    • taobao.user.get 获取单个用户信息
    • taobao.user.seller.get 查询卖家用户信息
    • taobao.users.get 获取多个用户信息
  • Category (Working)
    • taobao.itemcats.authorize.get 查询商家被授权品牌列表和类目列表
    • taobao.itemcats.get 获取后台供卖家发布商品的标准商品类目
    • taobao.itemcats.increment.get 增量获取后台类目数据
    • taobao.itemprops.get 获取标准商品类目属性
    • taobao.itempropvalues.get 获取标准类目属性值
    • taobao.topats.itemcats.get 全量获取后台类目数据
  • Shop
    • taobao.shop.get (白名单用户才能调用)

9.模拟数据生成器 Mock.js

Mock.js 是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试。提供了以下模拟功能:

  • 根据数据模板生成模拟数据
  • 模拟 Ajax 请求,生成并返回模拟数据
  • 基于 HTML 模板生成模拟数据

https://github.com/nuysoft/Mock

 

10.服务框架 Dubbo

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。

主要核心部件:

  • Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.
  • RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
  • Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

https://github.com/alibaba/dubbo

 

11.接口文档管理工具 RAP

 

RAP通过GUI工具帮助WEB工程师更高效的管理接口文档,同时通过分析接口结构自动生成Mock数据、校验真实接口的正确性,使接口文档成为开发流程中的强依赖。有了结构化的API数据,RAP可以做的更多,而我们可以避免更多重复劳动。

 

https://github.com/thx/RAP

 

Nginx7天入门:https://github.com/taobao/nginx-book
—————————————————————————————————————-

其他项目:
1.去哪儿:

MySQL自动化运维工具 Inception

MySQL语句的审核,在业界都已经基本被认同了,实际上也是对MySQL语句写法的统一化,标准化,而之前的人工审核,针对标准这个问题其实是很 吃力的,标准越多,DBA越累,开发也越累。 那么在这个都追求自动化运维的时代,审核也必须要跟上步伐,因此Inception诞生了。而Inception可以做的工作远不止是一个自动化审核工 具,同时还具备执行,生成对影响数据的回滚语句(类似闪回的功能),这样一条龙服务的工具,将会给DBA的工作带来翻天覆地的变化,DBA从此就从繁重的 审核、登上去执行,出错了很难回滚(如果提前没有备份的话)的被动局面解放了出来,突然发现,做DBA原来可以这么轻松,工作可以不饱和了,那就有更多的 自由时间学习、进一步向自动化运维平台的实现等更智能化的方向去发展,是具有里程碑意义的。

https://github.com/mysql-inception/inception

2.大众点评

实时应用监控平台 CAT

CAT 由大众点评开发的,基于 Java 的实时应用监控平台,包括实时应用监控,业务监控。

CAT 支持的监控消息类型包括:

  • Transaction 适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数。
  • Event 用来记录一件事发生的次数,比如记录系统异常,它和transaction相比缺少了时间的统计,开销比transaction要小。
  • Heartbeat 表示程序内定期产生的统计信息, 如CPU%, MEM%, 连接池状态, 系统负载等。
  • Metric 用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟。
  • Trace 用于记录基本的trace信息,类似于log4j的info信息,这些信息仅用于查看一些相关信息

消息树

CAT监控系统将每次URL、Service的请求内部执行情况都封装为一个完整的消息树、消息树可能包括Transaction、Event、Heartbeat、Metric和Trace信息。

https://github.com/dianping/cat

 

3.搜狐:

Redis云管理平台 CacheCloud

CacheCloud提供一个Redis云管理平台:实现多种类型(Redis StandaloneRedis SentinelRedis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运维功能、减少开发人员的运维成本和误操作,提高机器的利用率,提供灵活的伸缩性,提供方便的接入客户端。

https://github.com/sohutv/cachecloud

基于 MySQL 的数据库中间件 SOHU-DBProxy

SOHU-DBProxy 是由 搜狐 数据库团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.3版本的基础上, 修改了大量bug,添加了很多功能特性。现在已经在sohu的多个业务线上使用

DBProxy 主要功能:

1 即使在同一个连接(只要不在同一个事务中)也能连接复用

2 负载均衡提高读性能,支持动态扩展

3 动态添加的SQL审核和过滤。能够统计的SQL长时间运行影响性能,并且阻止其运行

4 用户连接限制

5 自动摘除宕机的DB

6 读写分离(当前版本没有,代码和测试已经完成,没有合并到当前版本)

https://github.com/SOHUDBA/SOHU-DBProxy

58https://github.com/58code

大众点评https://github.com/dianping

豌豆荚https://github.com/wandoulabs

华为https://github.com/HuaweiBigData

from:http://www.cnblogs.com/dunitian/p/5581520.html

编程语言的形式化

语言的形式定义

http://zh.wikipedia.org/wiki/%E5%BD%A2%E5%BC%8F%E8%AF%AD%E8%A8%80

字母表 Σ 为任意有限集合,ε 表示空串, 记 为{ε},全体长度为 n 的字串为, 为, 语言 L 定义为的任意子集。

注记: 的空子集 ∅ 与 {ε} 是两个不同的语言。

语言间的运算

语言间的运算就是 Σ*幂集上的运算。

  • 字符串集合的等运算。
  • 连接运算:L1L2 = { xy | x 属于L1并且 y 属于L2 }。
  • 幂运算:Ln = L … L (共 n 个 L 连接在一起),L0 = {ε}。
  • 闭包运算:L* = L0∪L1∪…∪Ln∪…。
  • 右商运算:L1/L2 = {x | 存在 y 属于L2使得 xy 属于L1}。
  • S ⊆ Σ* 是一个语言,S 的补语言定义为集合 {ω | ω ∈ Σ* 且 ω ∉ S}

 

语言的表示方法

一个形式语言可以通过多种方法来限定自身,比如:

数学逻辑计算机科学中,形式语言英语:Formal language)是用精确的数学或机器可处理的公式定义的语言。

文法的分类

http://zh.wikipedia.org/wiki/%E5%BD%A2%E5%BC%8F%E6%96%87%E6%B3%95#.E4.BE.8B.E5.AD.90

某些类型的文法及其产生的语言得到了细致的研究并被单独命名。最常见的文法的分类系统是诺姆·乔姆斯基于1956年发展的乔姆斯基谱系,这个分类谱系把所有的文法分成四种类型:无限制文法上下文相关文法上下文无关文法正规文法。四类文法对应的语言类分别是递归可枚举语言上下文相关语言上下文无关语言正规语言。这四种文法类型依次拥有越来越严格的产生式规则,同时文法所能表达的语言也越来越少。尽管表达能力比无限制文法和上下文相关文法要弱,但由于能高效率的实现,四类文法中最重要的是上下文无关文法和正规文法。例如对上下文无关语言存在算法可以生成高效率的LL分析器LR分析器

 

乔姆斯基体系是刻画形式文法表达能力的一个分类谱系,是由诺姆·乔姆斯基于1956年提出的。它包括四个层次:

  • 0-型文法(无限制文法或短语结构文法)包括所有的文法。该类型的文法能够产生所有可被图灵机识别的语言。可被图灵机识别的语言是指能够使图灵机停机的字串,这类语言又被称为递归可枚举语言。注意递归可枚举语言与递归语言的区别,后者是前者的一个真子集,是能够被一个总停机的图灵机判定的语言。
  • 1-型文法(上下文相关文法)生成上下文相关语言。这种文法的产生式规则取如 αAβ -> αγβ 一样的形式。这里的A 是非终结符号,而 α, β 和 γ 是包含非终结符号与终结符号的字串;α, β 可以是空串,但 γ 必须不能是空串;这种文法也可以包含规则 S->ε ,但此时文法的任何产生式规则都不能在右侧包含 S 。这种文法规定的语言可以被线性有界非确定图灵机接受。
  • 2-型文法生成上下文无关语言。这种文法的产生式规则取如 A -> γ 一样的形式。这里的A 是非终结符号,γ 是包含非终结符号与终结符号的字串。这种文法规定的语言可以被非确定下推自动机接受。上下文无关语言为大多数程序设计语言的语法提供了理论基础。
  • 3-型文法(正规文法)生成正规语言。这种文法要求产生式的左侧只能包含一个非终结符号,产生式的右侧只能是空串、一个终结符号或者一个非终结符号后随一个终结符号;如果所有产生式的右侧都不含初始符号 S ,规则 S -> ε 也允许出现。这种文法规定的语言可以被有限状态自动机接受,也可以通过正则表达式来获得。正规语言通常用来定义检索模式或者程序设计语言中的词法结构。

正规语言类包含于上下文无关语言类,上下文无关语言类包含于上下文相关语言类,上下文相关语言类包含于递归可枚举语言类。这里的包含都是集合的真包含关系,也就是说:存在递归可枚举语言不属于上下文相关语言类,存在上下文相关语言不属于上下文无关语言类,存在上下文无关语言不属于正规语言类。

下表总结了上述四种类型的文法的主要特点:

文法 语言 自动机 产生式规则
0-型 递归可枚举语言 图灵机 无限制
1-型 上下文相关语言 线性有界非确定图灵机 αAβ -> αγβ
2-型 上下文无关语言 非确定下推自动机 A -> γ
3-型 正规语言 有限状态自动机 A -> aBA -> a

自动机自动机器英语:Automaton,复数:Automata)是种能够自己运作的机器机器人

图灵机英语:Turing machine),又称确定型图灵机,是英国数学家阿兰·图灵于1936年提出的一种抽象计算模型,其更抽象的意义为一种数学逻辑机,可以看作等价于任何有限逻辑数学过程的终极强大逻辑机器。

其它等价的计算模型ü

除了图灵机以外,人们还发明了很多其它的计算模型。包括:

 

巴科斯范式英语:Backus Normal Form,缩写为 BNF),又称为巴科斯-诺尔范式英语:Backus-Naur Form,也译为巴科斯-瑙尔范式巴克斯-诺尔范式),是一种用于表示上下文无关文法的语言,上下文无关文法描述了一类形式语言。它是由约翰·巴科斯(John Backus)和彼得·诺尔(Peter Naur)首先引入的用来描述计算机语言语法的符号集。

尽管巴科斯范式也能表示一部分自然语言语法,它还是更广泛地使用于程序设计语言指令集通信协议的语法表示中。大多数程序设计语言或者形式语义方面的教科书都采用巴科斯范式。在各种文献中还存在巴科斯范式的一些变体,如扩展巴科斯范式 EBNF 或扩充巴科斯范式 ABNF。

 

关于语言(整理)

1、编程语言的发展趋势及未来方向

2、写门语言,其实不难

3、王垠博客 http://www.yinwang.org/

谈语法

4、形式化运算系统

5、如何设计一门语言(一)——什么是坑(a)

形式化运算系统展开了研究。
他们不是为了发明计算机(电脑),而是如何让机器思考。
这些天才的数学家们想通过所谓的“形式系统”,来证明一个命题: 可以用简单的数学法则表达现实系统。
这四位天才就是阿兰•图灵、冯•诺依曼、库尔特•哥德尔、阿隆左•丘奇

6、自然语言:http://zh.wikipedia.org/wiki/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80

人工语言: http://zh.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E8%AA%9E%E8%A8%80

逻辑语:

萨丕尔-沃夫假说

形式语言 Formal language

形式文法 Formal grammar

上下文无关文法 Context-free_grammar

自动机

编程语言:

乔姆斯基谱系:

7、计算机语言专家http://zhangjianzhong.blog.kepu.cn/20140801101108.html

8、90分钟实现一门编程语言——极简解释器教程  http://www.cnblogs.com/figure9/p/3620079.html

9、Language Books/Tutorials for popular languageshttp://stackoverflow.com/questions/22873/language-books-tutorials-for-popular-languages
10、怎样设计一套程序设计语言? http://www.zhihu.com/question/19756886

Book:

Types And Programming Language,Principles of Program Analysis,Semantics with Application,Software Foundation。

《编程语言:设计与实现》Programming Languages: Application and Interpretation

Video:

Coursera -Programming Language

http://www.cs.cmu.edu/~rwh/courses/typesys/ CS243 – Program Analysis and Optimizations

编程语言漫谈

写在前边:我们知道现有语言的编程范式有:过程式,面向对象,函数式,逻辑式。随着软件工业化程度的普及,以及软件的复杂度越来越高,编程语言的发展历程 也是从最初的过程式(命令式)语言c,发展到以java语言为代表的面向对象编程语言。而逻辑编程语言(以prolog为代表)和函数式语言(lisp系 列)还多用在学术和人工智能领域中。近几年,随着多核,云计算时代的到来。函数式编程语言逐渐浮出水面,最经典的语言以scheme,common- lisp,ml,clojure,go为代表.而且最近的jdk8也逐步加入了functional,closure,lambda等语法,而且 scala的作者也越来越推崇编码者以函数式语言的思维来coding。可见编程语言的发展也是满足时代的变化不断变化着。从其中的发展历程中我们可以看 到:技术的发展都是在围绕着解决“软件的复杂度”这个基本的需求而发展的。

一、 编程语言概述

编程语言是计算机的符号,是人和计算机交流的语言。我们学习一门新的编程语言时,应该观察这门语言的那些特性呢?《SICP》一书的作者列举了一下三点:
* primitive elements. (基本元素)
* means of combination. (组合手段)
* means of abstraction. (抽象手段)
以上3个特性,基本上涵盖了所有编程语言的特性,并且也是一个语言设计者从开始就要考虑的。我对这三点的理解:primitive elements表示语言的基本符号(基本数据类型,关键字等)也就是词法部分。means of combination利用基本元素通过组合的过程构建大型程序的手段,不同的语言提供的组合手段是不同的。means of abstraction表示抽象,抽象是解决软件复杂度的重要手段,让软件的可读性,可扩展,可重复利用等得到提升。下边会从组合元素和抽象手段来对比语言特性。

二、 组合手段

汇编语言:算是最简单的词法和语法形式了,被称作低级语言。汇编器通过直译的过程将汇编代码翻译为native code(cpu指令集)。 提供的primitive elements有:数字,字符,-,+,*,/ , case,if, break, go,指令等基本元素;通过这些元素组合成计算机执行序列符号。
c语言相比汇编语言更高级,让程序员脱离和cpu,寄存器,内存直接打交道的工作,提供了更多的组合手段:比如数组,结构体等数据结构。
java语言自称是面向对象语言,所以比c语言更进一步,通过强大的类型系统手段来组合属性和方法。
go语言和ML语言非常相仿,“接口”,”高阶函数“,”闭包“,”duck type”,”返回多值”,并提供goroutine等来组合。
prolog语言完全是模式匹配的逻辑语言。他的思想基于:世间所有的定理都给予一个最简单的定理推理而来,就像数学的基础是“1+1=2”,然后才能推导出“万有引力”,“相对论”等定律。
lisp方言以s-expression(著名的S表达式)来组合数据和函数。在lisp中不区分数据和函数,一切皆为数据。
题外话:lisp方言是和图灵机的思想一脉相承的,编码的时候完全感受不到计算机体系结构。而其他语言更多的是冯·洛伊曼的计算,存储思想而设计,要么是“堆栈”结构,要么是“寄存器”结构;

三、 抽象手段

从c语言开始,以函数为单元提供了对程序的抽象。这样大大的提高了程序的可复用,模块化等。让团队合作编码也成为可能。
面向对象编程:基本上隐藏了计算机的细节,开发者通过对象来抽象具体业务。但严格意义上来说java也属于imperative-lang的范畴而且都是传值调用。相比来说,python,ruby更面向对象一些,python融合了面向对象和函数式编程范式,更接近自然语言些。
以lisp为代表的函数式语言:以函数为基本和唯一的抽象;common-lisp也基于宏开发了一套object-oriented的编程方式。我比较倾向于函数式编程理念:函数的无副作用(不用考虑线程安全,特别是对于变态的Haskell),高阶函数,闭包,lambda等。

四、 类型系统

大家平时经常会说:javascript是一个弱类型的语言,java语言是强类型的语言。将编程语言从类型系统的角度区分语言也很有趣。一般来说弱类型语言更偏向自然语言一些,语法也很自由活泼些。而现今语言的走势也趋向与弱类型方向.
计算机是结构化很强的,堆栈上一个二进制位的错误就会导致溢出,bus等错误。所以语言层面的自由得益于编译器或者解释器的功劳。比如java,c等语言有很强的编译时类型检测机制,强类型的好处驱使编码人员写出很少有语法,语义错误的代码,对IDE的支持也便捷,是大型技术团队的合作基石。
弱类型语言让我们获取了自由(不需要类型信息),让程序员少敲了许多键盘。自由是有代价的,编译器或解释器中内含类型推理(infer type); (类型推理是利用归一方法,基于上下文中的变量显式类型,操作符,返回值等信息,利用栈和逐渐替换的过程来推到出类型。) 弱类型虽然可以轻松编译通过(或者不需要编译而是解释执行),但也是有类型检查过程的,只是将此过程延迟到运行时了。所以弱类型语言结构化不强,编码时很难确保类型无误,IDE支持较难。但是通过一些分析器可以不断的检测语法,语义错误,相当于达到了强类型语言的IDE效果。近几年语言的方向朝着逐渐脱离计算机体系结构,向自然语言方向在演进,程序员像艺术家一样用代码自由描绘。

五、编译/解释

java语言是解释型还是编译型的呢? 这个很难说,从java source code -> class byte code 的过程式javac编译器的过程。但是byte code 在jvm上执行的过程可能是解释执行也可能是编译执行的。解释型和编译型的内部都遵从编译原理的过程:词法分析-> 语法分析->语义解析 -> 编译器后端-> native code的过程。 但有各自的优点:
解释器:加载code速度快;解释器需要维护运行时上下文等信息。所以加载必要的代码,片段解释执行。但是对于相同的代码都经过编译过程就很多余,造成时间浪费。
编译器:执行速度快。而且编译器后端也更容易优化中间代码,因为优化过程式一个结构化过程:往往需要遍历整个中间代码,整体优化代码,提高运行效率。
runtime:一般来说解释型语言需要在内存维护运行时上下文信息,服务于运行过程中变量的查找,绑定,scope等。 而编译语言基于寄存器堆栈模型执行代码,基本上数据绑定都在栈结构中完成,运行速度稍微快一些;
hotspot-jvm结合了解释和编译的各自优点;最先解释执行过程,如果方法被频繁执行,而且达到热点(hotspot),jvm会启动编译过程,将次代码编译为native-code,然后缓存起来,下一次的调用直接执行即可。hotspot-jvm执行基于堆栈指令bytecode, 这一点也是基于跨平台的考虑而牺牲了寄存器指令; (而基于android操作系统上的dalvik虚拟机是基于寄存器指令的);
所以说,语言的设计往往是一个权衡过程;获取的“自由”越多,”牺牲“也更大。

六、 总结:

最初从图灵为了解决莱布尼茨提出的:是否存在一个通用模型来解决一切计算任务这个命题,发明了图灵机理论。到冯洛伊曼仿真人脑神经元思考过程产生第一台基 于存储器,运算器的计算机ENIAC,至今,计算机硬件技术并没有实质性的变化,只是随着摩尔定律的破灭,人们发展了多级高速缓存,多核,多cpu技术来 支撑越来越大的计算任务。 在这个过程中,随着人们对逻辑学,符号学,算法的不断研究,用来和计算机交互的语言也越来越抽象和丰富。我们通过这个形象的符号来抽象时间和空间,通过这 个形象的符号来解决软件的复杂性问题,通过这个符号来和计算机传达我们的思想。

from:http://tech.youzan.com/programming-language/

英语之于汉语

You say that you love rain,

but you open your umbrella when it rains…

You say that you love the sun,

but you find a shadow spot when the sun shines…

You say that you love the wind,

But you close your windows when wind blows…

This is why I am afraid;

You say that you love me too…

普通版:

你说你喜欢雨,但是下雨的时候你却撑开了伞;

你说你喜欢阳光,但当阳光播撒的时候,你却躲在阴凉之地;

你说你喜欢风,但清风扑面的时候,你却关上了窗户。

我害怕你对我也是如此之爱。

文艺版:

你说烟雨微芒,兰亭远望;

后来轻揽婆娑,深遮霓裳。

你说春光烂漫,绿袖红香;

后来内掩西楼,静立卿旁。

你说软风轻拂,醉卧思量;

后来紧掩门窗,漫帐成殇。

你说情丝柔肠,如何相忘;

我却眼波微转,兀自成霜。

诗经版:

子言慕雨,启伞避之。

子言好阳,寻荫拒之。

子言喜风,阖户离之。

子言偕老,吾所畏之。

离骚版:

君乐雨兮启伞枝,

君乐昼兮林蔽日,

君乐风兮栏帐起,

君乐吾兮吾心噬。

五言诗版:

恋雨偏打伞,爱阳却遮凉。

风来掩窗扉,叶公惊龙王。

片言只语短,相思缱倦长。

郎君说爱我,不敢细思量。

七言绝句版:

恋雨却怕绣衣湿,喜日偏向树下倚。

欲风总把绮窗关,叫奴如何心付伊。

七律压轴版:

江南三月雨微茫,罗伞叠烟湿幽香。

夏日微醺正可人,却傍佳木趁荫凉。

霜风清和更初霁,轻蹙蛾眉锁朱窗。

怜卿一片相思意,犹恐流年拆鸳鸯。

不知道这世界上是否还有第二种语言能像汉语这样,产生出如此极具美感的文字来。当我们不假思索地跟随者众人疯狂地学习英语、韩语、日语…的时候,是否能偶尔停下脚步,回过头来欣赏一下我们自己的文化呢?是否能偶尔静下心来品味一下汉语带给我们的不一样的感动?

一个陌生男人走到一个8岁女孩的身边,他说:”你妈妈有事让我来接你〞,女孩说〝好啊,密码是什么?〞男人愕然,只好灰溜溜的走了。原来,女孩的妈妈会跟她约定一个密码,当妈妈有事不能来接她时,就会让那个来接她的人说出密码,女孩才可以跟他走,聪明的方法,值得推广。各位当爹当妈的好好学学~~让孩子更安全,坏人更无机可乘,还在单身的朋友现在学起来以后用或者是告诉你身边正在当爸妈的朋友们!!他们会感激你的。 –