Skip to content

Latest commit

 

History

History
27 lines (14 loc) · 12.1 KB

The Untold Story of JavaScript.hy.md

File metadata and controls

27 lines (14 loc) · 12.1 KB

JavaScript World

JavaScript… Ամենաէլեգանտ և միաժամանակ ամենաթերագնահատված լեզուն

JavaScript-ը ներկայումս ամենաքննարկվող ու ամենահանրաճանաչ ծրագրավորման լեզուներից է։ Ծրագրավորողների կեսն ատում է այս լեզուն, ծաղրում նրանում առկա «տարօրինակությունները», իսկ մյուս կեսը գտնում է, որ այն էլեգանտ, ինտուիտիվ հասկանալի ու պարզ կառուցվածք ունի: Նույնիսկ Minecraft-ի ստեղծող Markus Persson-ը կատակով սահմանել էր մի աքսիոմ համաձայն որի, եթե որևէ բան հնարավոր է գրել JavaScript-ի միջոցով, ապա այն կգրվի JavaScript-ի միջոցով։ Այժմ փորձենք հասկանալ, որտեղից է գալիս տեսակետների նման հակասական, իրարամերժ բախումը:

JavaScript-ի ստեղծման և զարգացման պատմությունը

Հեռավոր 1995 թվականին կայքերը շատ պարզ կառուցվածք ունեին և ուղղակի հանդիսանում էին այն, ինչ այսօր ընդունված է անվանել կայք-այցեքարտ, ընդ որում, էլ ավելի պրիմիտիվ տարբերակով, առանց լուրջ գրաֆիկական լուծումների և անիմացիայի։ Netscape Communications Corporation ընկերությունը ստեղծեց Mosaic բրաուզերը, որը համարվում է աշխարհում առաջին բրաուզերը (նախագծի ղեկավար՝ Marc Andreessen): Հենց Mosaic-ի հիմքի վրա հետագայում թողարկվեց Netscape Navigator-ը՝ Internet Explorer-ի հիմնական մրցակիցը։ Netscape Communications ընկերությունում 1995 թ. ապրիլին աշխատանքի ընդունեցին Brendan Eich-ին (Բրենդան Այք), ով էլ շուտով դառնալու էր JavaScript լեզվի հիմնադիրը: Այստեղ նրան առաջադրեցին խնդիր. ստեղծել լեզու, որով հնարավոր կլինի ազատորեն մանիպուլիացիաներ անել DOM-ի հետ, որի արդյունքում կայքերին հնարավոր կլինի հաղորդել դինամիկություն ու ինտերակտիվություն։

Ամենասկզբում Brendan Eich-ը ցանկանում էր ստեղծել ֆունկցիոնալ լեզու, ինչպես ինքն էր նշում հարցազրույցներից մեկում` տեղադրել Scheme-ը (Lisp լեզվի դիալեկտներից է) բրաուզերում։ Իր բլոգում նա գրում է, որ գործնեության մեծ ազատություն նա, ցավոք, չուներ և տեխնիկական բաժնի ղեկավարները պայման դրեցին նրա առաջ, որ լեզուն լինի օբյեկտ կողմնորոշված և հնարավորինս մոտ Java-ին՝ գոնե սինթաքսով։ Այդ ժամանակներում OOP-ն համարվում էր բոլոր պրոբլեմների համար լավագույն լուծումը, իսկ օբյեկտ կողմնորոշված Java լեզուն նոր էր ստեղծվել և հանդիսանում էր էտալոն, որպես ճիշտ ու գրագետ ճարտարապետական լուծումներ ունեցող լեզու։ Ասում են Eich-ը լեզուն ստեղծեց 10 օրում, որն իհարկե այդքան կարճ ժամանակում չէր կարող թերություններից զուրկ լինել։ Սկզբից այն անվանեցին Mocha, հետո LiveScript և վերջում կանգ առան JavaScript անվանման վրա։ JavaScript անվանումն ավելի շուտ մարկետինգային քայլ էր և նպատակ ուներ լեզվին շուկայում դիրքավորել որպես Java լեզվի դինամիկ-ինտերպրետացվող տարբերակ։ Ընդհանրություն չունենալով Java-ի հետ, անվանումը մինչև հիմա շփոթեցնում է սկսնակներին։

Հետագայում Eich-ն իր բլոգում գրում է, որ Java-ից վերցրած լեզվական կառուցվածքները հիմնականում բացասական դեր խաղացին լեզվի զարգացման գործում, փոխարենը նա երջանիկ է Scheme ֆունկցիոնալ լեզվից փոխառած առաջին դասի ֆունկցիաների (first-class functions) գաղափարի և Self օբյեկտ կողմնորոշված լեզվից նախատիպերի կոնցեպտի (prototypes) ներդրման համար։ Քանի որ Java և JavaScript ապրանքային նշանները պատկանում էին Sun Microsystems ընկերությանը (ներկայումս Oracle-ին), ապա Microsoft ընկերությունը չկարողացավ օգտագործել JavaScript անվանումը և լեզվի սեփական իրականացումն անվանեց JScript:

Ինչպես արդեն նշեցի, լեզուն ստեղծվել էր DOM էլեմենտների հետ մանիպուլյացիայի և կայքերը դինամիկ դարձնելու համար և, բնականաբար, սկզբնական տարբերակում այն չափազանց ‹‹թեթև քաշային›› և պարզ լեզու էր հանդիսանում: Այդ էր պատճառը, որ այն երկար ժամանակ չէր զարգանում։ 1997 թվականին ECMA international ինֆորմացիոն և հաղորդակցական տեխնոլոգիաների ստանդարտիզացման կազմակերպությունում գրանցվեց JavaScript լեզվի ստանդարտը, իսկ Sun Microsystems-ի հետ անվան խնդիրներից խուսափելու համար լեզվական ստանդարտը անվանվեց ECMA-262։ Մեծ փոփոխությունները սկսվեցին, երբ հայտնվեցին JSON-ը, AJAX-ը և կրոս-բրաուզերային տարբեր լուծումները։ Զարգացմանը շատ մեծ թափ հաղորդեց jQuery գրադարանի ի հայտ գալը։ Հետագայում HTML5-ը և CSS3-ը բրաուզերներից համարյա թե դուրս մղեցին Flash-ը և JavaScript-ի տրամադրության տակ հայտնվեցին այնպիսի տեխնոլոգիաներ, ինչպիսիք են՝ Canvas, WebGL, WebSockets, WebWorkers, Audio, Video և այլն։

Երբ խաղին միացավ Google-ը

Google-ը նոր շունչ տվեց JavaScript-ին՝ ստեղծելով V8 engine-ը, որի արագագործության շնորհիվ JavaScript-ը երբեմն մրցում է նույնիսկ կոմպիլացվող լեզուների հետ։ V8-ի հիմքի վրա Ryan Dahl-ը ստեղծեց Node.js-ը, որը հնարավորություն տվեց JavaScript-ին աշխատել սերվերում։ Օգտագործվող libuv գրադարանը V8-ի հետ մեկտեղ հնարավորություն տվեց backend ծրագրավորողներին արագորեն կիրառել Node.js-ը ծանրաբեռնված համակարգերի ստեղծման համար։ Արդյունքում սկսվեց նոր էկոհամակարգի գոյացումը, ստեղծվեց MongoDB-ին (տվյալները պահում է BSON տեսքով, binary JSON), որը շատ դեպքերում հիանալի ալտերնատիվ է ռելացիոն մոդելով աշխատող տվյալների բազաների համակարգերին։ Կլիենտ հատվածում ստեղծվեց գրադարանների ու ֆրեյմվորկների մեծ եռյակը (Angular/React/Vue), որոնք էլ ավելի նպաստեցին JavaScript-ի տարածմանը ծրագրավորողների շրջանակներում, իսկ ES5 տարբերակից սկսած, երբ խիստ ռեժիմի (strict mode) ներդրումով հնարավոր եղավ ուղղել մի շարք բագեր, ինչպես նաև ավելացվեցին որոշ ֆունկցիոնալ հնարավորություններ, այն կամաց-կամաց սկսվեց ընկալվել իբրև կայացած ու լուրջ ծրագրավորման լեզու։ Արդեն ES6-ում կատարվեցին այնպիսի մեծաքանակ նորամուծություններ, որ լեզուն այլևս նման չէր Eich-ի սկզբնական ստեղծագործությանը։

Լեզվի զարգացման վրա արդեն երկար տարիներ աշխատում են խոշոր ընկերությունների (Google, Microsoft, Mozilla, Apple, Facebook և այլն) պրոֆեսիոնալ թիմեր, ինչպես նաև լեզվի շատ մեծ համայնքի շարքային ներկայացուցիչներ, ովքեր ամեն տարի TC39-ին ներկայացնում են լեզվի զարգացմանն ուղղված մեծ քանակությամբ առաջարկություններ ու հայեցակարգեր։ Սկսած 2015 թվականից ամեն տարի թարմացվում է լեզվի ստանդարտը, ավելանում են նոր հնարավորություններ: Առհասարակ, ներկայումս JavaScript-ն ամենաարագ զարգացող ծրագրավորման լեզուներից է։ Լեզուն թերևս զուրկ չէ թերություններից, սակայն թերագնահատողների մեծ զանգված չի խորանում լեզվի զարգացման դինամիկայի մեջ։ Թերագնահատելու մակերեսային պատճառներից է նաև լեզվի պարզությունը սկսնակների համար։ Բազմաթիվ սկսնակ ծրագրավորողներ արագորեն տիրապետում են լեզվի հիմնական կանոններին ու թողարկում բազմաթիվ նոր ծրագրեր՝ առանց անհանգստանալու ֆունդամենտալ խնդիրների մասին։ Արդյունքում շուկայում կուտակվում են անորակ ծրագրեր, որոնց ետևում կանգնած են մեծաքանակ թերուս ծրագրավորողներ։

JavaScript-ում ներդրված որոշ կոնցեպտներ, օրինակ՝ prototype-ժառանգումը, երբեմն ավելի արդյունավետ լուծում է, քան դասական class-ժառանգումը։ JavaScript-ն ունի իր փիլիսոփայությունը, որն անհրաժեշտ է ըմբոշխնել նորովի, այլ ոչ թե համեմատել դասական լեզուների հետ։ Հակառակ դեպքում առաջանում են կոնֆլիկտային զգացողություններ, մասնավորապես՝ this-ի վարքագիծը հասկանալու ընթացքում։ Նման կոնֆլիկտային զգացողությունների հետևանքով սովորաբար մեղադրում են հենց լեզվին, որի արդյունքում տարածվում է մեծ թյուրըմբռնում էլեգանտ և ճկուն լեզվի իրական բնույթի մասին։

Վերջում իհարկե տեղին կլինի մեջբերել C++ ծրագրավորման լեզվի ստեղծող Bjarne Stroustrup-ի հայտնի միտքը, որտեղ նա ծրագրավորման լեզուները բաժանում է երկու խմբի՝ լեզուներ, որոնցից բոլորը դժգոհում են և լեզուներ, որոնք ոչ ոք չի օգտագործում։

Follow me on Medium