Публикацията 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, ако имате въпроси или коментари

Вземете някои курсове по кодиране на нашата нова платформа

Абонирайте се за нашия бюлетин за повече статии за програмиране

Свързани статии