อะไรทำให้ชิ้นส่วนของซอฟต์แวร์เป็น Engine [ปิด]


39

ตัวอธิบาย 'Engine' ถูกโยนทิ้งไปมากมาย: เอ็นจิ้นกราฟิก, เครื่องยนต์ RegEx, AI engine ฯลฯ แต่จริงๆแล้วอะไรที่ทำให้ชิ้นส่วนของซอฟต์แวร์เป็น Engine? ออกแบบอินพุต / เอาต์พุตวัตถุประสงค์ขนาด?


62
ฝ่ายการตลาด
Oded

2
@Oded: คำว่า 'engine' เป็นที่นิยมใช้โดยโปรแกรมเมอร์เอง ลองหาทางเลือกอื่นแล้วคุณจะเห็นว่าทำไม
MaR

2
เครื่องยนต์คือสิ่งที่ทำให้ล้อฉันไม่ต้องการที่จะพลิกโฉมใหม่
Flexo

@Flexo ดังนั้น - ห้องสมุดหรือไม่
Vorac

คำตอบ:


33

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

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

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


9
ดังนั้นไดรเวอร์คือเครื่องมือที่ควบคุมเครื่องยนต์และทำให้เชลล์ล้มเหลว
MikeJ-UK

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

ไลบรารี่และ API ทำงานในระดับที่แตกต่างจากเอนจิน ดีกว่าที่จะให้มันมุ่งเน้นไปที่คำที่อยู่ในมือกว่าแยกออกเป็นทะเลที่ไม่มีที่สิ้นสุดของการเปลี่ยนแปลงและชื่อ
วิศวกรโลก

6

นิยามของเครื่องยนต์คือ

คำนาม / ˈenjən / 
เครื่องยนต์, พหูพจน์

  1. เครื่องที่มีชิ้นส่วนที่เคลื่อนไหวซึ่งแปลงพลังงานเป็นการเคลื่อนไหว

  2. สิ่งที่เป็นตัวแทนหรือเครื่องมือของกระบวนการเฉพาะ

# 1 เป็น semantic equivelant engineในแง่ของซอฟต์แวร์ที่ทำให้บางสิ่งเกิดขึ้น 3D Graphics Engine รับอินพุตและแปลงสิ่งนั้นให้เคลื่อนไหวบนหน้าจอ เอ็นจิน regex รับอินพุตและแปลงไปเป็นเอาต์พุตอื่น

# 2 ก็เหมือนใช้ประโยคเครื่องมือของการเปลี่ยนแปลง ความหมายนี้สามารถใช้กับซอฟต์แวร์ได้เช่นกัน

ซอฟต์แวร์enginesเป็นมากกว่าเฟรมเวิร์กและไลบรารีที่ทำสิ่งต่าง ๆ อย่างอดทน เอ็นจิ้นของซอฟต์แวร์ทำหน้าที่ของตัวเองตามอินพุตพวกมันไม่ได้อยู่เฉยๆและมักจะมีrun loopการประมวลผลด้วยความตั้งใจของตัวเอง


3

ในความคิดของฉันคำตอบที่ใกล้เคียงที่สุดคือคำตอบที่บอกว่าเป็นสิ่งทางการตลาด

ลองคิดดูว่าการใช้คำในบริบทนี้มาจากไหน

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

ในความคิดของฉันมันไม่ใช่เรื่องบังเอิญโดยที่วัวนั้นไม่ใช่เครื่องยนต์ไม่ใช่การพูดเชิงเทคนิคและไม่ใช่การพูดอย่างมีสติ

เครื่องยนต์ใช้พลังงานหลายประเภทและเปลี่ยนเป็นการเคลื่อนที่ (เช่นพลังงานชนิดพิเศษ)

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

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

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


1

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

เทคนิคการพูดแม้แต่วัวก็เป็นเครื่องยนต์ชนิดหนึ่ง ต้องใช้หญ้าประมวลผลและส่งนม

อย่าลืมว่าคำว่า engine ถูกใช้ในวิศวกรรมเครื่องกลมากกว่าและมันก็เหมือนกันทุกประการ

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


5
+1 สำหรับ "เครื่องรีดนม" ฉันกินโยเกิร์ตและเกือบจะสำลักเมื่ออ่าน ;)
FrustratedWithFormsDesigner

5
ความหมายของคุณจะทำให้ทุกฟังก์ชั่นเป็นเครื่องมือ
back2dos

ไม่ใช่ทุกฟังก์ชั่นเป็นฟังก์ชั่นของอินพุต
Michael Burge

ฉันต้องยอมรับ คำอธิบายของคุณฟังดูพร่ามัวและไม่มีเหตุผล
Yam Marcovic

1
โปรแกรมเมอร์เป็นเครื่องมือเช่นกัน มันต้องใช้กาแฟในการป้อนข้อมูลและสร้างรหัสในการส่งออก
เอสเอฟ

1

IMHO เอ็นจิ้นเป็นอีกคำหนึ่งสำหรับระบบย่อยโมดูลหรือไลบรารี IE - องค์ประกอบอย่างน้อยหนึ่งองค์ประกอบได้รับการออกแบบมาเพื่อการทำงานร่วมกัน


2
downvoters: โปรดอธิบายอย่างละเอียด ว่าเอ็นจิ้น (เช่น Quake Engine) เป็นระบบย่อยโมดูลหรือไลบรารีนั้นไม่ผิดอย่างเห็นได้ชัด
keppla

3
ในขณะที่เครื่องยนต์ถูกนำไปใช้โดยทั่วไปเป็นระบบย่อยคำที่ใช้กันทั่วไปสำหรับระบบย่อย "ภายใต้ประทุน" ไม่ได้ใช้เป็นคำพ้องความหมาย
MaR

สถานที่ตั้งของคำถามนี้คือเครื่องยนต์ไม่ได้เป็นเพียงระบบย่อยแต่เป็นระบบย่อยประเภทหนึ่ง
จะ Sheppard

0

เอ็นจิ้นนั้นเป็นซอฟต์แวร์ที่สามารถขยายเพื่อสร้างบางสิ่งได้

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


0

ที่งานของฉันคำว่าหมายถึง "ไฟล์รหัสเดียวในรูปแบบที่XEngine.csมีหลายคลาสในไฟล์รหัสนั้นซึ่งทั้งหมดไม่มีอะไรเลยนอกจากวิธีการคงที่" ฉันโยนข้างในเล็กน้อยทุกครั้งที่ฉันมองมัน อาจรวมถึงโมดูล VB6

โดยส่วนตัวแล้วฉันจะไม่ใช้คำศัพท์นี้มันคลุมเครือและไม่มีความหมาย (เว้นแต่ฉันคิดว่าคุณกำลังเขียนซอฟต์แวร์ที่จำลองรถยนต์หรือเกมแข่งรถ) ในกรณีส่วนใหญ่ มันก็เหมือนเก่า "ผู้จัดการ" เรียนของสมัยก่อน - ชื่อบอกคุณไม่มีอะไรอื่นที่ไม่ใช่ "นี้ไม่มากของสิ่งที่เป็น" SOLIDและมักจะหมายความว่ามันเป็นละเมิด

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