Въведение в скриптовете в Java, част 1

Извадка от скриптове в Java: Езици, рамки и модели .

От Деян Босанац

Публикувано от Addison Wesley Professional

ISBN-10: 0-321-32193-6

ISBN-13: 978-0-321-32193-0

Доскоро само хардкорът беше развълнуван от скриптове на платформата Java, но това беше преди Sun да увеличи поддръжката на JRE за динамично типизирани езици като Python, Ruby и JavaScript. В този откъс от две части от предстоящия скрипт в Java: Езици, рамки и модели (Addison Wesley Professional, август 2007 г.) Деян Босанак се стеснява върху това, което отличава повечето скриптови езици от език за програмиране като Java, след което обяснява защо скриптовете са достойно време допълнение към вашия набор от умения за програмиране на Java.

Въведение в скриптове в Java: Езици, рамки и модели

Основната тема на тази книга е синергията на скриптовите технологии и платформата Java. Описвам проекти, които разработчиците на Java могат да използват, за да създадат по-мощна среда за разработка, както и някои от практиките, които правят скриптовете полезни.

Преди да започна да обсъждам приложението на скриптове в света на Java, обобщавам част от теорията за скриптове като цяло и използването му в инфраструктурата на информационните технологии. Това е темата на първите две глави на книгата и ни дава по-добра перспектива за технологията за скриптове, както и как тази технология може да бъде полезна в рамките на платформата Java.

За начало трябва да определим какво представляват скриптовите езици и да опишем техните характеристики. Техните характеристики до голяма степен определят ролите, в които биха могли (трябва) да бъдат използвани. В тази глава обяснявам какво означава терминът скриптов език и обсъждам основните им характеристики.

В края на тази глава обсъждам разликите между скриптовите и системните езици за програмиране и как тези разлики ги правят подходящи за определени роли в разработката.

Заден план

Определението за скриптов език е неясно и понякога несъвместимо с начина, по който се използват скриптовите езици в реалния свят, така че е добра идея да обобщите някои от основните понятия за програмирането и изчисленията като цяло. Това резюме предоставя основа, необходима за дефиниране на скриптовите езици и обсъждане на техните характеристики.

Да започнем отначало. Процесорите изпълняват машинни инструкции , които работят върху данни или в регистрите на процесорите, или във външна памет. Казано по-просто, машинната инструкция се състои от последователност от двоични цифри (0s и 1s) и е специфична за конкретния процесор, на който се изпълнява. Машинните инструкции се състоят от операционен код, който казва на процесора каква операция трябва да изпълни, и операнди, представляващи данните, върху които трябва да се извърши операцията.

Например, помислете за простата операция на добавяне на стойност, съдържаща се в един регистър към стойността, съдържаща се в друг. Сега нека си представим прост процесор с 8-битов набор от инструкции, където първите 5 бита представляват операционния код (да речем, 00111 за добавяне на стойност на регистъра), а регистрите са адресирани с 3-битов модел. Можем да напишем този прост пример, както следва:

00111 001 010

В този пример използвах 001 и 010 за адресиране на регистри номер едно и две (R1 и R2, съответно) на процесора.

Този основен метод на изчисляване е добре известен от десетилетия и съм сигурен, че сте запознат с него. Различните видове процесори имат различни стратегии относно това как трябва да изглеждат техните набори от инструкции (RISC или CISC архитектура), но от гледна точка на разработчика на софтуера единственият важен факт е, че процесорът може да изпълнява само двоични инструкции. Без значение какъв език за програмиране се използва, полученото приложение е последователност от машинни инструкции, изпълнявани от процесора.

Това, което се променя с времето, е как хората създават реда, в който се изпълняват машинните инструкции. Тази подредена последователност от машинни инструкции се нарича компютърна програма . Тъй като хардуерът става все по-достъпен и по-мощен, очакванията на потребителите се повишават. Цялата цел на разработването на софтуер като научна дисциплина е да осигури механизми, позволяващи на разработчиците да създават по-сложни приложения със същите (или дори по-малко) усилия, както преди.

Набор от инструкции на конкретен процесор се нарича негов машинен език . Езиците на машината се класифицират като езици за програмиране от първо поколение. Програмите, написани по този начин, обикновено са много бързи, защото са оптимизирани за конкретната архитектура на процесора. Но въпреки тази полза е трудно (ако не и невъзможно) хората да пишат големи и сигурни приложения на машинни езици, защото хората не са добри в работата с големи последователности от 0 и 1.

В опит да разрешат този проблем, разработчиците започнаха да създават символи за определени двоични модели и с това бяха въведени асемблерни езици . Асемблерните езици са второ поколение езици за програмиране . Инструкциите на асемблерни езици са само едно ниво над машинните инструкции, тъй като те заменят двоични цифри с лесни за запомняне ключови думи като ADD, SUB и т.н. Като такъв можете да пренапишете предходния прост пример с инструкции на асемблерен език, както следва:

ДОБАВЕТЕ R1, R2

В този пример ключовата дума ADD представлява операционния код на инструкцията, а R1 и R2 определят регистрите, участващи в операцията. Дори ако наблюдавате само този прост пример, очевидно е, че асемблерните езици улесняват четенето на програми и по този начин позволяват създаването на по-сложни приложения.

Въпреки че са по-ориентирани към човека, езиците от второ поколение по никакъв начин не разширяват възможностите на процесора.

Въведете езици от високо ниво , които позволяват на разработчиците да се изразяват в семантични форми на по-високо ниво. Както може би се досещате, тези езици се наричат езици за програмиране от трето поколение . Езиците на високо ниво предоставят различни мощни цикли, структури от данни, обекти и т.н., което улеснява много създаването на много приложения с тях.

С течение на времето беше представен разнообразен набор от езици за програмиране на високо ниво и техните характеристики варираха значително. Някои от тези характеристики категоризират езиците за програмиране като скриптови (или динамични) езици, както виждаме в следващите раздели.

Също така има разлика в начина на изпълнение на езиците за програмиране на хост машината. Обикновено компилаторите превеждат езикови конструкции на високо ниво в машинни инструкции, които се намират в паметта. Въпреки че програмите, написани по този начин, първоначално бяха малко по-ефикасни от програмите, написани на асемблерен език, поради неспособността на ранните компилатори да използват ефективно системните ресурси, с течение на времето компилаторите и машините се усъвършенстваха, правейки езиците за системно програмиране по-добри от асемблерните езици. В крайна сметка езиците на високо ниво станаха популярни в широк спектър от области на разработка, от бизнес приложения и игри до комуникационен софтуер и внедряване на операционна система.

Но има и друг начин за трансформиране на семантични конструкции на високо ниво в машинни инструкции и това е да ги интерпретирате, докато се изпълняват. По този начин вашите приложения се намират в скриптове в оригиналната им форма и конструкциите се трансформират по време на изпълнение от програма, наречена интерпретатор . По принцип изпълнявате интерпретатора, който чете изрази на вашето приложение и след това ги изпълнява. Наричани скриптови или динамични езици , такива езици предлагат дори по-високо ниво на абстракция от това, предлагано от езиците за системно програмиране, и ние ги обсъждаме подробно по-късно в тази глава.

Езиците с тези характеристики са естествени за определени задачи, като автоматизация на процесите, администриране на системата и слепване на съществуващите софтуерни компоненти; накратко, навсякъде строгият синтаксис и ограничения, въведени от езиците за системно програмиране, пречат между разработчиците и техните работни места. Описанието на обичайните роли на скриптовите езици е във фокуса на глава 2, „Подходящи приложения за скриптови езици“.

Но какво общо има всичко това с вас като разработчик на Java? За да отговорим на този въпрос, нека накратко обобщим историята на платформата Java. Тъй като платформите стават по-разнообразни, за разработчиците става все по-трудно да пишат софтуер, който може да работи на повечето налични системи. Това е, когато Sun разработи Java, която предлага простота „пиши веднъж, тичай навсякъде“.

Основната идея зад платформата Java беше да се внедри виртуален процесор като софтуерен компонент, наречен виртуална машина . Когато имаме такава виртуална машина, можем да напишем и компилираме кода за този процесор, вместо конкретната хардуерна платформа или операционна система. Резултатът от този процес на компилация се нарича байт код и на практика представлява машинния код на целевата виртуална машина. Когато приложението се изпълнява, виртуалната машина се стартира и байт кодът се интерпретира. Очевидно е, че разработеното по този начин приложение може да работи на всяка платформа с инсталирана подходяща виртуална машина. Този подход към разработването на софтуер намери много интересни приложения.

Основната мотивация за изобретяването на платформата Java беше да се създаде среда за разработване на лесен, преносим, ​​мрежов клиентски софтуер. Но най-вече заради санкциите за производителност, въведени от виртуалната машина, Java сега е най-подходяща в областта на разработването на сървърния софтуер. Ясно е, че с увеличаването на скоростта на персоналните компютри в Java се пишат повече настолни приложения. Тази тенденция само продължава.

Едно от основните изисквания на скриптовия език е да има преводач или някаква виртуална машина. Платформата Java се доставя с Java Virtual Machine (JVM), което й позволява да бъде хост на различни скриптови езици. Днес в общността на Java има нарастващ интерес към тази област. Съществуват малко проекти, които се опитват да предоставят на разработчиците на Java същите мощни разработчици на традиционните скриптови езици. Също така, има начин да изпълните вашето съществуващо приложение, написано на динамичен език като Python вътре в JVM и да го интегрирате с друго Java приложение или модул.

Това е, което обсъждаме в тази книга. Ние използваме скриптов подход към програмирането, докато обсъждаме всички силни и слаби страни на този подход, как най-добре да използваме скриптове в архитектурата на приложението и какви инструменти са достъпни днес в JVM.