smw*_*dia 347 terminology
我听说过"C Runtime","Visual C++ 2008 Runtime",".NET公共语言运行时"等等.
在Linux上编写汇编语言时,我可以使用INT指令进行系统调用.那么,运行时只是一堆预制函数将低级函数包装成更抽象的高级函数吗?但这不是更像是库的定义,而不是运行时的定义吗?
"运行时"和" 运行时库 "有两个不同的东西吗?
这些天,我想也许Runtime与所谓的虚拟机有一些共同点,比如JVM.这是导致这种想法的引文:
这个编译过程非常复杂,可以分解为几个抽象层,这些过程通常涉及三个转换器:编译器,虚拟机实现和汇编器.--- 计算系统的要素(介绍,道路到硬件土地)
该书C专家编程:深度C的秘密.第6章运行时数据结构是对此问题的有用参考.
e.J*_*mes 225
运行时描述在程序运行时执行的软件/指令,尤其是那些未明确写入但是正确执行代码所必需的指令.
像C这样的低级语言具有非常小的(如果有的话)运行时.更复杂的语言,如Objective-C,允许动态消息传递,具有更广泛的运行时.
你是正确的,运行时代码是库代码,但库代码是一个更通用的术语,描述任何库生成的代码.运行时代码特别是实现语言本身功能所需的代码.
Mat*_*all 73
在计算机编程中,运行时库是编译器使用的特殊程序库,用于在计算机程序的运行时(执行)期间实现构建到编程语言中的函数.这通常包括输入和输出功能,或用于内存管理.
运行时系统(也称为运行时系统或仅运行时)是设计用于支持以某种计算机语言编写的计算机程序的执行的软件.运行时系统包含基本低级命令的实现,还可以实现更高级别的命令,并且可以支持类型检查,调试,甚至代码生成和优化.程序员可以通过应用程序编程接口访问运行时系统的某些服务,但是其他服务(例如任务调度和资源管理)可能是不可访问的.
Re:你的编辑,"运行时"和"运行时库"是同一件事的两个不同的名字.
Chr*_*oph 52
在运行时或执行环境是一个语言实现,其执行码和存在于的部分运行时 ; 实现的编译时部分称为C标准中的转换环境.
例子:
Java运行时由虚拟机和标准库组成
公共C运行时由加载器(它是操作系统的一部分)和运行时库组成,它运行C语言的部分,这些部分没有被编译器内置到可执行文件中; 在托管环境中,这包括标准库的大部分内容
Mic*_*bus 30
在我的理解中,运行时正是它的意思 - 程序运行的时间.您可以说在运行时/运行时或编译时发生了某些事情.
我认为运行时和运行时库应该(如果不是)两个单独的东西."C运行时"对我来说似乎不对.我称之为"C运行时库".
您的其他问题的答案:我认为术语运行时可以扩展为包括环境和程序运行时的上下文,因此:
这个答案在某种程度上只是我的意见,而不是事实或定义.
ult*_*use 27
Matt Ball正确回答.我会举例说明.
考虑运行Turbo-Borland C/C++(1991年版本3.1)编译器编译的程序,让它在Win 98/2000等32位版本的Windows下运行.
它是一个16位编译器.你会看到你的所有程序都有16位指针.当你的操作系统是32位时为什么会这样?因为您的编译器已设置16位的执行环境,并且32位版本的OS支持它.
通常称为JRE(Java运行时环境)的Java程序为Java程序提供了执行它可能需要的所有资源.
实际上,运行时环境是虚拟机思想的大脑产物.虚拟机实现硬件与程序可能需要执行的内容之间的原始接口.运行时环境采用这些接口并将它们呈现给程序员.编译器开发人员需要这些工具来为其程序提供执行环境.
Ben*_*ler 10
我对这里的其他答案并不着迷;它们对我来说太模糊和抽象了。我想更多的故事。这是我对更好答案的尝试。
假设是 1985 年,您在 Apple II 上编写了一个简短的 BASIC 程序:
] 10 PRINT "HELLO WORLD!"
] 20 GOTO 10
Run Code Online (Sandbox Code Playgroud)
到目前为止,您的程序只是源代码。它没有运行,我们会说它不涉及“运行时”。
但现在我运行它:
] RUN
Run Code Online (Sandbox Code Playgroud)
实际运行情况如何?它如何知道如何将字符串参数从PRINT物理屏幕发送?我当然没有在我的代码中提供任何系统信息,而且我PRINT自己对我的系统一无所知。
相反,RUN它实际上是一个程序本身——它的代码告诉它如何解析我的代码、如何执行它,以及如何向计算机的操作系统发送任何相关的请求。该RUN程序提供了作为操作系统和我的源代码之间的层的“运行时”环境。操作系统本身作为这个“运行时”的一部分,但是当我们谈论像RUN程序这样的“运行时”时,我们通常不打算包括它。
在某些语言中,您的源代码必须先编译后才能运行。某些语言将您的代码编译成机器语言——它可以由您的操作系统直接运行。这种编译后的代码通常被称为“二进制”(即使所有其他类型的文件也是二进制的:)。
在这种情况下,仍然涉及最少的“运行时”——但该运行时由操作系统本身提供。编译步骤意味着在代码运行之前检测到许多会导致程序崩溃的语句。
C 就是这样一种语言;当您运行 C 程序时,它完全可以向操作系统发送非法请求(例如,“让我控制计算机上的所有内存,然后将其全部删除”)。如果遇到非法请求,操作系统通常只会杀死您的程序而不告诉您原因,并将该程序被杀死时的内存内容转储到一个.dump很难理解的文件中。但有时你的代码有一个非常糟糕的命令,但操作系统并不认为它是非法的,比如“擦除这个程序正在使用的随机内存位”;这可能会导致难以深入了解的超级奇怪的问题。
其他语言将您的代码编译成操作系统无法直接读取的语言,但特定的运行时程序可以读取您编译的代码。这种编译后的代码通常称为“字节码”。
这个运行时程序越复杂,它在您的代码未包含的方面(甚至在您使用的库中)可以做的额外事情就越多——例如,Java 运行时环境(“JRE”)可以跟踪不再需要的内存分配,并告诉操作系统将该内存重用于其他用途是安全的,并且它可以捕获您的代码尝试向操作系统发送非法请求的情况,而是以可读错误退出.
所有这些开销使它们比编译的二进制语言慢,但它使运行时强大而灵活;在某些情况下,它甚至可以在开始运行后引入其他代码,而无需重新开始。编译步骤意味着在代码运行之前检测到许多会导致程序崩溃的语句;并且强大的运行时可以防止您的代码做愚蠢的事情(例如,您不能“擦除该程序正在使用的随机内存位”)。
还有其他语言根本不预编译您的代码;运行时执行逐行读取代码、解释和执行代码的所有工作。这使得它们比“字节码”语言更慢,但也更加灵活;在某些情况下,您甚至可以在源代码运行时摆弄它!尽管这也意味着您的代码中可以有一个完全非法的语句,并且它可以在您的生产代码中存在而不引起注意,直到有一天它运行并导致崩溃。
这些通常被称为“脚本”语言;它们包括 Javascript、Python、Perl 和 PHP。其中一些提供了可以选择编译代码以提高其速度的情况(例如,Javascript 的 WebAssembly 项目和 Python 到 C 代码的反编译)。因此 Javascript 可以允许网站上的用户查看正在运行的确切代码,因为他们的浏览器提供了运行时。
这种灵活性还允许在运行时环境中进行创新,例如 node.js,它既是一个代码库,又是一个运行时环境,可以将您的 Javascript 代码作为服务器运行,这涉及到与您尝试在其上运行相同代码时的行为非常不同浏览器。
运行时恰好代码生成的地方,您可以看到代码所做的许多重要事情.
运行时负责分配内存,释放内存,使用操作系统的子系统,如(文件服务,IO服务,网络服务等)
在您实际运行代码之前,您的代码将被称为"在理论中工作".和Runtime是一个帮助实现这一目标的朋友.