“ runtime” คืออะไร?


403

ฉันเคยได้ยินเกี่ยวกับสิ่งต่าง ๆ เช่น "C Runtime", "Visual C ++ 2008 Runtime", ".NET Common Language Runtime" ฯลฯ

  • " runtime " คืออะไรกันแน่
  • มันทำมาจากอะไร?
  • มันทำงานกับรหัสของฉันอย่างไร หรืออาจจะแม่นยำกว่านี้รหัสของฉันควบคุมได้อย่างไร?

เมื่อการเข้ารหัสภาษาแอสเซมบลีบน Linux ฉันสามารถใช้คำสั่ง INT เพื่อทำการเรียกระบบ ดังนั้นรันไทม์ไม่มีอะไรนอกจากฟังก์ชั่นที่สร้างไว้ล่วงหน้าซึ่งห่อฟังก์ชั่นระดับต่ำลงในฟังก์ชั่นที่เป็นนามธรรมและสูงกว่า? แต่นี่ดูเหมือนจะไม่เป็นคำจำกัดความของไลบรารีมากกว่าสำหรับรันไทม์ใช่ไหม

"runtime" และ " runtime library " มีสองสิ่งที่แตกต่างกันหรือไม่?

เพิ่ม 1

ทุกวันนี้ฉันคิดว่าRuntimeอาจมีบางอย่างที่เหมือนกันกับVirtual Machineเช่น JVM นี่คือคำพูดที่นำไปสู่ความคิดดังกล่าว:

กระบวนการรวบรวมนี้มีความซับซ้อนเพียงพอที่จะแบ่งออกเป็นหลาย ๆ ชั้นของนามธรรมและสิ่งเหล่านี้มักจะเกี่ยวข้องกับนักแปลสามคน: คอมไพเลอร์การใช้งานเครื่องเสมือนและแอสเซมเบลอร์ --- องค์ประกอบของระบบคอมพิวเตอร์ (บทนำถนนสู่ดินแดนฮาร์ดแวร์)

เพิ่ม 2

หนังสือการเขียนโปรแกรมผู้เชี่ยวชาญ C: C ลึกความลับ บทที่ 6 โครงสร้างข้อมูลรันไทม์เป็นการอ้างอิงที่มีประโยชน์กับคำถามนี้


รันไทม์ชุดที่มีruntime libraryรหัสควบคุมบวกและบางสถานะ (จัดทำโดยระบบปฏิบัติการ)
Martin York

43
เป็นคำถามที่ดีมาก
contactmatt

ฉันจะไม่เรียกใช้ฟังก์ชัน INT โปรดดูstackoverflow.com/questions/1817577/…สำหรับรายละเอียดเพิ่มเติม
Koray Tugay

2
ฉันพบโพสต์อื่นในเว็บไซต์น้องสาวที่อาจมีประโยชน์: programmers.stackexchange.com/questions/294346/ …
CloudyTrees

ฉันมักจะชอบแซนด์บ็อกซ์ไปสู่โครงสร้างพื้นฐานระดับล่าง คุณมีตัวจัดการงาน / หรือกระบวนการในชุด Unix, ไลบรารี GUI ระดับต่ำทั้งหมด ฯลฯ ทั้งหมดที่เป็นส่วนหนึ่งของรันไทม์ รากฐานที่สิ่งต่าง ๆ ถูกสร้างขึ้น
JGFMK

คำตอบ:


262

รันไทม์อธิบายซอฟต์แวร์ / คำแนะนำที่ดำเนินการในขณะที่โปรแกรมของคุณกำลังทำงานโดยเฉพาะคำแนะนำที่คุณไม่ได้เขียนอย่างชัดเจน แต่จำเป็นสำหรับการดำเนินการที่เหมาะสมของรหัสของคุณ

ภาษาระดับต่ำเช่น C มี runtime ขนาดเล็กมาก (ถ้ามี) ภาษาที่ซับซ้อนมากขึ้นเช่น Objective-C ซึ่งอนุญาตให้ส่งข้อความแบบไดนามิกมีรันไทม์ที่กว้างขวางมากขึ้น

คุณถูกต้องที่รหัสรันไทม์คือรหัสห้องสมุด แต่รหัสห้องสมุดเป็นคำทั่วไปมากขึ้นอธิบายรหัสที่ผลิตโดยห้องสมุดใด ๆ รหัสรันไทม์เป็นรหัสเฉพาะที่จำเป็นสำหรับการใช้งานคุณสมบัติของภาษานั้น ๆ


103

รันไทม์เป็นคำทั่วไปที่อ้างถึงไลบรารีกรอบงานหรือแพลตฟอร์มใด ๆ ที่โค้ดของคุณทำงาน

C และ C ++ runtimes เป็นกลุ่มของฟังก์ชัน

รันไทม์. NET ประกอบด้วยตัวแปลภาษาระดับกลางตัวรวบรวมขยะและอีกมากมาย


4
ไลบรารีมาตรฐาน C ++ ไม่เพียง แต่มีฟังก์ชั่นเท่านั้นและอ้างอิงถึง Matt Ball, C และ C ++ "runtime" เป็น runtime library,. NET runtime เป็น runtime library และระบบ runtime
smerlin

1
คำถามของฉันคือห้องสมุดคงเป็น runtime เกินไป ฉันเดาว่าคำนี้ใช้สำหรับวัตถุที่แชร์เป็นหลักใช่ไหม พิจารณา libc ใน linux แล้วแพลตฟอร์มและเฟรมเวิร์กล่ะ พวกเขาถูกแบ่งย่อยเป็นห้องสมุดด้วยหรือไม่
Amir Zadeh

3
แต่รหัสของฉันจะทำงานบน " ไลบรารีกรอบงานหรือแพลตฟอร์ม " ใด ๆ ได้อย่างไร ควรรันบน CPU หรือหน่วยประมวลผลอื่น คุณสามารถให้ระดับรายละเอียดเพิ่มเติมเพื่อความกระจ่างเพิ่มเติมหรือไม่
n611x007

Runtimes C และ C ++ เป็นคอลเลกชันของฟังก์ชัน -> ฟังก์ชั่นอะไร?
Koray Tugay

3
@KorayTugay: ฟังก์ชั่นในไลบรารีมาตรฐานเช่นหรือcout printf
slaks

80

ตามวิกิพีเดีย: ห้องสมุดรันไทม์ / ระบบรันไทม์

ในการเขียนโปรแกรมคอมพิวเตอร์ไลบรารีรันไทม์เป็นไลบรารีโปรแกรมพิเศษที่ใช้โดยคอมไพเลอร์เพื่อใช้งานฟังก์ชั่นที่สร้างขึ้นในภาษาการเขียนโปรแกรมระหว่างรันไทม์ (การดำเนินการ) ของโปรแกรมคอมพิวเตอร์ ซึ่งมักจะมีฟังก์ชั่นสำหรับอินพุตและเอาต์พุตหรือสำหรับการจัดการหน่วยความจำ


ระบบรันไทม์ (หรือที่เรียกว่าระบบรันไทม์หรือเพียงแค่รันไทม์) เป็นซอฟต์แวร์ที่ออกแบบมาเพื่อรองรับการทำงานของโปรแกรมคอมพิวเตอร์ที่เขียนด้วยภาษาคอมพิวเตอร์บางภาษา ระบบรันไทม์มีการนำไปใช้ของคำสั่งระดับต่ำพื้นฐานและอาจใช้คำสั่งระดับสูงกว่าและอาจรองรับการตรวจสอบชนิดการดีบักและแม้แต่การสร้างรหัสและการปรับให้เหมาะสม บริการบางอย่างของระบบรันไทม์สามารถเข้าถึงได้โดยโปรแกรมเมอร์ผ่านอินเตอร์เฟสการเขียนโปรแกรมประยุกต์ แต่บริการอื่น ๆ (เช่นการกำหนดตารางงานและการจัดการทรัพยากร) อาจไม่สามารถเข้าถึงได้


Re: การแก้ไขของคุณ "runtime" และ "runtime library" เป็นสองชื่อที่ต่างกันสำหรับสิ่งเดียวกัน


69
Wikipedia ไม่ใช่แหล่งอ้างอิงที่ดีสำหรับราคา มันเป็นสถานที่ที่ดีในการเริ่มค้นหาแหล่งข้อมูลที่เชื่อถือได้ แต่ตัวเองไม่ควรได้รับการพิจารณาว่ามีสิทธิ์และเป็นข้อความที่ไม่น่าเชื่อถือ (ตามคำกล่าวของ Mr Wales ผู้สร้าง Wikipedia)
Martin York

5
"ระหว่างรันไทม์" ในเครื่องหมายคำพูดแรก (อ้างถึงไลบรารีรันไทม์) หมายถึงอะไร? การตีความที่ผิดพลาดง่าย ๆ อาจเป็นดังต่อไปนี้: "ในขณะที่โปรแกรมกำลังดำเนินการคอมไพเลอร์ในแบบคู่ขนานใช้ไลบรารี (สำหรับตัวเอง) เพื่อดำเนินการ (เช่นสร้างรหัสเพิ่มเติมที่รันไทม์)" สัญญา "(ตามข้อกำหนดภาษา ) ฟังก์ชั่นสำหรับโปรแกรม ". นี่อาจเป็นเท็จและ / หรืองอได้ง่ายกับ def ของระบบเวลาทำงาน
n611x007

2
เพื่อดำเนินการต่อจากที่โลกิไปโดยเฉพาะอย่างยิ่งเมื่อไม่มีบทความใดที่ให้การอ้างอิงใด ๆ (นั่นไม่ใช่คำพูดมันเป็นเพียงสิ่งที่ฉันคิดว่าฉันควรจะพูด)
arsaKasra

1
@MartinYork ไม่เพียง แต่เป็นสารานุกรมที่ไม่ได้รับอนุญาต แต่ยังมุ่งเน้นไปที่เอกสารและไม่ใช่คำอธิบาย สิ่งเหล่านี้อาจแตกต่างกันมาก
Roy Prins

59

รันไทม์หรือการดำเนินการสภาพแวดล้อมที่เป็นส่วนหนึ่งของการดำเนินงานภาษาที่รันรหัสและเป็นปัจจุบันที่รันไทม์ ; เวลารวบรวมส่วนหนึ่งของการดำเนินงานที่เรียกว่าสภาพแวดล้อมการแปลในมาตรฐาน C

ตัวอย่าง:

  • Java runtime ประกอบด้วยเครื่องเสมือนและไลบรารีมาตรฐาน

  • รันไทม์ C ทั่วไปประกอบด้วยโหลดเดอร์ (ซึ่งเป็นส่วนหนึ่งของระบบปฏิบัติการ) และรันไทม์ไลบรารี่ซึ่งใช้ส่วนของภาษา C ซึ่งไม่ได้สร้างไว้ในตัวประมวลผลโดยคอมไพเลอร์ ในสภาพแวดล้อมที่โฮสต์ซึ่งรวมถึงส่วนใหญ่ของไลบรารีมาตรฐาน


2
ขอบคุณฉันคิดว่านี่เป็นคำตอบที่ดีที่สุดในหัวข้อนี้
Koray Tugay

1
ฉันชื่นชมการตั้งชื่อ "environment execution" แต่ฉันคิดว่าการใช้ "runtime" เพียงอย่างเดียวสำหรับนามแฝงในอดีตนั้นเป็นความคิดที่ไม่ดี (ซึ่งจากการสังเกตของฉันสิ่งที่โปรแกรมเมอร์ทำ) ฉันเห็นด้วยกับ @ MichałTrybusว่า "runtime" หมายถึง "เวลาที่โปรแกรมทำงาน"
WloHu

32

ในความเข้าใจของฉันรันไทม์เป็นสิ่งที่หมายถึง - เวลาที่เรียกใช้โปรแกรม คุณสามารถพูดได้บางสิ่งบางอย่างเกิดขึ้นที่รันไทม์ / เวลาทำงานหรือที่รวบรวมเวลา

ฉันคิดว่าruntimeและlibrary runtimeควรแยกจากสองอย่าง (ถ้าไม่ใช่) "C runtime" ไม่ถูกต้องสำหรับฉัน ฉันเรียกมันว่า "C runtime library"

คำตอบสำหรับคำถามอื่น ๆ ของคุณ: ฉันคิดว่าคำว่ารันไทม์สามารถขยายเพื่อรวมสภาพแวดล้อมและบริบทของโปรแกรมเมื่อมีการเรียกใช้ดังนั้น:

  • ประกอบด้วยทุกสิ่งที่สามารถเรียกว่า "สภาพแวดล้อม" ในช่วงเวลาที่โปรแกรมทำงานเช่นกระบวนการอื่นสถานะของระบบปฏิบัติการและห้องสมุดที่ใช้สถานะของกระบวนการอื่น ๆ ฯลฯ
  • มันไม่ได้ทำงานกับโค้ดของคุณในแง่ทั่วไปเพียงแค่กำหนดว่าสถานการณ์ของคุณทำงานได้ดีแค่ไหนในระหว่างการประมวลผล

คำตอบนี้คือบางความคิดเห็นของฉันไม่ใช่ความจริงหรือคำจำกัดความ


29

แมตต์บอลตอบถูกอย่างถูกต้อง ฉันจะพูดเกี่ยวกับมันด้วยตัวอย่าง

ลองใช้โปรแกรมที่คอมไพล์เลอร์ด้วย Turbo-Borland C / C ++ (รุ่น 3.1 จากปี 1991) และปล่อยให้มันทำงานภายใต้ Windows รุ่น 32 บิตเช่น Win 98/2000 เป็นต้น

มันเป็นคอมไพเลอร์ 16 บิต และคุณจะเห็นว่าโปรแกรมทั้งหมดของคุณมีตัวชี้ 16 บิต ทำไมมันเป็นเช่นนั้นเมื่อระบบปฏิบัติการของคุณเป็น 32 บิต? เนื่องจากคอมไพเลอร์ของคุณตั้งค่าสภาพแวดล้อมการประมวลผลเป็น 16 บิตและรองรับระบบปฏิบัติการรุ่น 32 บิต

สิ่งที่เรียกกันโดยทั่วไปว่า JRE (Java Runtime Environment) จัดเตรียมโปรแกรม Java ที่มีทรัพยากรทั้งหมดที่อาจจำเป็นต้องดำเนินการ

ที่จริงแล้วสภาพแวดล้อมรันไทม์เป็นผลิตภัณฑ์สมองของแนวคิดของ Virtual Machines เครื่องเสมือนใช้ส่วนต่อประสานแบบrawระหว่างฮาร์ดแวร์กับโปรแกรมที่อาจต้องใช้ในการดำเนินการ สภาพแวดล้อมรันไทม์ใช้อินเทอร์เฟซเหล่านี้และแสดงไว้สำหรับการใช้โปรแกรมเมอร์ ผู้พัฒนาคอมไพเลอร์จะต้องมีสิ่งอำนวยความสะดวกเหล่านี้เพื่อให้สภาพแวดล้อมการดำเนินการสำหรับโปรแกรมของตน


เครื่องเสมือนใช้อินเทอร์เฟซ "ดิบ" ระหว่างฮาร์ดแวร์และสิ่งที่โปรแกรมอาจต้องดำเนินการ -> ฉันไม่แน่ใจเกี่ยวกับสิ่งนี้
Koray Tugay

7

รันเวลาที่รหัสของคุณเข้ามาในชีวิตและคุณสามารถเห็นสิ่งสำคัญมากมายที่รหัสของคุณทำ

รันไทม์มีความรับผิดชอบในการจัดสรรหน่วยความจำเพิ่มหน่วยความจำโดยใช้ระบบย่อยของระบบปฏิบัติการเช่น (บริการไฟล์, บริการ IO .. บริการเครือข่าย ฯลฯ )

รหัสของคุณจะถูกเรียกว่า "WORKING IN THEORY" จนกว่าคุณจะรันรหัสของคุณ และ Runtime เป็นเพื่อนที่ช่วยให้บรรลุเป้าหมายนี้


3

รันไทม์สามารถแสดงเฟสปัจจุบันของอายุการใช้งานโปรแกรม (รันไทม์ / เวลาคอมไพล์ / เวลาโหลด / เวลาเชื่อมโยง) หรืออาจหมายถึงไลบรารีรันไทม์ซึ่งรูปแบบการกระทำระดับต่ำพื้นฐานที่เชื่อมต่อกับสภาพแวดล้อมการดำเนินการ หรืออาจหมายถึงระบบรันไทม์ซึ่งเหมือนกับสภาพแวดล้อมการดำเนินการ

ในกรณีของโปรแกรม C รันไทม์คือรหัสที่ตั้งค่าสแต็กฮีป ฯลฯ ซึ่งเป็นข้อกำหนดที่คาดหวังจากสภาพแวดล้อม C โดยพื้นฐานแล้วมันจะสร้างสภาพแวดล้อมที่สัญญากับภาษา (อาจมีองค์ประกอบไลบรารีรันไทม์ crt0.lib หรืออะไรทำนองนั้นในกรณีของ C)


3

ฉันพบว่าโครงสร้างโฟลเดอร์ต่อไปนี้ทำให้บริบทลึกซึ้งมากสำหรับการทำความเข้าใจruntimeคืออะไร:

Runtimes ของ Mozilla XulRunner

คุณจะเห็นว่ามี ' แหล่ง ' มี ' SDK ' หรือ 'ชุดพัฒนาซอฟต์แวร์' และจากนั้นมีRuntimeเช่น สิ่งที่ถูกเรียกใช้ - ที่รันไทม์ มันเป็นเนื้อหาที่ชอบ:

เนื้อหาโฟลเดอร์ของ runtimes

win32 zip ประกอบด้วย. exe -s และ. dll -s

เช่น รันไทม์ C จะเป็นไฟล์เช่นนี้ - ไลบรารีรันไทม์ C, .so-s หรือ. dll - s - คุณเรียกใช้ที่รันไทม์ทำพิเศษโดยรวม (หรือเนื้อหาของพวกเขาหรือวัตถุประสงค์ ') ของพวกเขาในคำจำกัดความของ ภาษา C (บน 'paper') จากนั้นนำไปใช้โดยการเลือก C ที่คุณต้องการ จากนั้นคุณจะได้รับ runtime ของการนำไปใช้นั้นเพื่อใช้และสร้างมันขึ้นมา

นั่นคือด้วยโพลาไรเซชันเล็กน้อยไฟล์ที่รันได้ซึ่งผู้ใช้โปรแกรม C-based ใหม่ของคุณจะต้องการ ในฐานะผู้พัฒนาโปรแกรม C-based คุณก็เช่นกัน แต่คุณต้องการคอมไพเลอร์ C และส่วนหัวไลบรารี C เช่นกัน ผู้ใช้ไม่ต้องการสิ่งเหล่านั้น


1
อีกอันหนึ่งเพื่อกำหนดบริบท runtime, นี่เป็นบทความที่ไม่เกี่ยวข้องกับตำนานส่วนตำนาน ธ 6 ซึ่งคุณสามารถเห็นความแตกต่างระหว่างรันไทม์และภาษาการเขียนโปรแกรมในวรรคแรกของตำนาน 6
n611x007

3

รันไทม์โดยทั่วไปหมายถึงเมื่อโปรแกรมโต้ตอบกับฮาร์ดแวร์และระบบปฏิบัติการของเครื่อง C ไม่มีรันไทม์ของตัวเอง แต่ต้องการรันไทม์จากระบบปฏิบัติการ (ซึ่งโดยทั่วไปเป็นส่วนหนึ่งของ ram) เพื่อรันตัวเอง


1

หากความเข้าใจของฉันจากการอ่านคำตอบข้างต้นนั้นถูกต้อง Runtime เป็นพื้นฐานของ 'กระบวนการพื้นหลัง' เช่นการรวบรวมขยะการจัดสรรหน่วยความจำโดยทั่วไปกระบวนการใด ๆ ที่ถูกเรียกใช้โดยอ้อมโดยไลบรารี / กรอบงานที่โค้ดของคุณถูกเขียน กระบวนการที่เกิดขึ้นหลังจากการรวบรวมในขณะที่แอปพลิเคชันทำงานอยู่


-1

ส่วนเหล่านี้ของเอกสาร MSDN จัดการกับคำถามส่วนใหญ่ของคุณ: http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

ฉันหวังว่านี่จะช่วยได้.

ขอบคุณดาเมียน


3
จริงๆแล้วมันไม่ได้; เขาไม่เพียงถามเกี่ยวกับ. Net
SLAK

@ แมท: ถูกต้องอีกครั้ง อย่างไรก็ตาม 2/3 ของ runtimes ของเขาได้รับการสนับสนุนโดย. Net, 1/2 ของแท็กของเขาจัดการกับ. Net และฉันแค่คิดว่าลิงก์จะมีประโยชน์
Damian Schenkelman

ฉันต้องการวลีว่า "3/4 ของภาษาที่รองรับ. NET" .NET ไม่ได้มีการรองรับมากนักมันถูกออกแบบมาเพื่อรักษาความแข็งแกร่งของความแตกต่างระหว่างยูนิกซ์และหน้าต่างในระดับมิดเดิลแวร์
Matt Joiner

@ MattJoiner - อาจเป็นจริงในปี 2010 แต่มันไม่เป็นความจริงในปัจจุบันด้วย. NET Standard และการใช้งานโอเพ่นซอร์สเช่น. NET Core ฯลฯ
rory.ap

-2

เวลาทำงานเป็นตัวอย่างที่คุณไม่ทราบว่าวัตถุชนิดใดที่สร้างขึ้นระหว่างการทำงานการสร้างวัตถุขึ้นอยู่กับเงื่อนไขบางอย่างหรือการคำนวณบางอย่าง ในทางตรงกันข้ามเวลาในการคอมไพล์เป็นอินสแตนซ์ที่คุณต้องกำหนดวัตถุที่ต้องการก่อนการประหารชีวิต


-3

รันไทม์ค่อนข้างตรงข้ามกับเวลาออกแบบและรวบรวมเวลา / ลิงค์เวลา ในอดีตมันมาจากสภาพแวดล้อมเมนเฟรมที่ช้าซึ่งเวลาเครื่องมีราคาแพง


1
สิ่งนี้ไม่ตอบคำถาม & ทำให้มันซับซ้อนขึ้น
cglotr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.