Публикацията JavaScript срещу Java — разлики, прилики и история се появи за първи път в Qvault.
Именуването на Java и JavaScript обърква много нови програмисти. Те звучат толкова сходно, така че някой може да си помисли, че имат едни и същи случаи на употреба, подобни свойства или може би една и съща компания е създала и двата езика. Нито едно от тези предположения не е вярно! JavaScript се използва предимно като език за преден край в браузъра, както го използваме за курсовете на Qvault. Java е била използвана за всичко - от игри, до десктоп приложения, до backend apis. Нека да разгледаме разликите между JavaScript срещу Java в това бързо четене.
Java — Кратка история
През 1991 г. Джеймс Гослинг от Sun Microsystems създава Java. Sun Microsystems написа софтуер за много различни устройства. В крайна сметка прекомпилирането или преструктурирането на кода, за да се изпълнява на различни CPU архитектури, стана твърде отнемащо време.
Основателният екип трудно измисли добро име за своя проект и докато бяха на кафе, решиха да кръстят езика на своето кафе.
Междуплатформени (JVM)
Java е език за програмиране с общо предназначение, който позволява на разработчиците да изпълняват код на всяко устройство. Той компилира код в специфичен за Java байт код, след което виртуалната машина на Java (JVM) преобразува този байт код в машинно съвместим код. Тъй като компилира код по този начин, Java става напълно междуплатформена. Това е основен фактор, допринасящ за успеха на Java.
Обектно-ориентиран дизайн
Java бързо се издигна до слава и възприемане най-вече поради своята крос-платформена природа и модел на „обектно-ориентирано програмиране (OOP)“. OOP беше и остава популярен поради възможността за повторно използване на код и мислене за обекти в рамките на една програма като йерархии от типове. Java е кралят на шаблона за проектиране на ООП. Изисква всичко в програмата да е клас, дори основната функция!
OOP беше толкова популярен в началото на 2000-те, че стана (по мое мнение) прекалено широко разпространен. В наши дни той по-подходящо намери правилното си място в програмирането, но когато JavaScript се появи за първи път, ООП беше името на играта.
JavaScript — Кратка история
През 1995 г., 4 години след началото на Java, Брендън Айх създава JavaScript, докато работи за Netscape. По това време Netscape имаше пълен пазарен контрол върху индустрията за сърфиране в мрежата, докато Microsoft едва започваше с проекта Internet Explorer.
В опит да победи Microsoft, Netscape си партнира със Sun Microsystems. Те го брандираха с името JavaScript, за да се включат във влака на рекламата на Java, който със сигурност вървеше напред в общността на разработчиците.
Успехът на JavaScript
JavaScript започна като малък скриптов език за извършване на действия от страната на клиента в браузъра. Разработката беше прибързана и бяха направени интересни дизайнерски решения, включително:
- Незадължителни краища на редове с точка и запетая
- Обекти и класове, но с ограничено „капсулиране“
- Еднонишков (базиран на обратно извикване, без едновременност)
JavaScript обаче беше позициониран уникално. Това би допринесло той да стане „най-използваният език за програмиране“ днес. Следните точки се приписват на неговия широк успех:
- Уловката за именуване на „JavaScript“ за кражба на маркетингов шум
- Не се разглежда като конкуренция, защото уеб разработката не е „сериозна разработка“
- Отново монополизиране на програмирането в браузъра, защото други проекти не виждат скриптовете в браузъра като сериозно програмиране
Много разработчици смятат, че разработката на „front-end“ е за художници и дизайнери. В края на краищата, „Това е само стилизиране и шаблониране, нали?“
Дълго време беше така. Въпреки това през последното десетилетие разработката от предния край стана също толкова сериозна, колкото и разработката от задния край. Приложенията с една страница и рамки като Angular, React и Vue избутаха логиката, която преди се контролираше от бекенда, директно в браузъра на потребителя.
Време на изпълнение, скорост и бенчмаркове
Повечето компилирани езици като C, C++ и Go компилират код директно в машинни инструкции. Тези инструкции са специфични за CPU архитектура и операционна система. Нито Java, нито JavaScript обикновено се компилират по този начин.
Java и JavaScript работят по различни начини. За това сравнение ще приемем, че Java е компилиран в JVM байткод и JavaScript се изпълнява в интерпретатор на NodeJS.
Забележка: Java може да се компилира в собствен код или да се изпълнява чрез интерпретатор, а JavaScript може да работи извън браузър чрез Node, но засега ще се придържаме към тези конкретни случаи на употреба.
Java виртуална машина (JVM)
JVM компилира код (.java файлове) в компилирани класове (.class файлове). Тези клас файлове съставляват пълна компилирана Java програма, с изискването един от клас файловете да има „основна“ функция като входна точка. Файловете на класа обикновено се архивират и разпространяват заедно в .jar файл. Поради това е по-лесно за потребителите да изтеглят един изпълним файл.
JVM работи по-бързо от интерпретираните езици като JavaScipt, защото компилира код в машинен код преди изпълнение. JVM е по-бавна от повечето естествено компилирани езици. Това е така, защото той пропуска специфични за архитектурата оптимизации и все още трябва да прави JVM –› CPU преобразувания по време на изпълнение.
NodeJS — V8 двигател
JavaScript е интерпретиран език, който има много различни реализации на интерпретатора. Един от най-разпространените начини за изпълнение на JavaScript в производството е използването на интерпретатора NodeJS. Node използва „V8 двигателя“ на Chrome за интерпретиране и изпълнение на JavaScript.
Както можете да видите в следните бенчмаркове, Java сравнително постоянно се представя по-добре от Node по отношение на паметта и процесора:
Това, което наистина забавя JavaScript е, че той интерпретира код по време на изпълнение. При *приблизително* всеки ред на изпълнение, интерпретаторът трябва да преобразува JavaScript в машинен код, много бавен процес, който трябва да се извършва по време на изпълнение.
Класове и ООП
В Java всичко е клас и ООП се налага по авторитарен начин.
В JavaScript класовете не са задължителни, а „функционалното програмиране“ е възможно и дори се насърчава напоследък. JavaScript има повечето OOP парадигми, налични в езика. Въпреки това, „капсулирането“ не е толкова стабилно, колкото е с Java.
Нишки и паралелност
JavaScript е еднопоточен, което означава, че никога няма да изпълнява код едновременно. Едновременното програмиране е характеристика на повечето езици и JavaScript е доста уникален, тъй като не може да изпълни задачата.
В Java паралелността е лесно достъпна и можете да прочетете повече за нея тук: https://howtodoinjava.com/java-concurrency-tutorial/
Начинът, по който JavaScript компенсира това, че е еднонишков, е чрез използването на асинхронно програмиране и цикъл на събития. Всеки път, когато API извикване или някакъв друг продължителен процес трябва да се случи, без да блокира изпълнението на останалата част от програмата, цикълът на събития е отговорен за извършването на чакането. Когато асинхронната задача завърши, основната нишка може да открие резултатите от задачата.
Благодаря за четенето!
Следвайте ни в Twitter @q_vault, ако имате въпроси или коментари
Вземете някои курсове по кодиране на нашата нова платформа
Абонирайте се за нашия бюлетин за повече статии за програмиране