Skip to content

Latest commit

 

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Demo

Demo 这个仓库原本是坚果用来学 Git 版本管理用的,随着演示项目的增加,觉得有需要通过分支的方式来管理各个演示 DEMO,所以原来的 demo 仓库的 master 只是作为文档来使用,而各个分支则作为演示项目来推进:

git clone https://github.com/jimboyeah/demo.git

演示项目列表:

GCC - GNU Compiler Collection

GNU 编译器套件 GNU Compiler Collection 包括 C、C++、Objective-C、Fortran、Java、Ada 和 Go 语言的前端,也包括了这些语言的库,如 libstdc++、libgcj 等等。GCC 的初衷是为GNU操作系统专门编写的一款编译器。GNU 系统是彻底的自由软件。此处,自由的含义是它尊重用户的自由。

对于后缀为 .c 的文件 gcc 把它当作是 C 程序,而 g++ 当作是 c++ 程序。后缀为 .cpp 的,两者都会认为是 C++ 程序,虽然 C++ 是 C 的超集,但是两者对语法的要求是有区别的。在编译阶段,g++ 会调用 gcc,对于 C++ 代码,两者是等价的,但是因为 gcc 命令不能自动和 C++ 程序使用的库联接,所以通常用 g++ 来完成链接,为了统一起见,干脆编译链接统统用 g++。

此外,TCC - Tiny C Compiler 是一个小巧的编译器,用来研究编译原理是不错的目标。

MinGW 就是 GCC 的 Windows 移植版。

MinGW - Minimalist GNU on Windows 是将经典的开源 C/C++ 语言编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux 平台下的开发工具。

MinGW 包含 32-bit 和 64-bit 两种,MinGW-w64 可以编译生成 64-bit 或 32-bit 可执行程序,使用 -m32 选项。 正因为如此,MinGW 32-bit 版本现已被 MinGW-w64 所取代,且 MinGW 也早已停止了更新,内置的 GCC 停滞在了 4.8.1 版本,而 MinGW-w64 内置的 GCC 则持续更新。

使用 MinGW-w64 的优势:

  • MinGW-w64 是开源软件,可以免费使用。
  • MinGW-w64 由一个活跃的开源社区在持续维护,因此不会过时。
  • MinGW-w64 支持最新的 C/C++ 语言标准。
  • MinGW-w64 使用 Windows 的 C 语言运行库,因此,可以编译出无 DLL 依赖的 Windows 程序。
  • 许多开源 IDE 集成 MinGW-w64,如 CodeBlocks,使它拥有友好的图形化界面。

MinGW-w64 是稳定可靠的、持续更新的 C/C++ 编译器,使用它可以免去很多麻烦,不用担心跟不上时代,也不用担心编译器本身有bug,可以放心的去编写程序。

GCC 有多个 Windows 移植版本,比较出名的就是 MinGW 和 TDM-GCC,最新版本 MinGW-W64 GCC-8.1.0:

MinGW Distro 是提供了一个开箱即用的打包,提供最新的 MinGW 17.1 包含以下常用部件:

Essentials Libraries Utilities Utilities
binutils 2.33.1 Boost 1.71.0 coreutils 8.31 7-Zip 19.00
GCC 9.2.0 FreeType 2.10.1 gdb 8.3.1 git 2.24.1.2
mingw-w64 7.0 glbinding 3.1.0 grep 3.3
GLFW 3.3 LAME 3.100
GLM 0.9.9.6 make 4.2.1
libjpeg-turbo 2.0.3 OptiPNG 0.7.7
libogg 1.3.4 pngcheck 2.3.0
libpng 1.6.37 sed 4.7
libvorbis 1.3.6 vorbis-tools 1.4.0
PCRE 8.43**
PCRE2 10.34**
SDL 2.0.10
SDL_mixer 2.0.4
zlib 1.2.11
zstd 1.4.4

GCC 环境变量:

变量名 功能
CPATH 搜索目录列表,也可以使用命令选项,如 -I. -I/special/include
C_INCLUDE_PATH 搜索目录列表,分隔符号由 PATH_SEPARATOR 变量指定,通常是分号或冒号
CPLUS_INCLUDE_PATH 搜索目录列表
OBJC_INCLUDE_PATH 搜索目录列表
DEPENDENCIES_OUTPUT 非系统依赖的输出,相当命令选项 -MM、-MT 和 -MF 结合
SUNPRO_DEPENDENCIES 类似 DEPENDENCIES_OUTPUT,除了系统头文件不被忽略,相当 -M 选项

GCC 命令的常用选项:

选项 解释
-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。
-c 只编译并生成目标文件。
-DMACRO 以字符串"1"定义 MACRO 宏。
-DMACRO DEFN 以字符串"DEFN"定义 MACRO 宏。
-E 只运行 C 预编译器。
-g 生成调试信息。GNU 调试器可利用该信息。
-IDIRECTORY 指定 DIRECTORY 为额外的头文件搜索路径。
-LDIRECTORY 指定 DIRECTORY 为额外的函数库搜索路径。
-lLIBRARY 连接时搜索指定的函数库LIBRARY。
-m486 针对 486 进行代码优化。
-o FILE 生成指定的输出文件。用在生成可执行文件时。
-O0 不进行优化处理。
-O 或 -O1 优化生成代码。
-O2 进一步优化。
-O3 比 -O2 更进一步优化,包括 inline 函数。
-shared 生成共享目标文件。通常用在建立共享库时。
-static 禁止使用共享连接。
-UMACRO 取消对 MACRO 宏的定义。
-w 不生成任何警告信息。
-Wall 生成所有警告信息。

目前 C 语言的标准有:C89(ANSI C)、C90、C95、C99(ISO C)、C11(C1x)。

目前 C++ 语言的标准有:C++98、C++03(对98小幅修改)、C++11(全面进化)、C++14、C++17、C++18、C++20。

目前来说 C++11 是普及标准。

高版本的 GCC 向下兼容,支持低版本的 C++ 标准:

GCC 版本 发布日期 C++ 标准
 GCC 4.3 Mar 2008 C++11 部分支持,C++14 部分支持
 GCC 4.8.1 May 2013 C++11 完全支持,C++14 部分支持
 GCC 5.3 Dec 2015 C++14 完全支持,C++17 部分支持
 GCC 6.1 Apr 2016 C++14 完全支持,C++17 部分支持
 GCC 7.1 May 2017 C++17 完全支持
 GCC 8.1 May 2018 C++2a 部分支持
 GCC 10.1 May 2020 C++20 基本支持

Microsoft Visual C++,版本对应 C++ 标准关系如下所示:

VS 版本 编译器版本 C++ 标准
Visual Studio 6 vc6 
Visual Studio 2003 vc7 
Visual Studio 2005 vc8 
Visual Studio 2008 vc9 
Visual Studio 2010 vc10 
Visual Studio 2012 vc11  C++11 基本支持
Visual Studio 2013 vc12  C++11 基本支持,C++14 部分支持
Visual Studio 2015 vc14  C++17 部分支持
Visual Studio 2017 vc15 C++14 完全支持,C++17 基本支持
Visual Studio 2019 vc16 C++14 完全支持,C++17 基本支持

造轮子 Websocket 现在就 Go

MD: 2019‎年‎12‎月17‎日,‏‎03:45:10 https://gitbook.cn/gitchat/activity/5df7ecb85d2ecb0a746047df

笔者坚果有幸从事软件开发,一直都是兴趣驱动的工作。第一次接触计算机是 1999 年后的事,我用来学习的电脑是大哥买来准备学 CAD 的 486 机,当时 CPU 还是威胜的 333MHz 主频,硬盘也只有 4GB,系统是 Windows 98 SE。那时所谓的学电脑纯属拆玩具模式,因为手上可用的资源不多,网络也不发达,也没有太丰富的参考资料,相关的图书也不是太丰富。所以翻查硬盘或系统光盘文件成了日常活动,除此之外,DOS 游戏也和红白机具有一样的可玩性。彼时,BAT 脚本和 Windows 系统光盘中 QBasic 脚本编程工具成了不错的好玩具。后来玩起了 Visual Studio 6.0,主要是 VB 和 VBA 脚本编程,C 语言也开始了解一些,C++ 几乎没有基础可言,所以 Visual C++ 一直玩不动 MFC 什么的更是不知云云。当然了,集成开发工具提供的最大的好处也就体现在这,即使你是个傻瓜也能毫不費力地运行配置好的模板程序,编译成完整的可运行程序。不知不觉,坚果从曾经的傻瓜程序员一路走到今天,没有兴趣带领还真不会有今天。

内容提要

这是我二进 GitChat 的创造,距离今年 ‎6 ‎月分‎第一次发布《从 JavaScript 入门到 Vue 组件实践》大谈前端技术全局观、30' JavaScript 入门课,还有 VSCode 和 Sublime 这些好用的开发工具。到如今已经有近半年时间,‎期间经历了较大的工作变动,技术上已经以脚本后端转到 Golang 为主,这是一种我一直期待的语言。期间也学到一些技术领域比较不容易学习到的知识,有项目管理层面的,有职业规划方面的,对知识付费时代也有了更深入的理解。

那么 Golang 作为一款以便利的并发编程的语言,用在后端的开发真的是不要太好。

Golang 虽然它已经有 10 岁大了,最早接触也是 2012 年左右,但是真正花心思学起来是今年的 7 月份。Golang 号称 21 世纪的 C 语言,这确实是对我最大的吸引力,它的特点可以总结为 C + OOP,以松散组合的方式去实现面向对象的编程思维。完全不像 C++ 把对象数据模型设计的异常复杂,把一种编程语言搞得自己发明人都不能完全掌握。当然每种语言都有它的适用领域及特点,免不了一堆人贬低 Golang 没有泛型之类,确实 Golang 1.x 就是没有提供实现。如日中天的 Python 就是个典型,作为奇慢的脚本解析型语言,慢这个缺点完全掩盖不了它中人工智能算法领域的应用,也完全阻挡不了爬虫一族赖以为生。这种取舍其实就是一种效益的体现,选择恰当的工具做适合的事!

我们将从网络协议层面来打开 Golang 编程大门,学习关于 Websocket 网络协议的相关知识点,在 TCP/IP 协议栈中,新加入的 Websocket 分量也是重量级的。WebSocket 作为实时性要求较高场合的应用协议,主要应用在在线网页聊天室、页游行业等等。掌握 Websocket 技能,你值得拥有!

在本轮学习中,你可以 Get 到技能:

  • 如何拥有快速掌握一种计算机语言的能力;
  • 入门 TCP/IP 协议森林;
  • telnet 工具的使用;
  • 理解几个基本网络概念:
    • Persistent connection 长连接;
    • Temporary connection 短连接;
    • Polling 轮询;
    • LongPolling 长轮询;
  • Websocket 核心的数据帧 Data Framing 构造;
  • Websocket 握手连接建立数据通讯过程;
  • 实现一个 go-my-websocket 简约版 Websocket 服务器;
  • 深入分解 Golang 的 Engine.io 及 Socket.io 的应用;
  • 获得一份完整的电子版 PDF;
  • 获得一份完整的 go-my-websocket 代码;
  • 通过交流活动获得问题解答机会;

从任天堂红白机时代接触单片机,尽管那时不懂却被深深吸引了;从 MS-DOS 时代结缘计算机,就这样一路披荆斩棘前行;很多人说 IT 人是吃青春饭的,对于我,一个 80 后,在乳臭未干的时候就闻到这饭香了,到现在也没觉得吃够吃厌倦了。我只当这是个兴趣,现在这个爱好还能给我带来一份收入而已。

by Jeangowhy 微信同名(jimboyeah◉gmail.com) Tue Dec 17 2019 04:23:08 GMT+0800 (深圳宝安)

gitchat

About

demos for git tool learning and others

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages