通常开源协定与GCC编译器浅析

GNU前端

发起时间 1983年9月27日shell

GNU是一个自由操做系统,其内容软件彻底以GPL协定发布。编程

1989年,发表GNU通用公共许可协议。GNU项目中的其余部分,如编辑器、编译器、shell等都已经完成,独缺操做系统核心。1990年,自由软件基金会开始正式发展Hurd,做为GNU项目中的操做系统。后端




GCC——GNU Compiler Collection服务器


初版:1987.05.23 发行多线程

最新版本:2016.04.27 6.1.0编辑器

类型:多语言编译器ide

开发语言:C++工具

许可协议:CPL&&LGPL性能

 

Centos6.8gcc version 4.4.7 20120313

Centos7.2gcc version 4.8.5 20150623

GNU编译器套装

以GPL及LGPL许可证所发行的自由软件,也是GNU项目的关键部分,也是GNU工具链的主要组成部分之一。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。1985年由理查德·马修·斯托曼开始发展,如今由自由软件基金FSF会负责维护工做。


原名为GNU C语言编译器(GNU C Compiler),由于它本来只能处理C语言。GCC很快地扩展,变得可处理C++。以后也变得可处理Fortran、Pascal、Objective-C、Java、Ada,以及Go与其余语言。

许多操做系统,包括许多类Unix系统,如Linux及BSD家族都采用GCC做为标准编译器。苹果电脑Mac OS X操做系统也采用这个编译器。

GCC本来用C开发,后来由于LLVM(C++编写)、Clang(是LLVM编译器工具集的前端front-end,做者是克里斯·拉特纳)的崛起,它更快地将开发语言转换为C++。许多C的爱好者在对C++只知其一;不知其二的状况下主观认定C++的性能必定会输给C,可是Taylor给出了不一样的意见,并代表C++不但性能不输给C,并且能设计出更好,更容易维护的程序.


内嵌OpenMP支持:OpenMP是一种跨语言的对称多处理机多线程并行程序的编程工具,从gcc4.2开始,OpenMP成为其内嵌支持的并行编程规范



Clang


初版:2007 July 11

最新版本:2016年7月11日 V3.8.1 

类型:编译器——GCC前段

开发语言:C++

许可协议:源代码受权是使用类BSD的伊利诺伊大学厄巴纳-香槟分校开放源码许可

Clang项目包括Clang前端和Clang静态分析器等

项目在2005年由苹果电脑发起,是LLVM编译器工具集的前端(front-end),目的是输出代码对应的抽象语法树(Abstract Syntax Tree, AST),并将代码编译成LLVM Bitcode。接着在后端(back-end)使用LLVM编译成平台相关的机器语言 

测试证实Clang编译Objective-C代码时速度为GCC的3倍,还能针对用户发生的编译错误准确地给出建议



LLVM——Low Level Virtual Machine


最新版3.8.12016年7月11日

类型:编译器——GCC中段

开发语言:C++

许可协议:伊利诺伊大学厄巴纳-香槟分校开放源码许可   

项目起源于2000年伊利诺伊大学厄巴纳-香槟分校维克拉姆·艾夫(Vikram Adve)与克里斯·拉特纳(Chris Lattner)的研究发展而成,计算机协会于2012年授与Adve、Lattner及Evan ChengACM软件系统奖



GPL&&LGPL

理查德·马修·斯托曼起草


GPL——General Public License


类型:开放源码协议

V1 1989.01

V2 1991.06

V3 2007.06.29

权力和义务

权力

以任何目的运行此程序的自由;

再发行复制件的自由;

改进此程序,并公开发布改进的自由(前提是能获得源代码)

义务

GPL不会授予许可证接受人无限的权利。再发行权的授予须要许可证接受人开放软件的源代码,及全部修改。且复制件、修改版本,都必须以GPL为许可证。



LGPL——Lesser General Public License


类型:开放源码协议

V2 1991

V2.1 1999

V3 2007



GC——garbage collector

libgc.so contains a C interface to the conservative garbage collector, primarily designed to replace the C malloc function.

libgccpp.so contains a C++ interface to the conservative garbage collector.


Introduction to GC

The GC package contains the Boehm-Demers-Weiser conservative garbage collector, which can be used as a garbage collecting replacement for the C malloc function or C++ new operator. It allows you to allocate memory basically as you normally would, without explicitly deallocating memory that is no longer useful. The collector automatically recycles memory when it determines that it can no longer be otherwise accessed. The collector is also used by a number of programming language implementations that either use C as intermediate code, want to facilitate easier interoperation with C libraries, or just prefer the simple collector interface. Alternatively, the garbage collector may be used as a leak detector for C or C++ programs, though that is not its primary goal.


This package is known to build and work properly using an LFS-7.9 platform.

This package is known to build properly using the gcc-6 compiler.



TCP状态标志位

FLAG

SYN——0x02

ACK——0x10

PSH——0x08

RST——0x04

FIN——0x01

URG——


TCP状态机

STAT

C    SYN-SENT:在发送链接请求后等待匹配的链接请求

S    SYN-RECEIVED:在收到和发送一个链接请求后等待对链接请求的确认

CS    ESTABLISHED:表明一个打开的链接,数据能够传送给用户

4 SC    FIN-WAIT-1:等待远程TCP的链接中断请求,或先前的链接中断请求的确认

5 SC    FIN-WAIT-2:从远程TCP等待链接中断请求

C    TIME-WAIT:等待足够的时间以确保远程TCP接收到链接中断请求的确认

SC    LOSE-WAIT:等待从本地用户发来的链接中断请求

C    CLOSING:等待s远程TCP对链接中断的确认

C    CLOSED:没有任何链接状态

10 S    LAST-ACK:等待原来的发向远程TCP的链接中断请求的确认

11 S    LISTEN:侦听来自远方的TCP端口的链接请求


TCP状态转换


阶段一:创建TCP链接

client主动打开SYN-SENT:flag=SYN0

SERVER-LISTEN————>SYN-RECEIVED:flag=SYN1,ACK0

client ESTABLISHED

client ESTABLISHED:flag=ACK1

SERVER ESTABLISHED



阶段二:传输TCP数据





阶段三:关闭TCP链接




客户端应用程序的状态迁移

CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED


服务器的状态迁移

CLOSED->LISTEN->SYN-REC->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED