อะไรบล็อก Ruby, Python เพื่อให้ได้ความเร็ว Javascript V8? [ปิด]


261

มีคุณสมบัติ Ruby / Python ที่บล็อกการใช้งานการเพิ่มประสิทธิภาพ (เช่นการแคชแบบอินไลน์ ) V8 engine มีหรือไม่?

Python ได้รับการพัฒนาโดย Google ร่วมกันดังนั้นจึงไม่ควรถูกบล็อกโดยสิทธิบัตรซอฟต์แวร์

หรือนี่เป็นเรื่องของทรัพยากรที่ใส่ลงในโครงการ V8 โดย Google


6
การวิปัสสนาและการบรรทุกเกินพิกัดอาจเป็นเรื่องใหญ่ แต่ฉันไม่รู้ว่า JS ดีพอที่จะให้คำตอบที่แท้จริง โครงการ PyPy น่าจะเป็นโอกาสที่ดีที่สุดของ Python ในการเข้าถึงความเร็วของ JS
ncoghlan

11
คุณมีตัวอย่างใด ๆ ที่ PyPy ช้ากว่า V8 ยกเว้นการยิงภาษาคอมพิวเตอร์ซึ่งเป็น bollock ที่สมบูรณ์ หรือมันเป็นเพียงแค่สนามการบิดเบือนความเป็นจริงของ Google?
fijal

3
V8 ยังไม่ถึงกับ Python รอจนกระทั่ง V8 ต้องใช้ข้อมูลจำเพาะ 1.8 Javascript เพื่อทำการเปรียบเทียบที่ดีขึ้น และในตอนนั้นฉันมั่นใจว่าจะมีคนพยายามนำ PyPy ไปใช้กับเอ็นจิ้น V8 แทน Javascript
Michael Dillon

14
ทำไมคุณถึงแน่ใจว่า V8 เร็วกว่า Python หรือ Ruby? อะไรนะ?
jcoffland

6
V8 เร็วกว่า Python / Ruby อย่างแน่นอน ทำเกณฑ์มาตรฐานชนิดใดก็ได้ที่คุณต้องการตั้งแต่ microbenchmark ธรรมดาไปจนถึงแอปพลิเคชันในโลกแห่งความจริงที่ครอบคลุมซึ่งเขียนขึ้นอย่างเป็นธรรมชาติในทั้งสองสภาพแวดล้อม มันเป็นลำดับความสำคัญที่เร็วขึ้นสำหรับการทำงานของภาษาส่วนใหญ่ (เช่นสิ่งที่ไม่ได้รับมอบหมายให้ใช้รหัส C ใน Python)
Hejazzman

คำตอบ:


519

อะไรบล็อก Ruby, Python เพื่อให้ได้ความเร็ว Javascript V8?

ไม่มีอะไร

เอาล่ะเงิน (และเวลาผู้คนทรัพยากร แต่ถ้าคุณมีเงินคุณสามารถซื้อได้)

V8 มีทีมวิศวกรที่ยอดเยี่ยมมีความเชี่ยวชาญสูงและมีประสบการณ์สูง (ซึ่งได้รับค่าตอบแทนสูง) ที่ทำงานในนั้นซึ่งมีประสบการณ์หลายสิบปี (ฉันกำลังพูดถึงทีละคน เอ็นจิ้นสำหรับภาษา OO แบบไดนามิก พวกเขาเป็นคนเดียวกันกับที่สร้าง Sun HotSpot JVM (ท่ามกลางคนอื่น ๆ )

Lars Bak ผู้พัฒนานำได้ทำงานอย่างแท้จริงบน VMs เป็นเวลา 25 ปี (และ VMs เหล่านั้นทั้งหมดนำไปสู่ ​​V8) ซึ่งโดยทั่วไปแล้วเป็นชีวิตของเขา (มืออาชีพ) บางคนที่เขียน Ruby VMs อายุไม่ถึง 25 ปี

มีคุณสมบัติ Ruby / Python ที่บล็อกการใช้งานการเพิ่มประสิทธิภาพ (เช่นการแคชแบบอินไลน์) V8 engine มีหรือไม่

ระบุว่าอย่างน้อย IronRuby, JRuby, MagLev, MacRuby และ Rubinius มีทั้ง monomorphic (IronRuby) หรือการแคชแบบอินไลน์ polymorphic คำตอบก็คือไม่มี

การนำทับทิมสมัยใหม่มาใช้ทำให้เกิดประโยชน์สูงสุดแล้ว ตัวอย่างเช่นสำหรับการปฏิบัติการบางอย่างHashคลาสของ Rubinius นั้นเร็วกว่าของ YARV ตอนนี้สิ่งนี้ไม่ได้ฟังดูน่าตื่นเต้นอย่างยิ่งจนกว่าคุณจะรู้ว่าHashคลาสของ Rubinius นั้นถูกนำไปใช้ในทับทิมบริสุทธิ์ 100% ในขณะที่ YARV นั้นถูกนำไปใช้ใน 100% ที่ปรับด้วยมือซี

อย่างน้อยในบางกรณี Rubinius สามารถสร้างรหัสที่ดีกว่า GCC ได้!

หรือนี่เป็นเรื่องของทรัพยากรที่ใส่ลงในโครงการ V8 โดย Google

ใช่. ไม่ใช่แค่ Google เชื้อสายของรหัสที่มาของ V8 มีอายุ 25 ปีแล้วในตอนนี้ ผู้คนที่ทำงานกับ V8 ยังสร้าง Self VM (จนถึงทุกวันนี้หนึ่งในเครื่องมือประมวลผลภาษา OO แบบไดนามิกที่เร็วที่สุดที่เคยสร้าง), Animorphic Smalltalk VM (จนถึงทุกวันนี้หนึ่งในเครื่องมือการดำเนินการ Smalltalk ที่เร็วที่สุดที่เคยสร้าง), HotSpot JVM (JVM ที่เร็วที่สุดที่เคยสร้างอาจเป็นช่วงเวลา VM ที่เร็วที่สุด) และ OOVM (หนึ่งใน Smalltalk VM ที่มีประสิทธิภาพที่สุดเท่าที่เคยสร้างมา)

ในความเป็นจริง Lars Bak ผู้พัฒนานำของ V8 ทำงานกับทุก ๆคนรวมถึงคนอื่น ๆ


1
เราสามารถมีวรรณกรรมอ้างอิงเกี่ยวกับ "เนื่องจากอย่างน้อย IronRuby, JRuby, MagLev, MacRuby และ Rubinius มีทั้ง monomorphic (IronRuby) หรือการแคชแบบอินไลน์ polymorphic คำตอบก็คือไม่มีเลย" กรุณา?
WDRust

14
SpiderMonkey มีประสิทธิภาพเทียบเท่าดังนั้น Mozilla ทำมาได้อย่างไร? พวกเขาได้ จำกัด มากเงิน ..
ซัลฟอนอับบาส

8
@SalmanPK: มันไม่ใช่ VM เครื่องแรกและมีคนฉลาดที่ทำงานกับ Mozilla ด้วย
Matthieu M.

3
@SalmanPK, miguel: Mozilla สร้าง JS VM อย่างน้อยบางส่วนโดย reverse engineering V8 blog.mozilla.org/dmandelin/2010/09/08/presenting-jagermonkey
Ian

2
@Ian V8 เป็นโอเพ่นซอร์ส (ใบอนุญาต BSD) ดังนั้นไม่จำเป็นต้องกลับวิศวกรเพียงแค่ดูสิ่งที่พวกเขาทำ
dbkk

78

มีแรงผลักดันมากขึ้นในการเพิ่มประสิทธิภาพตัวแปล JavaScript ให้สูงขึ้นซึ่งเป็นสาเหตุที่เราเห็นว่ามีทรัพยากรมากมายที่ถูกใส่เข้าไปใน Mozilla, Google และ Microsoft จาวาสคริปต์จะต้องดาวน์โหลด, แยก, รวบรวม, และทำงานแบบเรียลไทม์ในขณะที่มนุษย์ (มักใจร้อน) กำลังรอคอยมันจะต้องทำงานในขณะที่คนกำลังโต้ตอบกับมันและทำสิ่งนี้ในการควบคุมลูกค้า สภาพแวดล้อมที่อาจเป็นคอมพิวเตอร์โทรศัพท์หรือเครื่องปิ้งขนมปัง มีประสิทธิภาพในการทำงานภายใต้เงื่อนไขเหล่านี้ได้อย่างมีประสิทธิภาพ

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

ข้อได้เปรียบด้านนี้คือเรามีเอนจิ้น JavaScript โอเพนซอร์สประสิทธิภาพสูงสองตัวที่สามารถและถูกนำมาใช้ใหม่สำหรับแอปพลิเคชันทุกประเภทเช่น Node.js


43

ส่วนที่ดีของมันเกี่ยวข้องกับชุมชน Python และ Ruby ส่วนใหญ่ไม่มีการสำรองข้อมูลขององค์กร ไม่มีใครได้รับเงินเพื่อทำงานกับ Python และ Ruby full-time (และพวกเขาไม่ได้รับเงินเพื่อทำงานกับ CPython หรือ MRI ตลอดเวลา) ในทางกลับกัน V8 ได้รับการสนับสนุนจาก บริษัท ไอทีที่มีประสิทธิภาพมากที่สุดในโลก

นอกจากนี้ V8 สามารถเร็วขึ้นได้เพราะสิ่งเดียวที่สำคัญสำหรับคน V8 คือล่าม - พวกเขาไม่มีห้องสมุดมาตรฐานที่จะทำงานไม่ต้องกังวลเกี่ยวกับการออกแบบภาษา พวกเขาแค่เขียนล่าม แค่นั้นแหละ.

มันไม่มีส่วนเกี่ยวข้องกับกฎหมายทรัพย์สินทางปัญญา Python ไม่ได้รับการพัฒนาร่วมกันโดย Google (ผู้สร้างของมันทำงานที่นั่นพร้อมกับผู้ดูแลอื่น ๆ สองสามคน แต่พวกเขาไม่ได้รับเงินเพื่อทำงานกับ Python)

อุปสรรคอีกประการหนึ่งต่อความเร็วของ Python ก็คือ Python 3 การยอมรับมันเป็นข้อกังวลหลักของนักพัฒนาภาษาจนถึงจุดที่พวกเขามีการพัฒนาคุณสมบัติภาษาใหม่อย่างต่อเนื่องจนกระทั่งการใช้งานอื่น ๆ เกิดขึ้น

ในรายละเอียดทางเทคนิคฉันไม่รู้มากเกี่ยวกับ Ruby แต่ Python มีสถานที่มากมายที่สามารถใช้การเพิ่มประสิทธิภาพได้ (และ Unladen Swallow ซึ่งเป็นโครงการ Google เริ่มใช้สิ่งเหล่านี้ก่อนที่จะกัดฝุ่น) นี่คือบางส่วนของการเพิ่มประสิทธิภาพที่พวกเขาวางแผน ฉันเห็นว่า Python ได้รับความเร็ว V8 ในอนาคตหาก JIT a la PyPy ได้รับการติดตั้งสำหรับ CPython แต่ดูเหมือนจะไม่น่าเป็นไปได้สำหรับปีที่จะมาถึงนี้

หลายคนรู้สึกว่า Ruby และ Python จะได้รับประโยชน์อย่างมากจากการลบการล็อคล่ามทั่วโลกที่เกี่ยวข้อง

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


3
ที่จริงแล้วเลื่อนการชำระหนี้ในคุณสมบัติใหม่ได้รับการยกตั้งแต่ Python 3.2 รุ่นล่าสุด
jd

2
+1 แต่จะไม่หยุดการทำงานของคุณสมบัติภาษาใหม่ซึ่งจะทำให้มีเวลามากขึ้นในการเพิ่มประสิทธิภาพหรือไม่
Andrew Grimm

1
@Andrew ถ้าเพียง โฟกัสอยู่ที่การนำ Jython, IronPython และ PyPy มาให้เร็วขึ้นรอให้ไลบรารี่แปลงเป็น Python 3 และ evangelizing Python 3
Rafe Kettler

2
"ระบบคลาสของการวางแนววัตถุเพียงอย่างเดียวเพิ่มน้ำหนักอย่างมาก" - VM Javascript สมัยใหม่เช่น V8 มีคลาสพวกเขาเป็นเพียงความหมายโดยนัย เช่นเดียวกับใน Python คุณไม่จำเป็นต้องพิมพ์ตัวแปรใน JavaScript อย่างชัดเจนคุณไม่จำเป็นต้องพิมพ์คลาสอย่างชัดเจน VM นั้นฉลาดพอที่จะผ่านโค้ดและแตกคลาสได้
Benjamin Gruenbaum

1
ตามที่ฉันเข้าใจ V8 เป็นคอมไพเลอร์ JIT แทนที่จะเป็นล่าม ... ฉันค่อนข้างแน่ใจว่ามีความแตกต่างระหว่างทั้งสอง อาจจะไม่ ... ฉันไม่รู้
ลุค

24

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

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


13

คำถามที่ทำให้เข้าใจผิด V8 เป็นการนำ JIT (การคอมไพเลอร์ทันเวลา) ของ JavaScript และในการใช้งานที่ไม่ใช่เบราว์เซอร์ยอดนิยม Node.js มันถูกสร้างขึ้นรอบเหตุการณ์วนรอบ CPython ไม่ใช่ JIT & ไม่มีเหตุการณ์ แต่สิ่งเหล่านี้มีอยู่ใน Python โดยทั่วไปในโครงการ PyPy - CPython 2.7 (และเร็ว ๆ นี้จะเป็น 3.0+) JIT ที่เข้ากันได้ และมีเซิร์ฟเวอร์ไลบรารีที่มีเหตุการณ์มากมายเช่น Tornado เป็นต้น การทดสอบในโลกแห่งความจริงมีอยู่ระหว่าง PyPy ที่รัน Tornado vs Node.js และความแตกต่างด้านประสิทธิภาพเล็กน้อย


3
+1 สำหรับการกล่าวขวัญทอร์นาโด ในขณะที่ความเร็วเทียบเคียงกับ Node.js gen.engineโมดูลของมันพร้อมกับเครื่องกำเนิด Python และyieldคำสั่ง ( ตั้งแต่ 2.5 !!!สามารถกำหนดการเข้ารหัสแบบอะซิงโครนัสของคุณได้อีกครั้ง
Lukas Bünger

1
ตั้งแต่โพสต์ของคุณ pypy เปิดตัวเวอร์ชันที่รองรับ 3.x ที่เสถียร (และยังคงปรับปรุงการสนับสนุนแน่นอน): morepypy.blogspot.fr/2014/06/pypy3-231-fulcrum.html
Zeograd

9

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

มีเทคนิคที่เป็นที่รู้จักมากมาย (JIT, ตัวรวบรวมขยะสมัยใหม่และอื่น ๆ ) ที่สามารถใช้เพื่อเพิ่มความเร็วในการใช้งาน CPython แต่ทุกอย่างจะต้องมีการเปลี่ยนแปลงอย่างมากกับ API ทำลายส่วนขยายส่วนใหญ่ในกระบวนการ CPython จะเร็วขึ้น แต่สิ่งที่ทำให้ Python น่าสนใจมาก (สแต็คซอฟต์แวร์ที่กว้างขวาง) จะสูญหายไป ในกรณีนี้มีการใช้งาน Python ที่เร็วขึ้นหลายตัว แต่มีแรงฉุดเล็กน้อยเมื่อเทียบกับ CPython


9

เนื่องจากลำดับความสำคัญของการออกแบบที่แตกต่างกันและใช้เป้าหมายกรณีที่ฉันเชื่อ

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

นี่คือตัวอย่าง: การ เรียงลำดับ jQuery ทำให้ iOS Safari หยุด การทำงานค้างที่เกิดจากการใช้งานการโทรตามตัวเลือกมากเกินไป หากตัวเลือกรับโดยใช้จะถูกนำไปใช้ในเนทีฟและจะไม่มีปัญหาดังกล่าวเลย

พิจารณาการสาธิต ray-tracer ที่ใช้บ่อยสำหรับการสาธิต V8 ในโลกหลามมันสามารถนำไปใช้ในรหัสเนทีฟเพราะงูเหลือมให้สิ่งอำนวยความสะดวกทั้งหมดสำหรับส่วนขยายเนทิฟ แต่ใน V8 realm (แซนด์บ็อกซ์ฝั่งไคลเอ็นต์) คุณไม่มีตัวเลือกอื่น ๆ แทนที่จะทำให้ VM มีประสิทธิภาพ [ย่อย] มากที่สุด ดังนั้นทางเลือกเดียวที่เห็นการติดตั้ง ray-tracer โดยใช้รหัสสคริปต์

ลำดับความสำคัญและแรงจูงใจที่แตกต่างกันดังนั้น

ในSciterฉันได้ทำการทดสอบโดยใช้ jQurey core แบบเต็ม ๆ ในงานจริงเช่นScIDE (IDE ที่ทำจาก HTML / CSS / Script) ฉันเชื่อว่าโซลูชันดังกล่าวทำงานได้ดีขึ้นอย่างมากจากนั้นปรับแต่ง VM ใด ๆ


5

ขณะที่คนอื่น ๆ ได้กล่าวถึงงูหลามมีคอมไพเลอร์ JIT performant ในรูปแบบของPyPy

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

ฉันไม่ได้รับข้อสรุปที่ชัดเจนใด ๆ แต่ PyPy เป็นหนึ่งในการติดตั้งใช้งานที่เร็วที่สุดที่ฉันได้รับดีกว่าโหนด CPython นั้นกลับมาอยู่ในอันดับที่ช้าที่สุด


5

คำสั่งไม่เป็นความจริง

เช่นเดียวกับ V8 เป็นเพียงการนำไปใช้สำหรับ JS, CPython เป็นเพียงการนำไปใช้งานสำหรับ Python Pypy มีการแสดงการจับคู่ของ V8

นอกจากนี้ยังมีปัญหาของประสิทธิภาพการรับรู้: เนื่องจาก V8 ไม่มีการบล็อกเลยทีเดียว Web dev นำไปสู่โครงการที่มีประสิทธิภาพมากขึ้นเนื่องจากคุณบันทึกการรอคอยของ IO และ V8 ส่วนใหญ่จะใช้สำหรับการพัฒนาเว็บโดยที่ IO เป็นกุญแจสำคัญดังนั้นพวกเขาจึงเปรียบเทียบกับโครงการที่คล้ายกัน แต่คุณสามารถใช้ Python ในหลาย ๆ พื้นที่นอกเหนือจาก web dev และคุณยังสามารถใช้ส่วนขยาย C สำหรับงานจำนวนมากเช่นการคำนวณทางวิทยาศาสตร์หรือการเข้ารหัสและข้อมูลกระทืบด้วย perfos ที่เห็นได้ชัด

แต่ในเว็บโครงการ Python และ Ruby ที่เป็นที่นิยมที่สุดกำลังปิดกั้น โดยเฉพาะอย่างยิ่ง Python ที่มีมาตรฐาน WSGI แบบซิงโครนัสและเฟรมเวิร์กอย่าง Django ที่มีชื่อเสียงนั้นมีพื้นฐานมาจากมัน

คุณสามารถเขียน Python แบบอะซิงโครนัส (เช่น Twisted, Tornado, gevent หรือ asyncio) หรือ Ruby แต่มันก็ไม่ได้ทำบ่อย เครื่องมือที่ดีที่สุดยังคงปิดกั้น

อย่างไรก็ตามนี่เป็นสาเหตุบางประการที่ทำให้การใช้งานเริ่มต้นใน Ruby และ Python ไม่รวดเร็วเท่ากับ V8

ประสบการณ์

เหมือนกับที่Jörg W Mittag ชี้ให้เห็นพวกที่ทำงานกับ V8 เป็นอัจฉริยะ VM Python นั้นเป็นกลุ่มคนที่มีความหลงใหลดีมากในหลาย ๆ โดเมน แต่ไม่ได้มีความเชี่ยวชาญในการปรับแต่ง VM

ทรัพยากร

รากฐานของซอฟต์แวร์ Python มีเงินน้อยมาก: น้อยกว่า 40kต่อปีในการลงทุนใน Python นี่มันบ้าไปแล้วเมื่อคุณคิดว่าผู้เล่นรายใหญ่เช่น Google, Facebook หรือ Apple ต่างก็ใช้ Python แต่มันเป็นความจริงที่น่าเกลียด: งานส่วนใหญ่ทำฟรี ภาษาที่ให้พลัง Youtube และมีอยู่ก่อน Java ถูกทำด้วยมือโดยอาสาสมัคร

พวกเขาเป็นอาสาสมัครที่ชาญฉลาดและมีความทุ่มเท แต่เมื่อพวกเขาระบุว่าพวกเขาต้องการน้ำผลไม้มากขึ้นในสาขาพวกเขาไม่สามารถขอ 300k เพื่อจ้างผู้เชี่ยวชาญชั้นยอดสำหรับความเชี่ยวชาญนี้ พวกเขาต้องมองหาใครสักคนที่จะทำมันฟรี

ในขณะที่ใช้งานได้หมายความว่าคุณจะต้องระมัดระวังเกี่ยวกับลำดับความสำคัญของคุณ ดังนั้นตอนนี้เราต้องดูที่:

วัตถุประสงค์

แม้จะมีคุณสมบัติที่ทันสมัยล่าสุดการเขียน Javascript ก็แย่ คุณมีปัญหาในการกำหนดขอบเขตคอลเลกชันน้อยมากการจัดการสตริงและอาร์เรย์ที่น่ากลัวแทบไม่มี stdlist นอกเหนือจากวันที่คณิตศาสตร์และ regexes และไม่มีน้ำตาล syntactic แม้สำหรับการดำเนินการทั่วไป

แต่ใน V8 คุณมีความเร็ว

นี่เป็นเพราะความเร็วเป็นเป้าหมายหลักของ Google เนื่องจากเป็นคอขวดสำหรับการแสดงผลหน้าเว็บใน Chrome

ใน Python การใช้งานเป็นเป้าหมายหลัก เพราะมันแทบจะไม่เคยเกิดปัญหาคอขวดในโครงการเลย ทรัพยากรที่ขาดแคลนที่นี่คือเวลาของนักพัฒนา มันเหมาะสำหรับนักพัฒนา


1

เนื่องจากการใช้งาน JavaScript ไม่จำเป็นต้องกังวลเกี่ยวกับความเข้ากันได้ย้อนหลังของการเชื่อมโยงของพวกเขา

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

ใช้ OTOH Ruby (ส่วนใหญ่) ที่ฝั่งเซิร์ฟเวอร์ ส่วนขยาย ruby ​​ที่เป็นที่นิยมจำนวนมากถูกเขียนเป็นการรวม C (พิจารณาไดรเวอร์ RDBMS) กล่าวอีกนัยหนึ่งทับทิมจะไม่ประสบความสำเร็จหากไม่รักษาความเข้ากันได้

วันนี้ความแตกต่างยังคงมีอยู่บ้าง นักพัฒนาที่ใช้ node.js บ่นว่าเป็นการยากที่จะรักษาส่วนขยายดั้งเดิมไว้ข้างหลังได้เนื่องจาก V8 เปลี่ยนแปลง API เมื่อเวลาผ่านไป (ซึ่งเป็นหนึ่งในสาเหตุที่ node.js ถูกแยก) IIRC ruby ​​ยังคงใช้วิธีอนุรักษ์นิยมมากกว่าในแง่นี้


1

V8 นั้นรวดเร็วเนื่องจาก JIT, Crankshaft, ตัวพิมพ์เล็กและรหัสที่ปรับแต่งข้อมูล ตัวชี้ที่ติดแท็ก, การติดแท็ก NaN ของคู่ และแน่นอนว่ามันจะทำการปรับให้เหมาะสมของคอมไพเลอร์ปกติที่อยู่ตรงกลาง

เอ็นจิ้น ruby, python และ perl ธรรมดาไม่ได้ทำสิ่งเหล่านี้เลย

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

แบ็กเอนด์ที่รู้จักกันดีที่สุดเช่น pypy หรือ jruby ยังคงได้รับความทุกข์ทรมานจากเทคนิค over-engineering ที่หลากหลาย


ดูเพิ่มเติมที่github.com/rahul080327/medusa
GünterZöchbauer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.