Thời gian chạy trực tuyến là gì?


404

Tôi đã nghe nói về những thứ như "C Runtime", "Visual C ++ 2008 Runtime", ".NET Common Language Runtime", v.v.

  • " Thời gian chạy " chính xác là gì?
  • là nó làm bằng gì?
  • Làm thế nào để nó tương tác với mã của tôi? Hoặc có thể chính xác hơn, làm thế nào mã của tôi được kiểm soát bởi nó?

Khi mã hóa ngôn ngữ lắp ráp trên Linux, tôi có thể sử dụng lệnh INT để thực hiện cuộc gọi hệ thống. Vì vậy, thời gian chạy không có gì ngoài một loạt các hàm được chế tạo sẵn bao bọc hàm cấp thấp thành các hàm cấp cao hơn và trừu tượng hơn? Nhưng không phải điều này có vẻ giống như định nghĩa cho thư viện, không phải cho thời gian chạy?

Có phải "thời gian chạy" và " thư viện thời gian chạy " là hai thứ khác nhau không?

THÊM 1

Ngày nay, tôi nghĩ có lẽ Runtime có một cái gì đó tương đồng với cái gọi là Máy ảo , chẳng hạn như JVM. Đây là trích dẫn dẫn đến suy nghĩ như vậy:

Quá trình biên dịch này đủ phức tạp để được chia thành nhiều lớp trừu tượng và chúng thường bao gồm ba trình dịch: trình biên dịch, triển khai máy ảo và trình biên dịch. --- Các yếu tố của hệ thống máy tính (Giới thiệu, Đường xuống đất phần cứng)

THÊM 2

Cuốn sách Expert C Programming: Deep C Secrets . Chương 6 Cấu trúc dữ liệu thời gian chạy là một tài liệu tham khảo hữu ích cho câu hỏi này.


Thời gian chạy có chứa runtime librarymột số mã điều khiển và một số trạng thái (được cung cấp bởi HĐH).
Martin York

43
Câu hỏi tuyệt vời, luôn luôn đặt câu hỏi này.
contactmatt

Tôi sẽ không gọi INT là một chức năng. Vui lòng xem stackoverflow.com/questions/1817577/ cấp để biết thêm chi tiết.
Koray Tugay

2
Tôi tìm thấy một bài đăng khác trên một trang web chị em có thể hữu ích: lập trình
viên.stackexchange.com/questions/294346/ Kẻ

Tôi luôn luôn nghĩ nó giống như một hộp cát cho cơ sở hạ tầng cấp thấp hơn. Bạn có Trình quản lý tác vụ / Hoặc các quy trình trên bộ Unix, tất cả các thư viện GUI cấp thấp, v.v. Tất cả đó là một phần của thời gian chạy. Các nền tảng mà mọi thứ được xây dựng.
JGFMK

Câu trả lời:


262

Thời gian chạy mô tả phần mềm / hướng dẫn được thực thi trong khi chương trình của bạn đang chạy, đặc biệt là những hướng dẫn mà bạn không viết rõ ràng, nhưng cần thiết để thực thi đúng mã của bạn.

Các ngôn ngữ cấp thấp như C có thời gian chạy rất nhỏ (nếu có). Các ngôn ngữ phức tạp hơn như Objective-C, cho phép truyền thông điệp động, có thời gian chạy rộng hơn nhiều.

Bạn đúng rằng mã thời gian chạy là mã thư viện, nhưng mã thư viện là một thuật ngữ chung hơn, mô tả mã được tạo bởi bất kỳ thư viện nào . Mã thời gian chạy cụ thể là mã cần thiết để thực hiện các tính năng của chính ngôn ngữ.


103

Thời gian chạy là một thuật ngữ chung để chỉ bất kỳ thư viện, khung hoặc nền tảng nào mà mã của bạn chạy trên đó.

Thời gian chạy của C và C ++ là tập hợp các hàm.

Thời gian chạy .NET chứa trình thông dịch ngôn ngữ trung gian , trình thu gom rác và hơn thế nữa.


4
Thư viện chuẩn C ++ không chỉ chứa các hàm và tham chiếu đến Matt Ball, "thời gian chạy" của C và C ++ là các thư viện thời gian chạy, thời gian chạy .NET là thư viện thời gian chạy và hệ thống thời gian chạy.
smerlin

1
Câu hỏi của tôi là thư viện tĩnh là thời gian chạy quá? Tôi đoán thuật ngữ này được sử dụng chủ yếu cho các đối tượng chia sẻ, phải không? xem xét libc trong linux. Và những gì về nền tảng và khung? họ cũng được chia thành các thư viện?
Amir Zadeh

3
Nhưng làm thế nào mã của tôi thực sự có thể chạy trên bất kỳ " thư viện, khung hoặc nền tảng " nào? Nó nên chạy trên CPU hoặc đơn vị xử lý khác. Bạn có thể cung cấp một mức độ chi tiết bổ sung để làm rõ hơn?
n611x007

Thời gian chạy của C và C ++ là tập hợp các hàm. -> Chức năng gì?
Koray Tugay

3
@KorayTugay: Các chức năng trong thư viện chuẩn, như couthoặc printf.
SLaks

80

Theo Wikipedia: thư viện thời gian chạy / hệ thống thời gian chạy .

Trong lập trình máy tính, thư viện thời gian chạy là thư viện chương trình đặc biệt được sử dụng bởi trình biên dịch, để thực hiện các chức năng được tích hợp trong ngôn ngữ lập trình, trong thời gian chạy (thực thi) của chương trình máy tính. Điều này thường bao gồm các chức năng cho đầu vào và đầu ra, hoặc để quản lý bộ nhớ.


Một hệ thống thời gian chạy (còn gọi là hệ thống thời gian chạy hoặc chỉ là thời gian chạy) là phần mềm được thiết kế để hỗ trợ thực hiện các chương trình máy tính được viết bằng một số ngôn ngữ máy tính. Hệ thống thời gian chạy chứa các triển khai của các lệnh cấp thấp cơ bản và cũng có thể thực hiện các lệnh cấp cao hơn và có thể hỗ trợ kiểm tra kiểu, gỡ lỗi, thậm chí tạo và tối ưu hóa mã. Một số dịch vụ của hệ thống thời gian chạy có thể được lập trình viên truy cập thông qua giao diện lập trình ứng dụng, nhưng các dịch vụ khác (như lập lịch tác vụ và quản lý tài nguyên) có thể không truy cập được.


Re: chỉnh sửa của bạn , "runtime" và "library library" là hai tên khác nhau cho cùng một thứ.


69
Wikipedia không phải là một nguồn tốt để trích dẫn. Đó là một vị trí tốt để bắt đầu tìm kiếm các nguồn có thẩm quyền nhưng bản thân nó không nên được coi là có thẩm quyền và như vậy trích dẫn từ nó là không đáng tin cậy. (Theo tuyên bố của ông Wales, người tạo ra Wikipedia).
Martin York

5
"Trong thời gian chạy" trong trích dẫn đầu tiên (được cho là về thư viện thời gian chạy) đề cập đến điều gì? Một cách giải thích [mis] dễ dàng có thể là như sau: "trong khi chương trình đang thực thi, trình biên dịch, song song, sử dụng một thư viện (cho chính nó) để thực hiện (tức là tạo mã bổ sung khi chạy)" theo lời hứa ) các chức năng cho chương trình ". Điều này có thể sai và / hoặc dễ dàng bị bẻ cong với hệ thống thời gian chạy.
n611x007

2
Tiếp tục từ nơi Loki rời đi, đặc biệt là khi cả hai bài báo không cung cấp bất kỳ tài liệu tham khảo nào (đó không phải là trích dẫn, đó chỉ là điều tôi nghĩ tôi nên nói tốt hơn)
arsaKasra

1
@MartinYork, không chỉ là một cuốn bách khoa toàn thư không có thẩm quyền, nó còn tập trung vào tài liệu và không giải thích. Những cái đó có thể rất khác nhau.
Roy Prins

59

Các thời gian chạy hoặc thực hiện môi trường là một phần của một thực hiện ngôn ngữ đó thực thi mã và có mặt tại thời gian chạy ; các thời gian biên dịch một phần của việc thực hiện được gọi là môi trường dịch trong tiêu chuẩn C.

Ví dụ:

  • thời gian chạy Java bao gồm máy ảo và thư viện chuẩn

  • một thời gian chạy C phổ biến bao gồm trình nạp (là một phần của hệ điều hành) và thư viện thời gian chạy, thực hiện các phần của ngôn ngữ C không được trình biên dịch thực hiện; trong môi trường lưu trữ, phần này bao gồm hầu hết các phần của thư viện chuẩn


2
Cảm ơn, tôi nghĩ rằng đây là câu trả lời tốt nhất trong chủ đề này.
Koray Tugay

1
Tôi đánh giá cao việc đặt tên "môi trường thực thi" nhưng tôi nghĩ rằng chỉ sử dụng "thời gian chạy" làm bí danh cho cái trước là một ý tưởng tồi (đó là từ quan sát của tôi, điều mà nhiều lập trình viên làm), "môi trường thời gian chạy" chính xác hơn. Tôi đồng ý với @ MichałTrybus rằng "thời gian chạy" có nghĩa là "thời gian khi chương trình được chạy".
WloHu

32

Theo hiểu biết của tôi thời gian chạy là chính xác những gì nó có nghĩa - thời gian khi chương trình được chạy. Bạn có thể nói điều gì đó xảy ra vào thời gian chạy / thời gian chạy hoặc tại thời gian biên dịch.

Tôi nghĩ thời gian chạythời gian chạy thư viện nên được (nếu họ không) hai việc riêng biệt. "C runtime" dường như không đúng với tôi. Tôi gọi nó là "thư viện thời gian chạy C".

Trả lời các câu hỏi khác của bạn: Tôi nghĩ thuật ngữ thời gian chạy có thể được mở rộng để bao gồm cả môi trường và bối cảnh của chương trình khi nó được chạy, vì vậy:

  • nó bao gồm mọi thứ có thể được gọi là "môi trường" trong suốt thời gian chương trình được chạy, ví dụ như các quy trình khác, trạng thái của hệ điều hành và các thư viện đã sử dụng, trạng thái của các quy trình khác, v.v.
  • Nó không tương tác với mã của bạn theo nghĩa chung, nó chỉ xác định trong trường hợp nào mã của bạn hoạt động, những gì có sẵn cho nó trong khi thực thi.

Câu trả lời này là một số mở rộng chỉ ý kiến ​​của tôi, không phải là một thực tế hoặc định nghĩa.


29

Matt Ball đã trả lời đúng. Tôi sẽ nói về nó với các ví dụ.

Xem xét việc chạy một chương trình được biên dịch trong trình biên dịch Turbo-Borland C / C ++ (phiên bản 3.1 từ năm 1991) và để chương trình chạy dưới phiên bản 32 bit của các cửa sổ như Win 98/2000, v.v.

Đây là trình biên dịch 16 bit. Và bạn sẽ thấy tất cả các chương trình của bạn có con trỏ 16 bit. Tại sao nó như vậy khi hệ điều hành của bạn là 32 bit? Bởi vì trình biên dịch của bạn đã thiết lập môi trường thực thi 16 bit và phiên bản HĐH 32 bit đã hỗ trợ nó.

Cái thường được gọi là JRE (Môi trường chạy thi hành Java) cung cấp một chương trình Java với tất cả các tài nguyên mà nó có thể cần để thực thi.

Trên thực tế, môi trường thời gian chạy là sản phẩm trí tuệ của ý tưởng về Máy ảo. Một máy ảo thực hiện giao diện thô giữa phần cứng và những gì chương trình có thể cần thực hiện. Môi trường thời gian chạy thông qua các giao diện này và trình bày chúng để sử dụng cho lập trình viên. Một nhà phát triển trình biên dịch sẽ cần các phương tiện này để cung cấp một môi trường thực thi cho các chương trình của nó.


Một máy ảo thực hiện giao diện "thô" giữa phần cứng và những gì chương trình có thể cần thực hiện. -> Tôi không chắc về điều này.
Koray Tugay

7

Chạy thời gian chính xác nơi mã của bạn đi vào cuộc sống và bạn có thể thấy rất nhiều điều quan trọng mà mã của bạn làm.

Thời gian chạy có trách nhiệm phân bổ bộ nhớ, giải phóng bộ nhớ, sử dụng hệ thống phụ của hệ điều hành như (Dịch vụ tệp, Dịch vụ IO .. Dịch vụ mạng, v.v.)

Mã của bạn sẽ được gọi là "LÀM VIỆC TRONG LÝ THUYẾT" cho đến khi bạn thực sự chạy mã của mình. và Runtime là một người bạn giúp đạt được điều này.


3

một thời gian chạy có thể biểu thị giai đoạn hiện tại của chương trình (thời gian chạy / thời gian biên dịch / thời gian tải / thời gian liên kết) hoặc nó có thể có nghĩa là một thư viện thời gian chạy, tạo thành các hành động cấp thấp cơ bản có giao diện với môi trường thực thi. hoặc nó có thể có nghĩa là một hệ thống thời gian chạy, giống như một môi trường thực thi.

trong trường hợp chương trình C, thời gian chạy là mã thiết lập ngăn xếp, heap, v.v ... mà một yêu cầu được mong đợi bởi môi trường C. về cơ bản nó thiết lập môi trường được hứa hẹn bởi ngôn ngữ. (nó có thể có một thành phần thư viện thời gian chạy, crt0.lib hoặc một cái gì đó tương tự trong trường hợp của C)


3

Tôi thấy rằng cấu trúc thư mục sau đây tạo ra một bối cảnh rất sâu sắc để hiểu thế nào runtimelà:

Thời gian chạy của Mozilla XulRunner

Bạn có thể thấy rằng có ' nguồn ', có ' SDK ' hoặc 'Bộ phát triển phần mềm' và sau đó có Runtime, ví dụ: những thứ được chạy - tại thời gian chạy. Nội dung của nó giống như:

nội dung thư mục của thời gian chạy

Các zip win32 chứa .exe -s và.

Vì vậy, ví dụ. thời gian chạy C sẽ là các tệp như thế này - các thư viện thời gian chạy C, .so-s hoặc dll -s - bạn chạy trong thời gian chạy, được tạo đặc biệt bởi (hoặc nội dung của chúng 'hoặc mục đích') trong định nghĩa của Ngôn ngữ C (trên 'giấy'), sau đó được triển khai bằng lựa chọn C của bạn. Và sau đó bạn có được thời gian chạy của việc thực hiện đó, để sử dụng nó và xây dựng dựa trên nó.

Đó là, với một chút phân cực, các tệp có thể chạy được mà người dùng chương trình dựa trên C mới của bạn sẽ cần. Là một nhà phát triển chương trình dựa trên C, bạn cũng vậy, nhưng bạn cũng cần trình biên dịch C và các tiêu đề thư viện C; Người dùng không cần những thứ đó.


1
Một cái khác để bối cảnh hóa thời gian chạy, là bài viết không liên quan đến phần 6 của huyền thoại python , nơi bạn có thể thấy sự khác biệt giữa thời gian chạyngôn ngữ lập trình , trong đoạn đầu tiên của huyền thoại 6.
n611x007 30/03/2015

3

Thời gian chạy về cơ bản có nghĩa là khi chương trình tương tác với phần cứng và hệ điều hành của máy. C không có thời gian chạy riêng mà thay vào đó, nó yêu cầu thời gian chạy từ một hệ điều hành (về cơ bản là một phần của ram) để tự thực thi.


1

Nếu sự hiểu biết của tôi khi đọc các câu trả lời trên là chính xác, thì Runtime về cơ bản là 'các quy trình nền' như thu gom rác, cấp phát bộ nhớ, về cơ bản là bất kỳ quy trình nào được gọi một cách gián tiếp, bởi các thư viện / khung mà mã của bạn được viết và cụ thể là các quy trình các quá trình xảy ra sau khi biên dịch, trong khi ứng dụng đang chạy.


-1

Các phần này của tài liệu MSDN giải quyết hầu hết các câu hỏi của bạn: http://msdn.microsoft.com/en-us/l Library / 8bs2ecf4 (VS.71) .aspx

Tôi hi vọng cái này giúp được.

Cảm ơn, Damian


3
Trên thực tế, nó không; anh ấy không chỉ hỏi về .Net.
SLaks

@Matt: Lại nữa. Tuy nhiên, 2/3 thời gian chạy của anh ấy được hỗ trợ bởi .Net, 1/2 thẻ của anh ấy xử lý .Net và tôi chỉ nghĩ rằng các liên kết sẽ hữu ích.
Damian Schenkelman

Tôi muốn nói nó là "3/4 ngôn ngữ hỗ trợ .NET". .NET không hỗ trợ nhiều, nó được thiết kế để giữ sự rạn nứt mạnh mẽ giữa unix và windows ở mức phần mềm trung gian.
Matt Joiner

@MattJoiner - Điều đó có thể đúng trong năm 2010, nhưng ngày nay nó không thực sự đúng với .NET Standard và các triển khai nguồn mở như .NET Core, v.v.
rory.ap

-2

Thời gian chạy là trường hợp bạn không biết về loại đối tượng nào tạo ra trong quá trình thực thi, việc tạo đối tượng dựa trên điều kiện nhất định hoặc một số công việc tính toán. Trong mâu thuẫn, thời gian biên dịch là trường hợp trong đó các đối tượng được yêu cầu được xác định bởi bạn trước khi thực thi.


-3

Thời gian chạy có phần trái ngược với thời gian thiết kế và thời gian biên dịch / thời gian liên kết. Trong lịch sử, nó xuất phát từ môi trường máy tính lớn, nơi thời gian máy đắt đỏ.


1
Điều này không trả lời câu hỏi và làm phức tạp thêm nó.
cglotr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.