เหตุใดจึงไม่มีภาษาสคริปต์ฝั่งไคลเอ็นต์อื่น ๆ สำหรับเว็บไซต์ [ปิด]


35

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


1
ดูคำถามนี้ใน Stack Overflow: stackoverflow.com/questions/2872037/…
Corey

1
คำถามของคุณคือเหตุผลที่แม่นยำของ Google ทำGWT
jhocking

1
ฉันเชื่อว่า DOM API นั้นให้การสนับสนุนหลายภาษา สิ่งที่มันคือ JS เหมาะกับความท้าทายอย่างแท้จริง มันทำให้ปกติเหมือนไม่มีใครทำธุรกิจและฟังก์ชั่นชั้นหนึ่งมีขนาดใหญ่มากในกระบวนทัศน์ที่ขับเคลื่อนด้วยเหตุการณ์อย่างหนัก สิ่งที่ลงมาจริงๆคือไม่มีใครต้องการให้ MS ตัดสินใจและไม่มีใครคิดอะไรที่ดีไปกว่า JS นอกจากนี้ Java Applets ยังเป็นคนง่อยจริงๆ
Erik Reppen

คำตอบ:


33

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

ภาษาสามารถนำไปใช้กับ Javascript ได้เช่นกัน Javascript นั้นดีพอที่จะทำให้ภาษาอื่นสามารถใช้งานได้ และมีตัวอย่างมากมายของเรื่องนี้อยู่แล้ว


3
+1 - สำหรับชี้ให้เห็นว่า JavaScript เป็นภาษาที่มีประสิทธิภาพที่สามารถใช้เป็นนามธรรมสำหรับภาษาอื่น ๆ มันจะเป็นโครงการที่น่าสนใจที่จะเขียนส่วนขยายของ Firefox ที่จะเรียกใช้ฝั่งไคลเอ็นต์ C ++ หรือ Java! <script type="text/cpp" src="test.cpp"></script>.
jmort253

2
@ jmort253 ลองดูที่ลูกค้าพื้นเมือง
dan_waterworth

Native Client มีความน่าสนใจอย่างแน่นอน แต่หาก Mozilla ไม่ใช้เช่นกันจะไม่มีแรงฉุดใด ๆ ล่าสุดฉันตรวจสอบพวกเขายังไม่พร้อมที่จะใช้มัน
nkassis

1
ฉันพบ Gestalt ~ สองสามปีก่อน: gestalt.codeplex.com มันเป็นตัวอย่างที่ดีของการสร้างภาษาสคริปต์อื่น ๆ ที่ด้านบนของ Javascript
Jim Schubert

2
อีกตัวอย่างหนึ่ง: Google Web Toolkit ? Java ได้รับการรวบรวมเป็น JavaScript
MarkJ

21

JavaScript เป็นมาตรฐานแบบพฤตินัยและได้รับมาตั้งแต่ปี 1996 การเป็นมาตรฐานเพียงอย่างเดียวเนื่องจากไม่มีการแข่งขันที่ไม่ยุติธรรม แต่ฉันไม่เคยได้ยินเรื่องร้องเรียนจำนวนมากเกี่ยวกับสาเหตุที่ไม่มีภาษาอื่นรวมอยู่ด้วย

การเพิ่มภาษา "มาตรฐาน" อีกภาษาส่งเสริมปัญหาความสนุกเล็กน้อยทุกประเภท

  • พวกเขาจะทำงานกับภาษาอื่น ๆ ได้อย่างไร?
  • DOM จะแชร์หรือไม่
  • สคริปต์ที่เขียนในทั้งสองยังคงทำงานได้ไหม
  • ย้ายห้องสมุดไปยังทั้งสอง

8
จริงๆแล้วฉันคิดว่า JavaScript เป็นภาษาที่ใช้ใน Gecko ของ Mozilla ใน IE เรามี JScript เบราว์เซอร์อื่น ๆ ส่วนใหญ่ใช้บางอย่างที่มากหรือน้อยตามข้อกำหนด ECMAScript ภาษาทั้งหมดเหล่านี้มีไว้เพื่อความเรียบง่ายที่เรียกว่า 'JavaScript' แต่ในความเป็นจริงพวกเขาแตกต่างกัน
Mchl

1
คุณสามารถมีหลายภาษาที่สร้างรหัสไบต์เดียวกัน ดูที่ JVM - Groovy, Java, Scala, Clojure, jRuby สามารถคอมไพล์โดยตรงกับ JVM bytecode ด้วยวิธีนี้พวกเขาจะแบ่งปัน DOM api เดียวกันและสามารถทำงานร่วมกันได้ แม้ว่าจะเป็นการยากที่จะนำไปใช้กับ JavaScript VM แทนการตีความ
David Sergey

21

คิดถึงความไม่สอดคล้องระหว่างเบราว์เซอร์ที่สนับสนุนจาวาสคริปต์เพียงอย่างเดียว ทีนี้ลองคิดดูว่ามันจะเป็นอย่างไรถ้ามีภาษามากขึ้น


5
ใช่แล้วมี VBScript ฝั่งไคลเอ็นต์ ... uugh, shudder
ocodo

1
+1 ฉันคิดว่าหัวหน้าของเราจะระเบิดถ้าเรามีภาษาย่อยบางส่วนที่จะจดจำสำหรับแต่ละเบราว์เซอร์หลักและเวอร์ชันของพวกเขา คำตอบที่ดี.
jmort253

4
นี่อาจเป็นการวางยา แต่การสนับสนุนJavaScriptของเบราว์เซอร์[ECMAScript] นั้นมีความสอดคล้องกันอย่างมากตั้งแต่เริ่มต้น สิ่งที่ไม่สอดคล้องกันคือการใช้งาน DOM (และวิธีการที่เกี่ยวข้อง) จากมุมมองเชิงปฏิบัติ (และประวัติ) จริงมันยากที่จะแยกทั้งสอง - เนื่องจากการใช้งานจริงของ JS เท่านั้นคือการจัดการ DOM ในเบราว์เซอร์ - แต่ด้วยการเพิ่มขึ้นของ JS ฝั่งเซิร์ฟเวอร์ (สิ่งต่าง ๆ เช่น NodeJS) สิ่งนี้จริง ๆ แล้วกลายเป็นความแตกต่างที่สำคัญ
josh3736

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

1
จอชพูดถูก มันเป็นที่ที่คุณเสียบเข้าไปในเบราว์เซอร์ของแต่ละแนวคิดว่าสิ่งที่ควรจะแสดงผลและเข้าถึงได้โดย JS ว่าสิ่งที่น่าเกลียด แต่ IE อย่างน้อยที่สุดก็เข้าร่วมกับปัญหากรรมสิทธิ์ API ที่ยาวนานมานานที่หน้า (แม้ว่าจะยังคง ล้าหลังล่าสุดในทุกเรื่องเนื่องจากการตัดสินใจของ MS ในการเชื่อมโยงเบราว์เซอร์ของพวกเขาไปยังตัวนำทางไฟล์ - แจ็คแอส)
Erik Reppen

6

เบราว์เซอร์จะต้องได้มาตรฐานเพื่อให้สิ่งที่คุณพัฒนาใช้ได้ทุกที่บนทุกเบราว์เซอร์

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

จาวาสคริปต์ที่เป็นมากภาษาที่มีความยืดหยุ่นมีความจำเป็นก็สามารถทำงานได้ก็สามารถ OOP (หลังจากที่แฟชั่นกับต้นแบบ) และมันถูกตีความ ขณะนี้มีเครื่องมือที่ดีเช่นใน Chrome ก็สามารถทำสิ่งที่ดีพอสมควร ภาษาพิเศษจะตั้งค่าสิ่งต่าง ๆ กลับมาที่นี่ดูที่ VBScript, IE เท่านั้นและดังนั้นสิ่งที่เขียนในนั้นจะถูกผูกไว้กับเบราว์เซอร์และแพลตฟอร์มเฉพาะฝันร้าย


2
จุดสำคัญที่นี่คือ "ด้วยเครื่องมือที่เหมาะสมเช่นใน Chrome" การทำอะไรก็ตามแม้แต่การเก็บภาษีอย่างนุ่มนวลก็ทำให้ IE8 เริ่มที่จะกระเด้งเหมือนขาหักในขณะที่ Firefox รุ่นล่าสุดและ Chrome มาตลอดตั้งแต่ที่ฉันเคยใช้มา (นี่คือเหตุผลที่ฉันเปลี่ยน infact) ข้ามโดยไม่พลาดจังหวะใด ๆ
Matthew Scharley

1
@ Matthew Scharley: IE มักจะซบเซาจริง ๆ แล้วดูเหมือนว่าจะแย่ลงทุกรุ่น พวกเขาต้องการอัพเกมของพวกเขาหรือพวกเขาจะออก เหตุผลเดียวที่ IE มีการระงับคือการรวมระบบปฏิบัติการตอนนี้พวกเขาต้องวางตัวเลือกในการใช้งานครั้งแรกซึ่งลดลงมาก
Orbling

"มันสามารถเป็น OOP" ... มันเป็น OOP! การสืบทอดไม่ใช่สิ่งที่นิยาม OOP วัตถุคือ
KaptajnKold

@ KaptajnKold: นั่นเป็นเรื่องของการถกเถียงในแวดวงวิชาการอย่างน่าประหลาดใจ ฉันยอมรับว่า JS มีความสามารถใน OOP เนื่องจากมีวัตถุพวกเขาไม่ได้ใช้บ่อยเกินไป ระบบต้นแบบนั้นมีความแตกต่างกับรสชาติ OOP ทั่วไปเช่นกันซึ่งจะเป็นการลบมันออกจากคำจำกัดความมาตรฐานของ "ภาษา OOP" เช่นเดียวกับภาษาส่วนใหญ่มันขึ้นอยู่กับว่าคุณใช้มันเมื่อฉันใช้มันมันเป็น OOP
Orbling

3

แทนที่จะสร้างสิ่งเหล่านี้ลงในเบราว์เซอร์ผู้ขายต้องการสร้างปลั๊กอินเบราว์เซอร์ที่ไม่น่าดู - Java, Flash, Silverlight และอื่น ๆ สิ่งนี้รับประกันความสอดคล้องข้ามแพลตฟอร์ม


มันไม่เกี่ยวกับการรับประกันความสอดคล้องข้ามแพลตฟอร์มมากเท่ากับการรับประกันการควบคุม ในขณะที่คุณควบคุมปลั๊กอินและคุณไม่ต้องตอบใครเลย
jhocking

เมื่อเทียบกับการใช้ javascript สกปรกอย่างรวดเร็วปลั๊กอิน "clunky" นั้นดีกว่า ฉันเคยรู้สึกในแง่ลบเกี่ยวกับการดาวน์โหลดเบราว์เซอร์ - ปลั๊กอินทั้งหมด แต่แน่นอนว่าเปิดกว้างกว่า "จาวาสคริปต์ที่ใช้งานทั่วไป"
Milind R

2

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


ค่อนข้างมากในสิ่งที่ฉันจะพูด ความแตกต่างที่สำคัญ (ในการสนทนานี้) ระหว่างภาษาฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์คือเบราว์เซอร์ต้องใช้ภาษาฝั่งไคลเอ็นต์
jhocking

2

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

ตัวอย่างเช่น Java เป็นมาตรฐานที่กำหนดไว้อย่างดีมาก โดยพื้นฐานแล้วสิ่งที่คุณต้องทำคือการเปิดเผย DOM เบราว์เซอร์เป็น Java API และเรียกใช้ Java Virtual Machine (JVM) ภายในเว็บเบราว์เซอร์ของคุณ คุณสามารถระบุรหัสสคริปต์ได้ว่าจะต้องส่งในรูปแบบของไฟล์ JAR ที่คอมไพล์และเซ็นชื่อหรือเป็นซอร์สโค้ด JavaScript หากเบราว์เซอร์พบกับจาวาสคริปต์ก็สามารถเรียกใช้ผ่านล่ามเฉพาะ (เช่นเดียวกับทุกวันนี้) หรือผ่านแรดที่อยู่ด้านบนของ JVM หากพบไฟล์ jar มันจะสร้างตัวโหลดคลาสใหม่และแซนด์บ็อกซ์ความปลอดภัยโหลด java bytecode ลงในหน่วยความจำและดำเนินการ สิ่งนี้จะเข้ากันได้อย่างสมบูรณ์แบบย้อนหลังกับหน้าเว็บที่มีอยู่และจะช่วยให้เบราว์เซอร์ที่มีจังหวะเดียวเพื่อรองรับหลายภาษาที่ทำงานบน JVM

ข้อดีอื่น ๆ :

  1. JVM ได้รับประโยชน์จากทศวรรษของการปรับปรุงประสิทธิภาพ ตอนนี้มันเร็วมากเสถียรและเป็นผู้ใหญ่แล้ว ฉันพนันได้เลยว่าคุณจะเห็นการปรับปรุงประสิทธิภาพครั้งใหญ่มากกว่าจาวาสคริปต์ที่ถูกตีความ
  2. เมื่อแอปฝั่งไคลเอ็นต์มีขนาดใหญ่ขึ้นและซับซ้อนมากขึ้นประโยชน์ของภาษาที่มีโครงสร้างและพิมพ์เช่น Java และ Scala จะเพิ่มขึ้น
  3. คุณจะสามารถเข้าถึงมัลติเธรดที่แท้จริงและผ่าน Scala ไลบรารีคอลเลกชันที่ได้รับการปรับให้เหมาะสำหรับการประมวลผลแบบมัลติคอร์
  4. คุณสามารถใช้ไลบรารีจาวาโอเพนซอร์สจำนวนหนึ่งพันภายในเบราว์เซอร์
  5. ผ่านห้องสมุดเช่น openGL เบราว์เซอร์สามารถเข้าถึงกราฟิกขั้นสูงและความสามารถในการคำนวณกราฟิกการ์ด
  6. หากคุณมีจาวาที่ทำงานอยู่บนฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์คุณจะได้รับประโยชน์เพิ่มเติมจากการสื่อสารระหว่างไคลเอนต์ - เซิร์ฟเวอร์ผ่านการบีบอัดอย่างต่อเนื่องและออบเจ็กต์ต่อเนื่องออบเจ็กต์แบบกราฟวัตถุ = การโหลดเร็วขึ้น

1
คุณสามารถเรียกใช้รหัส JVM ได้แล้ว มันเรียกว่าแอปเพล็ต java
Raynos

1

ฉันเชื่อว่าจาวาสคริปต์จะได้รับพื้นฐานมากขึ้นในฐานะภาษามาตรฐานสำหรับเว็บ เราเห็นการเพิ่มขึ้นของ JavaScript ฝั่งเซิร์ฟเวอร์ นี่คือตัวอย่างของการใช้งานภาษาที่มีประสิทธิภาพนี้บนเซิร์ฟเวอร์:

  • POW Web Server SJS - JavaScript ฝั่งเซิร์ฟเวอร์สำหรับ POW Web Server ซึ่งทำงานเป็นส่วนขยายของ Firefox หรือเป็นแอปพลิเคชัน XULRunner SJS มีบทบาทคล้ายกับ PHP ใน Apache ซึ่งสามารถเชื่อมต่อกับฐานข้อมูลและสร้างเนื้อหาฝั่งไคลเอ็นต์

  • NodeJS - JavaScript ฝั่งเซิร์ฟเวอร์ที่ใช้โมเดลที่อิงกับเหตุการณ์ มันถูกสร้างขึ้นโดยใช้ Google ของJavaScript เครื่องยนต์ NodeJS ถูกโฆษณาว่าเป็นเครื่องมือสำหรับการสร้างโปรแกรมเครือข่ายที่ปรับขนาดได้ เว็บเซิร์ฟเวอร์ "Hello World" สามารถเขียนได้ใน 6 บรรทัดสั้น ๆ !

  • Jaxer - เซิร์ฟเวอร์ JavaScript ที่ตีความบล็อคสคริปต์ทั้งหมดด้วยrunat="server"JavaScript ฝั่งเซิร์ฟเวอร์ เว็บแอปพลิเคชันทั้งหมดสามารถเขียนได้ใน JavaScript

  • Rhino - JavaScript สำหรับ Java - Mozilla สร้างการใช้งาน JavaScript ฝั่งเซิร์ฟเวอร์นี้ซึ่งทำงานบน Java มันเป็นแนวคิดที่คล้ายคลึงกับQuerces PHP สำหรับ Java , Jython, JRuby และ abstractions อื่น ๆ ของภาษาอื่น ๆ ที่ทำงานบน JVM โดยทั่วไปแล้ว Rhino จะใช้เพื่อฝัง JavaScript ลงใน Java เพื่อให้เครื่องมือการเขียนสคริปต์แก่ผู้ใช้ แต่ยังสามารถใช้เพื่อย้ายรหัสฝั่งไคลเอ็นต์ไปยังเซิร์ฟเวอร์โดยไม่ต้องเขียนตรรกะทางธุรกิจในภาษาอื่น!

  • JQuery Claypool - เฟรมเวิร์ก JavaScript ฝั่งเซิร์ฟเวอร์โดยใช้พลังของ JQuery บนเซิร์ฟเวอร์ เจ๋งมาก! มันได้รับการพัฒนาโดยใช้เบราว์เซอร์ EnvJs ฝั่งเซิร์ฟเวอร์ของเบราว์เซอร์

  • EnvJs - เบราว์เซอร์ที่ไม่มีหัวที่สร้างขึ้นบน Rhino

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

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


+1 สำหรับการชี้ให้เห็นว่า JavaScript ไม่ได้ถูก จำกัด อยู่ที่เบราว์เซอร์
Gary Rowe

1

มีหลายตัวอย่างของเครื่องมือที่จะรวบรวมภาษาอื่น ๆ เพื่อจาวาสคริปต์รวมถึง Haskel, Lisp และ Python (อาจเป็นอื่น ๆ ) ดังนั้นหากคุณต้องการทำงานในหนึ่งในภาษาเหล่านั้นคุณสามารถทำได้

และฉันคิดว่าอาจารย์คนหนึ่งของฉันจากมหาวิทยาลัยเขียนแผนการใช้งานใน Javascript ดังนั้นถ้าคุณชอบแบบแผนคุณก็สามารถทำได้เช่นกัน


0

ผู้คนต่างพยายามแก้ปัญหาการขาดความหลากหลายในตัวด้วยสองวิธี: การใช้ปลั๊กอินเช่นแอปเพล็ตแฟลชหรือจาวาและการสร้างเลเยอร์ที่ใช้จาวาสคริปต์เป็น "รหัสเครื่อง" เช่น jquery หรือ google web toolkit หากมีการพัฒนารูปแบบใหม่ที่เป็นที่นิยมมากพอคนก็จะหาวิธีที่จะได้รับมัน

เพิ่งทราบว่าคุณสร้าง. net runtime ใน javascript และมันเคยเป็นที่นิยมวงการบางวงจะสาปแช่งชื่อของคุณบนอินเทอร์เน็ตตลอดไป


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