C Runtime Library 的来历

由于我看到的文章也是转载的且未提供原文链接,所以这里没有提供原文链接,深表抱歉!

msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能.

C Runtime Library 的来历, API, STL, MFC, ATL关系

  刚接触Windows开发时,为了快速入门查了不少资料,没想到看的越多,脑袋越糊涂。因为写同一种功能的程序,找到的例程风格截然不同。拿C程序来说,有些API的名称都很长,都是没见过的变量类型而且全大写;有些跟熟悉的Linux环境C开发差不多,标准短小的C函数名。再比如某些C++程序,用的标准类也会有不同。后来专门花了点功夫,才了解Windows平台下的开发有多个不同的体系:标准C,Windows API,MFC,STL。这些都是预先编写好的库,实际开发时选哪个,取决于项目的规模和性质、程序的风格,还有个人的喜好。

一、自由世界中的C\C++

1. CRT

  运行时库就是C Run-Time Library,是C而非C++语言世界的概念。取这个名字就是因为你的C程序运行时需要这些库中的函数。

  C语言是所谓的”小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C语言内核开发出来之后, Dennis Ritchie 和 Brian Kernighan 就用C本身重写了 90% 以上的 UNIX 系统函数,并且把其中最常用的部分独立出来,形成头文件和对应的 LIBRARY,C run-time library 就是这样形成的。

  随后,随着C语言的流行,各个C编译器的生产商/个体/团体都遵循老的传统,在不同平台上都有相对应的 Standard Library,但大部分实现都是与各个平台有关的。由于各个C编译器对C的支持和理解有很多分歧和微妙的差别,所以就有了ANSI C;ANSI C(主观意图上)详细的规定了 C 语言各个要素的具体含义和编译器实现要求,引进了新的函数声明方式,同时订立了 Standard Library 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数,应当称为第三方 C 运行库(Third party C run-time libraries)。

  C Run-Time Library里面含有初始化代码,还有错误处理代码(例如divide by zero处理)。你写的程序可以没有 math库,程序照样运行,只是不能处理复杂的数学运算,不过如果没有了C Run-Time Library,main()就不会被调用,exit()也不能被响应。因为C Run-Time Library包含了C程序运行的最基本和最常用的函数。

2. Standard C++ Library

  到了 C++ 世界里,有另外一个概念:Standard C++ Library,它包括了上面所说的C Run-Time Library和STL。包含C Run-Time Library的原因很明显,C++ 是 C 的超集,没有理由再重新来一个 C ++ run-time library。VC针对C++ 加入的Standard C++ Library主要包括:LIBCP.LIB, LIBCPMT.LIB和 MSVCPRT.LIB。

二、Microsoft的C\C++

1. Windows中的CRT

  CRT原先是指Microsoft开发的C Runtime Library,用于操作系统的开发及运行。后来在此基础上开发了C++ Runtime Library,所以现在CRT是指Microsoft开发的C/C++ Runtime Library。在VC的CRT/SRC目录下,可以看到CRT的源码,不仅有C的,也有C++的。

  CRT原先的目的就是支持操作系统的运行。因为Windows操作系统除汇编部分外,都是用C/C++编写的,所以内核及许多关键服务都在CRT上运行(它们都采用dll技术动态链接)。此外,用 VC编写的C/C++程序也用到它们(可以动态链接,也可以静态链接,前者运行时需要系统中已安装CRT的dll,后者不需要)。可以说,CRT就是 Microsoft编写Windows时使用的低层类库。然后,它又被当作C++标准库的一个实现包含在了VC系列中;我们在VC中使用的C++标准库,其实就是CRT的一个真子集(少了C++标准所不包含的代码,特别是大量的低层C代码)

  C++标准,是C++的通用语言规范,指导所有C ++使用者。而CRT的其中一部分可以看作是Microsoft开发的一个C++标准库实现(其实也确实如此,Microsoft在开发CRT时,参考了正在标准化过程中的C++语言规范)。它与C++标准有一定的差距,部分原因是,在C++没有完成标准化之前,CRT已经开发并投入使用了。为了向下兼容以前的Windows代码,早期的CRT与C++标准总有一定的差距。但是CRT确实在不断的改进中。VC6带的CRT与C++标准还有比较大的差距,而 VC8的几乎完全符合C++标准了。

2. Windows中的CRT与Windows API

  至于CRT与WINDOWS API的关系,与许多人理解的相反,WINDOWS API作为Windows的一部份,是在CRT的基础上开发的。你可以将Windows(及其API)看作一个项目,而这个项目使用的语言是汇编/C/C ++,使用的类库就是CRT。所以,离开CRT,Windows API也无法使用的。

  在编写操作系统时,你需要一个合适的低层库,以便完成一些基本的、多次重复的工作。于是,就有了CRT。在最低层的时候,根本连DLL这个概念都没有的,所以CRT的源代码只能做成lib,被静态链接。然后,随着Windows越做越复杂,Microsoft提出了API的概念,它提供Windows开发者一组接口,可以直接操作Windows,这就是Windows API了。当然,Windows API也是在CRT之上编写的。

  接着,Microsoft想给予C/C++程序员以足够的支持,除了原始CRT之外,还要增加在Windows平台上编程所特有的东西,如thread等等。这些东西都是和平台相关的,只能建立在Windows API上。而这些新增内容,也被放进了CRT中。此时,CRT不仅仅包含最低层平台无关的代码,还包括平台相关的部分。如你调用CRT的 _beginthread,其实内部调用了Windows API的CreateThread。加入这些东西后,CRT仍然被用作编写操作系统;但是显然,那些调用了Windows API的部分已经失去移值性了。

  然后,CRT被封装成产品,随编译器一起发布。此时CRT产品的LIB和DLL都是Windows格式的,你不能在Windows以外的平台上使用EXE或DLL吧,这就是CRT和CRT产品的区别。Windows API的产品,或是Windows的其他许多组成部分也是一些LIB/DLL文件,这些都是表面的东西,是与Windows绑定在一起的。但是,如果你认为是先有Windows或Windows API,才有CRT的,那你就本末倒置了。除非你对CRT的定义就是那些LIB/DLL产品,而不包括用来产生它们的代码。

  当然,CRT的一些组成部分也调用了Windows API。这可能就是有人认为CRT是建立的Windows API基础上的原因。但是实际上,这一部分剥离CRT没有任何的问题。只不过Microsoft将在Windows平台上可以使用的C/C++低层库都加入到CRT中。因此,CRT中很大一部分是操作系统平台无关的(原始的CRT),是开发Windows本身及其上一切的基础。它们也可以作为一个C/C+ +库在其他操作系统平台上使用。还有一部分,则是和Windows紧密绑定的,调用Windows API来实现的,可以看作扩展的CRT。之所以将这两部分放在一起,是因为它们都是开发Windows操作系统所需要的,也因为它们也都是Windows 平台上的C/C++程序员所需要的。这种复杂关系是Microsoft的人为因素造成的,不能因此认为CRT是建立在Windows或Windows API基础上的。

  综上,CRT(Microsoft’s C/C++ Runtime Library)的一个真子集(主要是C++ Runtime Library)是一个符合(或至少是企图符合)C++标准的C++库。而Windows API(以及Windows的其他许多部分)都是在CRT的基础上开发的。

  最后再说一句,C++当然不是Microsoft的专利。但是Microsoft选择了C++,并取得了成功,这是肯定的了:象CRT,象VC,象Windows,象Office,象 SQL Server等等。这一方面说明了C++的优势,一方面也是Microsoft自身的因素在起作用。然后,它当然要紧抓C++的大旗,大力宣扬它自己的C++,并排斥其他的C++。这就是帝国的”风范”了。所以对Microsoft,总是即恨且爱,总希望哪天它会良心发现——当然这只是幻想罢了。不过,肯定该肯定的,否定该否定的,总是应该的。但就产品而言,Microsoft不是最好的,但大多都是最成功的,在看到它的不足的同时,也要看到它的优点。存在的即使不是合理的,也一定有它的合理性。所以,不能简单用一两句话评价Microsoft及它的成功。惟有一点是可以肯定的,它决定选择C ++,真是太英明了!

Microsoft .NET 官方下载

NET Core 

Current The most recent stable release, with the latest features and bug fixes

LTS Long-term support (LTS) lets you stay supported on the same version of .NET Core for longer

SDK  Runtime 

.NET Core 2.1

.NET Core 2.0

.NET Core 1.1

.NET Core 1.0

 

.NET Framework 

Developer Pack  Runtime 
.NET Framework 4.7.2 Installer
Language packs

Web Installer
Offline Installer
Language packs

.NET Framework 4.7.1 Installer Web Installer
.NET Framework 4.7 Installer Web Installer
.NET Framework 4.6.2 Installer Web Installer
.NET Framework 4.6.1 Installer Web Installer
.NET Framework 4.6 Installer Web Installer
.NET Framework 4.5.2 Installer Web Installer
.NET Framework 3.5 SP1 Web Installer

 

 

Microsoft .NET 官方下载

NET Core 

Current The most recent stable release, with the latest features and bug fixes

LTS Long-term support (LTS) lets you stay supported on the same version of .NET Core for longer

SDK  Runtime 

.NET Core 2.1

.NET Core 2.0

.NET Core 1.1

.NET Core 1.0

 

.NET Framework 

Developer Pack  Runtime 
.NET Framework 4.7.2 Installer
Language packs

Web Installer
Offline Installer
Language packs

.NET Framework 4.7.1 Installer Web Installer
.NET Framework 4.7 Installer Web Installer
.NET Framework 4.6.2 Installer Web Installer
.NET Framework 4.6.1 Installer Web Installer
.NET Framework 4.6 Installer Web Installer
.NET Framework 4.5.2 Installer Web Installer
.NET Framework 3.5 SP1 Web Installer

 

 

主流编程语言/IDE介绍

Java & Eclipse
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
官方网站:https://java.com/
Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。
官方网站:https://www.eclipse.org/

C#

C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#的发音为”C sharp”,模仿音樂上的音名”C“(C调升),是C语言的升级的意思。其正确写法应和音名一样为”C“,但大多数情况下”“符号被井号”#”所混用;两者差别是:”“的笔画是上下偏斜的,而”#”的笔画是左右偏斜。C由C语言和C++派生而来,继承了其强大的性能,同时又以.NET框架类库作为基础,拥有类似Visual Basic的快速开发能力。C#由安德斯·海尔斯伯格主持开发,微软在2000年发布了这种语言。

命名

C#(实为”C“)的发音类似语英文读音”see sharp”,”“读作”sharp”(国际音标:/ʃɑ:p/),命名启发于音乐上的音名”C” (C升半音)。其正确写法应和音名一样为”C“,但大多数情况下”“符号被井号”#”所混用;两者差别是:”“的笔画是上下偏斜的,而”#”的笔画 是左右偏斜。C#看起来像是”C++”中两个加号重叠在一起,而且在音乐中”C“表示C升半音,為比C高一点的音节。微软借助这样的命名,表示C#在一 些语言特性方面对C++的提升的意思。微软希望借助这种语言来取代Java。C#已经成为Ecma国际和国际标准组织的标准规范。

设计目标

ECMA标准列出的C#设计目标:

  • C#旨在设计成为一种「简单、现代、通用」,以及面向对象的程序设计语言
  • 此种语言的实现,应提供对于以下软件工程要素的支持:强类型檢查、数组维度检查、未初始化的变量引用检测、自动垃圾收集(Garbage Collection,指一种記憶體自動释放技术)。软件必须做到強大、持久,并具有较强生产力。
  • 此种语言为在环境中的开发提供适用的组件开发应用。
  • 为使程序员容易迁移到这种语言,源代码的可移植性十分重要,尤其是对于那些已熟悉C和C++的程序员而言。
  • 对国际化的支持非常重要。
  • C#适合为独立和嵌入式的系统编写程序,从使用复杂操作系统的大型系统到特定应用的小型系统均适用。
  • 虽然C#程序在存储和操作能力需求方面具备经济性,但此种语言在某些情況下并不能在性能和程式大小方面与C语言相抗衡。

Visual Basic .NET

Visual Basic .NET(VB.NET)是.NET Framework框架下的一种多重编程范式高级语言。

VB.NET,是微软公司于2002年作为原有的Visual Basic的 继承者而推出。虽然自2005年起,语言名称中的”.NET”就已经被去掉了。但为了与VB 6.0及以前版本的Visual Basic进行区分,”Visual Basic .NET”的名字仍然被社会公众用来指代VB 7.0及以后的Visual Basic。VB.NET与C#同为.Net Framework框架下两种主要的程序设计语言,都是为了调用.Net Framework的类库资源,因此两种语言具有很高的对应性,数据类型、控制结构与语言特性都存在一一对应,容易把源代码从一种语言对译为另一种语言。

微软公司的集成开发环境Visual Studio是最为广泛使用的VB.NET开发工具。然而Visual Studio的大部分版本都是价格不菲的商业软件,除了Express版本和Visual Studio Community(以上两者皆为免费软件)。除了Visual Studio,SharpDevelop和Mono也是可用的VB.NET开发环境。

官方网站:https://visualstudio.microsoft.com/

Kotlin
Kotlin语言正式成为安卓开发的一级编程语言。Kotlin由JetBrains公司开发,于2010年首次推出,次年开源。它与Java 100%互通,并具备诸多Java尚不支持的新特性,下一版的Android Studio(3.0)将提供支持。
官方网站:https://kotlinlang.org/

Python
Python是一种面向对象、直译式计算机程序设计语言(脚本语言),由Guido van Rossum于1989年底发明, 第一个公开发行版发行于1991年。Python语法简捷而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,速度要求非常高,就可以用C++重写。
官方网站:https://www.python.org/

Ruby
Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada 以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java 平台)、IronRuby(.NET 平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。因为Perl发音与6月诞生石pearl(珍珠)相同,因此Ruby以7月诞生石ruby(红宝石)命名。
官方网站:https://www.ruby-lang.org/

Perl
Perl 最初的设计者为拉里·沃尔(Larry Wall),他于1987年12月18日发表。Perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。简而言之,Perl象C一样强大,象awk、sed等脚本描述语言一样方便。Perl 一般被称为”实用报表提取语言”(Practical Extraction and Report Language),你也可能看到”perl”,所有的字母都是小写的。一般,”Perl”,有大写的 P,是指语言本身,而”perl”,小写的 p,是指程序运行的解释器。
官方网站:https://www.perl.org/

PHP
PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。 PHP安装它可以比 CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。最重要的是PHP可以用C、C++进行程序的扩展!
官方网站:https://www.php.net/

MySQL
MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL”结构化查询语言”。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证)。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
官方网站:https://www.mysql.com/

MariaDB
MariaDB是一个采用Maria存储引擎的MySQL分支版本,是由原来MySQL的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。
官方网站:https://mariadb.com/https://mariadb.org/

Free Pascal
Free Pascal是个由国际组织开发的完全的win32的pascal语言编译器,类似delphi,可编写windows程序。此前被广泛使用的PASCAL编译器普遍为Turbo Pascal& Borland pascal。但是它们可用的空间十分有限。而Free Pascal理论上可以使用4GB内存。所以在利用Free Pascal编程的时候,可以改变原有思路,将大量时间转嫁给空间,提高效率。
官方网站:http://www.freepascal.org/

易语言
易语言是一门计算机程序语言。以”易”著称,以中文作为程序代码表达的语言形式。易语言的创始人是吴涛。早期版本的名字为E语言。易语言最早的版本的发布可追溯至2000年9月11日。可以说,创造易语言的初衷是进行用中文来编写程序的实践。从2000年至今,易语言已经发展到一定的规模:功能上、用户数量上都十分可观。
官方网站:http://www.dywt.com.cn/

Microsoft Visual Studio
Microsoft Visual Studio是微软公司推出的开发环境,Visual Studio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。Visual Studio组件有Visual Basic .NET、Visual Basic .NET、Visual C++ .NET、Visual C++ .NET、Visual C# .NET、Visual F# .NET。
官方网站:https://www.visualstudio.com/zh-hans/downloads/
另附华军软件园提供的Microsoft Visual Basic 6.0 精简版
下载地址:http://www.onlinedown.net/soft/19976.htm

Apple Xcode
苹果提供的免费开发工具,For Mac OS X application development, Xcode is a free download and includes the Xcode IDE, Dashcode, Instruments, Interface Builder, and the rest of the developer tools.
官方网站:https://developer.apple.com/xcode/

Xojo(原名REALbasic/REAL Studio)
使用Xojo创建原生且跨平台的桌面、网络和iOS程序。
创建任何东西
含有对图形、数据库服务、互联网协议和更多功能的支持,您基本可以使用Xojo快速编写您能想到的任何东西。有了Xojo,您可以创建商用软件产品,也可以编写内部使用的实用工具以帮您轻松批量处理各种事务,或者也可以通过它来学习编程。其实,Xojo开发环境本身就是用Xojo开发的!
快速构建应用程序
您可以只用一份代码来支持多个平台,有超过40个可用的内置用户界面控件,使您的程序的外观和行为在任何平台上都如您所愿。您还可以使用功能强大的语言来创建您的网络程序,以替代HTML、CSS、PHP、JavaScript和AJAX等您可能不熟悉的工具,节约大量开发时间!
现代化的开发环境
Xojo是一个现代的面向对象的语言。它支持继承、类接口、多态并且是强类型的。提供有数千个操作系统API调用的封装,Xojo对这些细节进行了抽象,提供了统一的方法和接口,从而大量减少了多平台开发的时间,使您能专注于您的程序的核心功能和与众不同之处。
本机与多平台
Xojo程序需要解释器或虚拟机,它们会被完全编译为本机代码,因此能更快速的执行同时保护您的知识产权。Xojo使用各个操作系统提供的原生控件,这样您的程序在各个平台上都能有正确的外观和行为。开发的也是跨平台。在您最常用最喜欢用的操作系统上开发然后为多个主流平台编译程序。
官方网站:http://www.xojo.com/

Node.js
Node.js是一个基于Chrome’s JavaScript runtime建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js使用事件驱动,非阻塞I/O模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。实际上Node是一个服务器端JavaScript解释器,它对Google V8 JavaScript引擎进行了封装。V8引擎执行Javascript的速度非常快,性能非常好。而且Node对其封装的同时还改进了其处理二进制数据的能力。Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。
官方网站:https://nodejs.org/

另附:《TIOBE编程语言排行榜》