พื้นฐานทางประวัติศาสตร์ของการใช้ Javascript ในการเขียนโปรแกรมเว็บคืออะไร?


9

ฉันมาจากภูมิหลังทางวิทยาศาสตร์ที่เราใช้ Python บ่อยๆ

ตอนนี้ฉันเริ่มที่จะเริ่มต้นด้วยการพัฒนาเว็บฉันพบว่าตัวเองสงสัยอยู่ตลอดเวลาว่าทำไม JavaScript เป็นภาษาฝั่งไคลเอ็นต์หลักบนเว็บ

ความเด่นของ JavaScript คืออุบัติเหตุในอดีตหรืออย่างอื่นหรือไม่ นอกจากนี้ฉันอยากรู้อยากเห็นหากมีอุปสรรคใด ๆ ในการรวม Python เข้ากับสคริปต์ฝั่งไคลเอ็นต์


สิ่งนี้ต้องการความสนใจจากผู้ดูแลตามmeta.programmers.stackexchange.com/questions/363/หรือไม่?
Rein Henrichs

@Rein - คุณทำได้vote to closeถ้าคุณรู้สึกว่านี่ไม่ใช่หัวข้อ หากคนอื่นรู้สึกแบบเดียวกันไม่ว่าจะเป็นพวกเขาหรือผู้ดำเนินรายการก็จะทำตามผู้นำของคุณ
jmort253

@ jmort253 (บางทีฉันควรย้ายไปยังเมตาดาต้า) ไม่มีความเห็นเป็นเอกฉันท์ในเธรดที่เชื่อมโยงและฉันสับสน :(
Rein Henrichs

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

คำตอบ:


16

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

Internet Explorer ใช้งาน JavaScript ในลักษณะที่อนุญาตให้เอ็นจิ้นสคริปต์แบบเสียบได้ (มาพร้อมกับ VBScript และ JScript) หากคุณต้องการ (เหมือนที่ฉันทำ) เพื่อเขียนรหัสของคุณใน PerlScript หรือ PythonScript คุณทำได้ แต่ลูกค้าของคุณทั้งหมดต้องติดตั้งภาษาสคริปต์นั้นและพวกเขาต้องใช้ IE คุณสามารถทำสิ่งนี้กับโครงการภายใน แต่ไม่มีทางที่มันจะทำงานบนอินเทอร์เน็ต


อย่างอื่นที่ฉันพบที่น่าสนใจเป็นโครงการที่จะคอมไพเลอร์เขียนหลามเพื่อ javascript, เช่นชุดนอนpyjs.org
rd108

"Pajamas เป็นแพลตฟอร์มการพัฒนาแอปพลิเคชันอินเทอร์เน็ตที่สมบูรณ์ (RIA) สำหรับทั้งเว็บและเดสก์ท็อปมันมีคอมไพเลอร์ Python-to-Javascript, เฟรมเวิร์ก AJAX และ Widget Set API ชุดนอนเริ่มชีวิตเหมือน Python ของ Google Web Toolkit คอมไพเลอร์ Java-to-Javascript อ่านคำถามที่พบบ่อยและรายการคุณสมบัติ "
rd108

มีคอมไพเลอร์บางอย่างให้กับจาวาสคริปต์มากมาย CoffeeScript, TypeScript, ClojureScript, LispyScript และอื่น ๆ
Florian Margaine

7

JavaScript ถูกสร้างขึ้นครั้งแรกโดย Brendan Eich มันถูกส่งครั้งแรกพร้อมกับการเปิดตัวเบต้าของ Netscape Navigator 2.0 ในเดือนกันยายน 2538 เป็น LiveScript แต่ถูกเปลี่ยนชื่อ JavaScript ในการประกาศร่วมกับ Sun Microsystems ในเดือนธันวาคม 1995 มันเป็นเพียงภายหลัง (ในปี 1996) ที่ JavaScript ถูกส่งไปยัง Ecma International ECMAScript มาตรฐาน

การครอบงำตลาดในปัจจุบันส่วนใหญ่เกิดจากแรงเฉื่อยทางประวัติศาสตร์

ที่มา: http://en.wikipedia.org/wiki/JavaScript#History


2

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


1

ฉันแน่ใจว่ามีส่วนเกี่ยวข้องกับประวัติศาสตร์มากมาย

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


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

@Andrea - คุณสามารถยืนยันว่าภาษานั้นมีไลบรารีมาตรฐานเท่ากับไวยากรณ์และซีแมนทิกส์ Javascript ไม่มีไลบรารี่มาตรฐานสำหรับไฟล์ I / O และเป็นไปโดยเจตนาเพื่อเหตุผลด้านความปลอดภัย Python มีไลบรารี่มาตรฐานสำหรับไฟล์ I / O และอื่น ๆ อีกมากมายที่อาจพิจารณาถึงปัญหาด้านความปลอดภัย ไม่อนุญาตสิ่งเหล่านี้และคุณไม่ได้ติดต่อกับ Python อีกต่อไป นานมาแล้วงูหลามมีกล่องทราย - ฉันจำได้ว่ามันอยู่ที่นั่นประมาณ 1.5 - แต่ถูกทิ้งไว้ IIRC เพราะมันไม่ได้ใช้งานเพียงพอและอยู่ห่างไกลจากอากาศแน่น
Steve314

กำลังเขียนไลบรารี่มาตรฐานสำหรับ I / O ใน Javascript แน่นอนสิ่งเหล่านี้ไม่สามารถใช้ได้ในเบราว์เซอร์ ฉันแค่บอกว่าถ้า Python ถูกนำไปใช้ในเบราว์เซอร์ห้องสมุดที่ไม่ปลอดภัยจะไม่สามารถใช้ได้ และสันนิษฐานว่าคุณจะไม่พลาดพวกเขาเพราะพวกเขาไม่ได้ตั้งใจที่จะใช้ในเว็บไซต์
เอนเดรีย

-2

"ความเด่นของ JavaScript คืออุบัติเหตุในอดีตหรืออย่างอื่นใช่หรือไม่"

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

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

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

ในตอนท้ายของรุ่งอรุณของเว็บมันเป็นภาษาเดียวที่จริงจังกับภารกิจในการทำให้เบราว์เซอร์เป็นปกติผ่านสงครามเบราว์เซอร์จริงโดยที่ Netscape และ IE พยายามทำสิ่งต่าง ๆ ตามจุดประสงค์ตามด้วยเบราว์เซอร์มากกว่า 10 ปี การสู้รบที่ IE เพิ่งทำสิ่งที่แตกต่างกันเพราะ MS ขี้เกียจและยึดมั่นในตัวเองในการต่อต้านการแข่งขันที่โง่เขลาอย่างถูกต้องทำให้เกิดเบราว์เซอร์ซบเซาและตอนนี้โลกที่เบราว์เซอร์เริ่มเห็นด้วยกับข้อกำหนดทั่วไปเดียวกันใน HTML CSS และ DOM API กับ IE เป็นเพียง 2-3 ปีที่ผ่านมาการพัฒนาล่าสุดมากกว่า 10 เนื่องจาก Google และ Mozilla busting out compilers JIT ที่ทำให้ตัวเลขประสิทธิภาพ IE ดูดังนั้นน่าสงสาร MS น่าอับอายในที่สุดทันสมัยเบราว์เซอร์แช่งของพวกเขาอย่างถูกต้องIE9 เป็นรายแรกที่ให้การสนับสนุน DOM API อย่างจริงจังเป็นระดับที่ Netscape สนับสนุนในปี 2000

JS มีการแข่งขันในรูปแบบของ Java Applets และ Adobe ActionScript สำหรับ Flash ที่เกี่ยวกับมันในหน้าคู่แข่งร้ายแรง MS พยายามที่จะผลักดัน VB แต่ล้มเหลวอย่างน่าสังเวชเพราะ ... ดี ... VB นอกจากนี้กรรมสิทธิ์ จริงๆแล้วมีเว็บไซต์ Flash มากกว่าที่คนส่วนใหญ่รู้ คุณไม่สามารถค้นหาสิ่งที่ไร้สาระด้วยเครื่องมือค้นหา Applets ทำสิ่งของตนเองและมันก็น่าเกลียด จริงน่าเกลียด JS เป็นภาษาเดียวที่จัดการกับปัญหาการทำงานในบริบทของเบราว์เซอร์หลาย ๆ อันโดยผู้ที่ไม่เห็นด้วยกับใครที่ตั้งค่ารายละเอียดที่พวกเขาควรจะจับคู่ด้วย

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

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


คุณพูดถึง Scheme สองครั้งโดยที่ไม่เคยพูดว่า JS เกี่ยวข้องกับ Scheme อย่างไร แน่นอนคุณไม่คิดว่า JS มีมาโคร, S-expressions, การเรียกซ้ำแบบหาง, การต่อเนื่องหรือคุณลักษณะที่แตกต่างอื่น ๆ ของ Scheme - คุณล่ะ?
Gabe

@Gabe ตรวจสอบบล็อกข้อความที่ 4 การปิดการพิมพ์แบบไดนามิกและฟังก์ชั่นชั้นหนึ่งเป็นเรื่องที่ค่อนข้างดี ความจริง JS ใช้ไวยากรณ์เหมือน c จะไม่อนุญาตให้ใช้มาโคร Scheme ไม่ใช่สำเนาของ Scheme แบบฟีเจอร์ต่อคุณลักษณะ แต่ได้รับอิทธิพลจากมันอย่างแน่นอน
mike30

ดังนั้นการปิดและการพิมพ์แบบไดนามิกทำให้ภาษาเหมือนโครงการหรือไม่ นั่นหมายความว่า C # เป็นแบบแผนหรือไม่ แล้ว Ruby, Python และ Perl ล่ะ? และทำไมโครงการถึงมากกว่า Lisp หรือภาษาอื่น ๆ ที่คล้ายกัน?
Gabe

@Gabe ฉันไม่มีความเชี่ยวชาญ Scheme แต่ในวิกิพีเดียแบบสบาย ๆ ฉันจะบอกว่าคอมโบของคำศัพท์ขอบเขตฟังก์ชั่นชั้นหนึ่งและการปิดเป็นสามอย่างที่ทำให้ JS เข้าใกล้ Scheme มากกว่าที่เป็นจาวา ไม่เช่นนั้นฉันก็แค่รับเอาคำพูดของเบรนแดนอีชมาฟังและฟังก์ชั่นชั้นหนึ่งที่เหมาะสมนั้นเป็นจุดยืนที่สำคัญ
Erik Reppen

ตกลงดังนั้น JS มีการปิด (ซึ่งฉันเชื่อว่าหมายถึงฟังก์ชั่นชั้นหนึ่งและการกำหนดขอบเขตคำศัพท์) และการพิมพ์แบบไดนามิกเช่น Scheme เนื่องจาก C # มีการปิดการพิมพ์แบบไดนามิกและรูปแบบ S-expressions ที่ จำกัด หมายความว่า C # มีลักษณะเหมือน Scheme มากกว่า JS หรือไม่
Gabe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.