что означает декларируемый java принцип write once run anywhere
Особенности языка Java
Язык Java был создан в 1995 году, и за 22 года своего существования покорил сердца миллионов программистов. Как ему это удалось? Почему за это время не появилось ни одной достойной замены? Чтобы разобраться в этом, поговорим об особенностях языка Java.
Компания Sun Microsystems при выпуске языка заложила 5 парадигм потенциального успеха:
Рассмотрим каждую из них подробнее.
Простота
Синтаксис языка был унаследован от C++. Сегодня на фоне Python, Groove или Go его трудно назвать простым, однако тогда эволюционный вид позволил привлечь внимание Си-разработчиков.
Стандартная программа “Hello World” выглядит следующим образом:
Такая форма конструкций не увеличивает скорость набора, однако читать, понимать и воспроизводить его просто.
Надёжность
Надёжность обеспечивается двумя принципами:
Кроме того, первоначально в Java предполагался запрет прямого доступа к памяти, что также повышало бы надёжность. Но разработчики оставили несколько лазеек, например бэкдор sun.misc.Unsafe, которые этот запрет обходят.
Безопасность
Кроме сохранения общей формы конструкций, Java по сравнению с C++ формально лишился двух потенциальных опасностей: указателей и множественного наследования. На деле обе функции сохранены, но представлены в ином виде: вместо указателей используются значения, а в множественном наследовании участвуют не классы, а интерфейсы. Тем не менее, такая особенность java программирования почти исключает возможный урон от невнимательности разработчика.
Удобство
Дословно концепция Java звучит как: «Write once, run anywhere». То есть исполняемость кода не зависит от используемой операционной системы или установленного ПО. Достигается это благодаря транслированию в байт-код виртуальной машиной JVM.
Как нельзя кстати пригодилась эта особенность java на android. Разнообразие производителей, моделей телефонов, характеристик — всё это могло бы негативно сказаться на работе приложений, если бы не существование такого универсального инструмента.
Производительность
Особенность ява, связанная с транслированием в байт-код, положительно сказывается и на производительности конечных продуктов. По скорости исполнения однотипные программы на java уступают в 1,5-2 раза программам на C/C++, при этом превосходят JavaScript, Ruby, Python.
Развитая экосистема
За 22 года жизни язык оброс десятками IDE и фреймворков, сотнями сообществ и форумов, тысячами библиотек и плагинов. Всё это благоприятно сказывается на пороге вхождения в профессию, востребованности и качеству производимых с помощью java продуктов.
Безусловно, каждый популярный язык программирования уникален, каждый имеет свои недостатки и преимущества. Особенности Java не имеют революционного характера, они незначительны, но вместе с тем фундаментальны. Именно то, что отличает хороший язык от лучшего.
Советуем пройти бесплатный двухдневный интенсив по основам Java и познакомиться с этим языком 🙂
Язык Java был создан в 1995 году, и за 22 года своего существования покорил сердца миллионов программистов. Как ему это удалось? Почему за это время не появилось ни одной достойной замены? Чтобы разобраться в этом, поговорим об особенностях языка Java.
Компания Sun Microsystems при выпуске языка заложила 5 парадигм потенциального успеха:
Рассмотрим каждую из них подробнее.
Простота
Синтаксис языка был унаследован от C++. Сегодня на фоне Python, Groove или Go его трудно назвать простым, однако тогда эволюционный вид позволил привлечь внимание Си-разработчиков.
Стандартная программа “Hello World” выглядит следующим образом:
Такая форма конструкций не увеличивает скорость набора, однако читать, понимать и воспроизводить его просто.
Надёжность
Надёжность обеспечивается двумя принципами:
Кроме того, первоначально в Java предполагался запрет прямого доступа к памяти, что также повышало бы надёжность. Но разработчики оставили несколько лазеек, например бэкдор sun.misc.Unsafe, которые этот запрет обходят.
Безопасность
Кроме сохранения общей формы конструкций, Java по сравнению с C++ формально лишился двух потенциальных опасностей: указателей и множественного наследования. На деле обе функции сохранены, но представлены в ином виде: вместо указателей используются значения, а в множественном наследовании участвуют не классы, а интерфейсы. Тем не менее, такая особенность java программирования почти исключает возможный урон от невнимательности разработчика.
Удобство
Дословно концепция Java звучит как: «Write once, run anywhere». То есть исполняемость кода не зависит от используемой операционной системы или установленного ПО. Достигается это благодаря транслированию в байт-код виртуальной машиной JVM.
Как нельзя кстати пригодилась эта особенность java на android. Разнообразие производителей, моделей телефонов, характеристик — всё это могло бы негативно сказаться на работе приложений, если бы не существование такого универсального инструмента.
Производительность
Особенность ява, связанная с транслированием в байт-код, положительно сказывается и на производительности конечных продуктов. По скорости исполнения однотипные программы на java уступают в 1,5-2 раза программам на C/C++, при этом превосходят JavaScript, Ruby, Python.
Развитая экосистема
За 22 года жизни язык оброс десятками IDE и фреймворков, сотнями сообществ и форумов, тысячами библиотек и плагинов. Всё это благоприятно сказывается на пороге вхождения в профессию, востребованности и качеству производимых с помощью java продуктов.
Безусловно, каждый популярный язык программирования уникален, каждый имеет свои недостатки и преимущества. Особенности Java не имеют революционного характера, они незначительны, но вместе с тем фундаментальны. Именно то, что отличает хороший язык от лучшего.
Советуем пройти бесплатный двухдневный интенсив по основам Java и познакомиться с этим языком 🙂
Why is Java ‘write once and run anywhere’?
JVM(Java Virtual Machine) acts as a run-time engine to run Java applications. JVM is the one that actually calls the main method present in Java code. JVM is a part of the JRE(Java Runtime Environment).
Java applications are called WORA (Write Once Run Anywhere). This means a programmer can develop Java code on one system and can expect it to run on any other Java-enabled system without any adjustment. This is all possible because of JVM.
Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.
In traditional programming languages like C, C++ when programs were compiled, they used to be converted into the code understood by the particular underlying hardware, so If we try to run the same code at another machine with different hardware, which understands different code will cause an error, so you have to re-compile the code to be understood by the new hardware.
In Java, the program is not converted to code directly understood by Hardware, rather it is converted to bytecode(.class file), which is interpreted by JVM, so once compiled it generates bytecode file, which can be run anywhere (any machine) which has JVM( Java Virtual Machine) and hence it gets the nature of Write Once and Run Anywhere.
Example: Practical Implementation of WORA using a simple JAVA program to check whether a number is even or odd.
25 ответов
Java должен быть write once, run anywhere, и это действительно может быть, но в некоторых случаях он превращается в write once, debug everywhere. Каковы наиболее распространенные причины проблем при перемещении приложения Java с одной платформы на другую? Каковы не распространенные, но интересные.
В принципе, мне было интересно, как файловые системы write-anywhere обеспечивают какое-либо преимущество перед другими типами файловых систем, и как модель write-anywhere справляется с этим (в широком смысле)? Спасибо
Ответ-очень шаткое «Да». В тот момент, когда вы включаете внешнюю библиотеку, ответ меняется на «Нет».
Любые приложения, скомпилированные для любого целевого объекта CPU, которые используют базы данных MS Access, завершатся неудачей в версии 64-bit Windows.
(Это игнорирует тот факт, что указанные приложения не переносятся на Mono.)
Чтобы поместить это в контекст, по мнению многих людей, Java также никогда не выполнял своего обещания «Write Once Run Anywhere».
В лучшем случае вы получили «Write Once Debug Everywhere» или «Write Once Looks like crap Everywhere»
Все успешные приложения на основе CLR были написаны с использованием графической структуры, которая является родной для целевой платформы.
Например, следующие очень успешные приложения linux, написанные с использованием привязок c# к GTK, называются GTK#, а не с использованием winforms, как можно было бы ожидать:
Когда google пришел, чтобы сделать Chrome, они не пытались использовать кросс-платформенный фреймворк GUI, вместо этого они решили использовать собственные фреймворки GUI на каждой платформе. Почему? потому что таким образом приложение правильно вписывается в свою среду, таким образом оно выглядит, чувствует и действует как родное для операционной системы.
В принципе, когда вы пытаетесь запустить запись один раз в любом месте, вам приходится идти на серьезные компромиссы, и в итоге вы получаете то, что на самом деле нигде не работает.
Индустрия в значительной степени отказалась от высокой цели написать один раз в любом месте, как от хорошей идеи, которая не сработала на практике.
Лучший подход с mono/.net-это совместное использование двоичных файлов более низкого уровня и использование собственного графического интерфейса на каждой целевой платформе. GTK# на linux, winforms или WPF на windows, CocoaSharp на Mac. Таким образом, ваше приложение будет выглядеть и чувствовать себя как родное приложение.
Я рассматривал возможность использования zk для моего предстоящего веб-проекта Java, но немного скептически отношусь к нему, потому что, как бы потрясающе это ни выглядело, у него есть дорогое лицензионное издание, а также бесплатное издание с открытым исходным кодом. Я мог бы использовать только.
Как уже упоминали другие, проект Mono также перенес фреймворк в несколько сред.
С Mono мы подходим довольно близко, и с SilverLight мы все уже там.
Интересно, что Silverlight на самом деле имеет уменьшенную версию CLR, которая может работать как на Windows, так и на Mac, что позволяет одному и тому же приложению Silverlight работать на обеих платформах без изменений.
Он никогда не будет поддерживаться на таком количестве платформ, как Java, IMHO.
Единственное усилие-это Mono, не спонсируемое Microsoft.
Не знаю, как насчет Mac, Sun и т. д.
Так что в теории да, на практике-посмотрим.
Она была довольно успешной, но официально не поддерживалась.
Я не думаю, что изначально Microsoft планировала создавать среды выполнения для каждой платформы и устройства, но они поощряли это, используя документированный (?) промежуточный язык.
Мультиплатформенность была, конечно, в видении.. прямо сейчас mono делает хорошую работу по реализации среды выполнения для других ОС.
Итак, в некотором смысле даже Java не является действительно чистым «Write Once, Run Anywhere».
Но это IS мультиплатформа Win9x/WinNT/Mobile
Похожие вопросы:
Java настольные приложения, использующие инструментарий Swing, печально известны своим нативным внешним видом по сравнению с нативными приложениями OS X, использующими Cocoa или даже Carbon. В.
Java должен быть write once, run anywhere, и это действительно может быть, но в некоторых случаях он превращается в write once, debug everywhere. Каковы наиболее распространенные причины проблем при.
В принципе, мне было интересно, как файловые системы write-anywhere обеспечивают какое-либо преимущество перед другими типами файловых систем, и как модель write-anywhere справляется с этим (в.
Я рассматривал возможность использования zk для моего предстоящего веб-проекта Java, но немного скептически отношусь к нему, потому что, как бы потрясающе это ни выглядело, у него есть дорогое.
Я понимаю, что модули OSGi могут быть добавлены и удалены динамически во время выполнения. Итак, возможно ли иметь систему, в которой я могу обновить ее без необходимости когда-либо снимать? (Думая.
Я довольно новичок в Java или программировании вообще. Во время моих путешествий по интернету, чтобы овладеть этим языком, я несколько раз сталкивался с высказыванием write once run anywhere. Но я.
В случае, если я читаю данные из txt-файла, как я могу разделить их на абзацы? Поскольку абзац может содержать более одного предложения, какой разделитель я должен использовать? ДАННЫЕ ИЗ TXT.
Java Blog
Как работает JVM
Java-приложения называются WORA (Write Once Run Anywhere, Пиши однажды запускай везде). Это означает, что программист может разрабатывать код Java в одной системе и ожидать, что он будет работать в любой другой системе с поддержкой Java без каких-либо настроек. Это все возможно благодаря JVM.
Подсистема загрузчика классов (Class Loader Subsystem)
В основном подсистема загрузчика классов отвечает за три вида деятельности.
Связывание (Linking): выполняет проверку, подготовку и (необязательно) разрешение.
Инициализация (Initialization): на этом этапе всем статическим переменным присваиваются их значения, определенные в коде и статическом блоке (если есть). Это выполняется сверху вниз в классе и от родителя к потомку в иерархии классов.
В общем, есть три загрузчика классов:
Примечание: JVM следует принципу делегирования-иерархии для загрузки классов. Загрузчик классов системы делегирует запрос на загрузку в загрузчик классов расширения и загрузчик классов расширения делегирует запрос в загрузчик класса начальной загрузки. Если класс найден в пути начальной загрузки, класс загружается, в противном случае запрос снова передается загрузчику классов расширения, а затем загрузчику классов системы. Наконец, если загрузчик классов системы не может загрузить класс, мы получаем исключение java.lang.ClassNotFoundException во время выполнения.
Память JVM
Область метода: в области метода хранится вся информация уровня класса, такая как имя класса, имя непосредственного родительского класса, информация о методах и переменных и т. д., включая статические переменные. В JVM есть только одна область методов, и это общий ресурс.
Область кучи (heap): информация обо всех объектах хранится в области кучи. Существует также одна область кучи на JVM. Это также общий ресурс.
Область стека: для каждого потока (thread) JVM создает один стек времени исполнения, который хранится здесь. Каждый блок этого стека называется активационной записью/кадром стека, в котором хранятся вызовы методов. Все локальные переменные этого метода хранятся в соответствующем кадре. После завершения потока стек его выполнения будет уничтожен JVM. Это не общий ресурс.
Регистры компьютера: хранить адрес текущей инструкции исполнения потока. Очевидно, что каждый поток имеет отдельные регистры компьютера.
Стеки нативного метода: для каждого потока создается отдельный нативный стек. Он хранит информацию о нативных методах.
Среда исполнения
Нативный интерфейс Java (JNI)
Это интерфейс, который взаимодействует с библиотеками нативных методов и предоставляет нативные библиотеки (C, C++), необходимые для выполнения. Это позволяет JVM вызывать библиотеки C/C++ и вызываться библиотеками C/C++, которые могут быть специфичными для аппаратного обеспечения.
Библиотеки нативных методов
Это коллекция нативных библиотек (C, C++), которые требуются для механизма исполнения.
Does Write Once Run Anywhere Work?
Join the DZone community and get the full member experience.
Yes, and No.Write Once, Run Anywhere, a slogan created by Sun to evangelize the virtues of the Java Platform, is a controversial approach to software development.
Write Once, Run Anywhere (WORA) is accomplished through an abstraction layer between the ‘compiled code’ and the operating system and processor. This abstraction usually takes the form of a Virtual Machine or Runtime, such as the Java Virtual Machine (JVM), Microsoft’s Common Language Runtime (CLR), Flash Player (or Air runtime), or one of the many interpreted language runtimes (Perl, PHP, Ruby, etc.). These runtimes convert the intermediate language into device specific code that can execute on the local operating system and processor. While this overhead introduces extra steps, which slow down execution, they also provide features not (easily) available in native code, such as garbage collection and Just In Time (JIT) compilers which can optimize the code while it executes, as opposed to at compilation time.
So does it work? Yes, and No.
Server
There are certainly some applications developed for servers in native code. Database servers are the most common example, but LDAP servers, webservers (Apache), and others are compiled to native code. However, there are WORA versions of each of these examples, and many of the native applications were first written before WORA languages took off.
There is no denying that WORA is a huge success on the server side.
Client
Which brings us to No.
Client application development has struggled on the client side. The biggest challenge is User/Human Interface Guidelines (HIG). User or Human interface guidelines are published by various Operating System vendors (Microsoft, Apple) that define a set of recommendations on how an application should look and interact with the user. Applications that follow these look like ‘Windows’ or ‘Mac’ applications.
With WORA, application developers have two choices. Follow the guidelines of a specific platform, and ignore the others, or compromise between the various target platforms, creating an application that doesn’t match any platform.
Early Java desktop applications looked like Java applications. They were obviously different from the other applications that users were used to interacting with, and were often shunned. This has led to a negative view of WORA applications in general, as John Gruber comments on a Jason Kincaid article:
Jason Kincaid nails it: “write once, run everywhere” has never worked out. It’s a pipe dream.
In the context of client applications, I have to (mostly) agree.
There are exceptions. In the Java world, nearly every developer uses an Integrated Development Environment written in Java, whether it is Eclipse, IntelliJ IDEA, or NetBeans. But developers are a very different target audience than general computer users.
Another example is Flash and Flex applications. Often delivered in the web browser, there are no real Human Interface Guideline that govern their interactions, other than the expected HTML experience. This can work, but it can also be horribly painful, as many people have discovered trying to find a menu on a Restaurant’s website.
Mobile
There is a third act to this story. Mobile.
Apple has take the mobile market by storm with its iPhone and App Store. With over 100,000 applications written for the iPhone, the iPhone has become THE mobile development platform. And every one of these applications was compiled to native code.
A consistent user experience is even more important on a mobile device with a limited display and user input capability. Apple’s success is in part due to its consistent device design. Every iPod/iPod Touch/iPad version has a single home button, and a touch screen. There are two screen sizes, the iPod size, and the iPad size. While individual phone capabilities do very (memory, speed, GPS, Compas, etc.) the primary interface components are all the same. By using a software keyboard on the devices, the keyboard is the same across all devices and applications. All of this makes developing applications for the platform much more predictable and enjoyable.
The Windows Mobile and Android platforms both share a wide variety of device form factors, screen sizes, physical buttons, and device features. This makes it much more difficult to build an application that is easy and intuitive to use across the platform. And I think the quality and quantity of applications on the Windows Mobile and Android platforms demonstrate this point.
Solution
There is a solution, of sorts. HTML in the browser is the most successful WORA language and runtime for client applications since the ANSI/VT100 terminal. By creating a common language and interface, applications could be written for all operating systems easily, without the pain of violating their human interface guidelines. The browser itself conformed to the local guidelines, and users expected the experience in the browser to be different from a native application.
It is time to evolve this paradigm to the next level. HTML 5 is a good first step. It provide the ability to display video, store data locally, and draw 2D graphics in a standardized way. But to be successful, these features and more need to be implemented consistently across browsers, enabling developers to truly develop great WORA client applications.
As an intermediate step, frameworks and libraries that abstract the browser differences away is a short term solution. JavaScript libraries such as Prototype and jQuery abstract the browser implementation differences while frameworks like Google’s Web Toolkit (GWT) provide a platform to develop client applications that just happen to run in the browser.
Realistically, I think tools like GWT are the future. As a Flex developer, I enjoy the ability to quickly and easily create rich applications that will render the same on ever user’s machine. But I would prefer that the Flex applications would compile to HTML and JavaScript, so they could be run native in the browser.
In the future, we will be developing using various language and platforms, but they will all compile down to code that runs native in the browser. Or so I hope.