Показаны сообщения с ярлыком java. Показать все сообщения
Показаны сообщения с ярлыком java. Показать все сообщения

2010-07-25

Java NG

Сейчас много говорят о новых языках работающих в JVM: Groovy, Scala, Clojure, JavaScript (Rhino), etc.

Мне нравятся Clojure и Rhino, остальные попахивают over-engineering'ом или "только для гиков/держать подальше от production".
Т.е. я не против "пусть цветут все цветы", но реальной замены Java пока нет и не наблюдается (очень серьезный конкурент это C# - активно развивается, но развивается IMHO по принципу "запихнем в язык всё что увидим").

Развивать Java надо (Sun развивал Java медленно, медленнее его разве что Borland с Delphi), но не пихая туда всё подряд, не усложняя язык, а наоборот упрощая.

Мой список пожеланий выглядит так:

1. всё что есть в проекте Coin
2. всё что есть в проекте Guava
3. простые замыкания (а не предлагаемый ужас), например: #{тело метода } или #(аргумент1, арг2, ){ тело }. Пример использования: new Thread(#{log.info("hello!"); }).start();
4. конструкцию let, для тел методов, которая бы сама выводила тип переменной. Пример: let myvar = new ConcurrentHashMap<Integer, Set<MyType>>(10); или final let s = "hello"; далее по коду работать с этими переменными как с обычными типизированными
5. авто свойства: если у класса есть getter getFoo(), то можно обращаться a = obj.foo, а если есть setter setFoo(T value), то obj.foo = v1. Внутри самого класса обращение к foo должно работать с переменной T foo, а this.foo - с getters/setter.
6. (мелочи) массивы implements Iterable и for each работающий по Iterable/Iterator/Enumeration

Это сделало бы язык проще и уменьшило бы количество действительно ненужного кода, не превращая язык в Perl.

2009-01-21

Java идеальна для системного программирования

Копия моего поста http://community.livejournal.com/ru_java/750688.html

Смотрите на мир незашоренными глазами:
Java идеальна для написания системных утилит.
Java действительно прекрасный выбор для системного программирования.

Главное понять, что некоторые различия ОС не обработаны заботливым изготовителем JRE и не поданы на блюдечке, а их потребуется обрабатывать вручную, точно также как это делают в Delphi/C++.

Т.е. отсуствующие в JRE методы реализуете вызовами к ОС (проверяя что за ОС).
  • Стандартный способ JNI: слишком много писать - это как писать в машинном коде.
Как надо:
  • Если надо работать с процедурным API (ex: WinAPI) то есть:
  1. https://jna.dev.java.net/
  2. http://www.jinvoke.com/
  3. http://fivedots.coe.psu.ac.th/~ad/winJava/ (несколько глав книги Windows Programming Using Java - они используют JInvoke, но думаю будет полезно и для JNA и для Linux ;-)
  • Если надо работать с ООП API (ex: COM) то есть:
  1. https://com4j.dev.java.net/
  2. http://jacob-project.sf.net

https://jna.dev.java.net/
JNA provides Java programs easy access to native shared libraries (DLLs on Windows) without writing anything but Java code—no JNI or native code is required. This functionality is comparable to Windows' Platform/Invoke and Python's ctypes. Access is dynamic at runtime without code generation.

JNA allows you to call directly into native functions using natural Java method invocation. The Java call looks just like it does in native code. Most calls require no special handling or configuration; no boilerplate or generated code is required.

The JNA library uses a small native library stub to dynamically invoke native code. The developer uses a Java interface to describe functions and structures in the target native library. This makes it quite easy to take advantage of native platform features without incurring the high overhead of configuring and building JNI code for multiple platforms.

While some attention is paid to performance, correctness and ease of use take priority.


http://www.jinvoke.com/
J/Invoke - easy Java native interoperability

J/Invoke enables Java developers to easily invoke native methods (such as the Win32 API or C-based Windows DLLs and Unix dynamic libraries) with pure Java code.

Unlike error-prone JNI programming that is hard to use and deploy, J/Invoke lets you access native libraries by simply declaring native methods, and calling them from pure Java.

Java programmers can save time, avoid errors and increase productivity by using J/Invoke to

* Call native libraries from pure Java, without using JNI
* Use OS features and APIs (like the Win32 API), not available through Java
* Integrate Java applications with native libraries (Windows DLLs, Mac OS X, Linux and Solaris dynamic libraries)
* Provide Java API for native DLLs or other non-Java libraries

Do all this and more with pure, simple Java - no need to mess with C/C++ programming with error-prone and hard to use JNI, deploying intermediate DLLs, and dealing with parameter conversions between Java and native types.


Q: Хм.. Для меня системное программирование — это программирование систем, возможно операционных!

A:
1) http://www.jnode.org/
Java New Operating System Design Effort.
JNode is a simple to use & install Java operating system for personal use.
It runs on modern devices.
Any java application will run on it, fast & secure!
(open source, LGPL)

2. http://en.wikipedia.org/wiki/JavaOS

3. http://www-jpc.physics.ox.ac.uk/
JPC is an x86 PC emulator written entirely in Java. Open Source!
АААААААААААА111111111111!!!!!!!!!!!!

Researchers at Oxford have built an x86 emulator that runs purely on Java, making it ideal for security researchers who want to analyze and archive viruses, host honeypots and defend themselves against buggy or malicious software without hosing their machines. The JPC also emulates a host of other environments, giving technophiles the ability to play Asteroids and other software that's sat on shelves for years collecting dust.

What's more, JPC will run on any device with a Java virtual machine, so cell phones, set-top boxes and RISC systems are all fair game, according to researchers in the university's physics department, where the project was developed.

"Some might see JPC as part of a nefarious plot by mad scientists who want to harness every last CPU in the world for their research - but we prefer to see JPC as Java-hardened protection against their buggy programs," they say. JPC's Java-based architecture gives it cross-platform capability, the security of running code in the Java sandbox and the flexibility of configuring virtualization platforms and software libraries.

The researchers boast its x86 emulation, at 10 per cent native speed, puts it among the fastest x86 emulators. (Note: an earlier version of this story incorrectly reported JPC emulated other environments.)

2007-10-14

Преимущества Java для разработки server side jobs.

Преимущества:

1. Широко известная возможность Java программ работать на разных платформах БЕЗ ПЕРЕКОМПИЛЯЦИИ.
Т.е. тщательно оттестированная программа, с большой вероятностью (если зависимости от платформы не внес по небрежности сам программист, но это находится и правится)
будет работать везде, где есть эта и выше версия JRE.
С использованием .conf-файлов, можно вынести все платформозависимые части из исходников (ex: пути к shell скриптам, regexp для разбора вывода shell скриптов, etc).
С использованием wrappers, таких как: http://wrapper.tanukisoftware.org/ можно запустить программу как сервис Windows или демон Linux/Solaris/HPUX/etc.

2. Дополнительный уровень абстракции (JVM и байт-код), позволяют меньше беспокоиться о том, что
- сервис “завалит” всю платформу или
- будет найдена уязвимость позволяющая получить права root unsafe коду.
Использование JDBC драйверов написанных полностью на Java, позволяет сократить количество ПО, которое требуется установить на сервер.

3. В отличие от (обычно) монолитного .exe файла, в который слито все, что нужно для работы. Классы Java образуют истинную модульность, позволяя модифицировать (обновлять) небольшие куски приложения, ДИНАМИЧЕСКИ определять что будет загружено и догружать по мере необходимости (в том числе из БД, сети).

4. Для Java существует большое количество функционально богатых широко протестированных библиотек логирования, с возможностью удобно группировать логируемую информацию по категории (обычно полный.путь.к.классу.Класс) и важности (trace, debug, info, warn, error). Без каких-либо изменений в исходном коде, логирование может быть отфильтровано, перенаправлено на консоль, по почте, в syslog, БД, файл, и даже лог windows. Новые библиотеки, такие как http://slf4j.org/ позволяют варьировать фактическую библиотеку логирования на конечной системе и практически до нуля снизить потерю производительности от логирования (параметризованые сообщения и отключение лишних логов).

5. Исключения Java помимо традиционных ТИПА исключения и поясняющего сообщения (message) содержат:
а) полный стек на момент создания исключения (stackTrace), включающий названия классов, методов, исходных файлов и номера строк в них;
б) «причину» (cause) - другое исключение (которое также может содержать cause), которое явилось причиной создания этого, что позволяет не тащить на верхние уровни абстракции низкоуровневые исключения, но при желании иметь возможность детально разобраться в том, что случилось.

6. Наиболее важным достижением (можно сказать уникальным на сегодняшний день) Java можно считать т.н. checked exceptions.
Если Вы встретите того, кто уверяет, что checked exceptions это плохо, смело плюньте ему в глаза.
Для разработки надежных устойчивых приложений checked exceptions полезны чрезвычайно!

Поясню на примере: в простом коде, открывающем соединение к БД, выполняющем запрос и генерирующем по полученным данным файл, порядка 80% строк могут сгенерировать исключения (драйверов БД нет, ошибка подключения к БД, ошибка работы с БД, ошибка работы с файлом и т.д.).
В случае Java и checked exceptions компилятор предупредит Вас обо всех проблемных участках и предложит что-то сделать (игнорировать, передавать наверх в чистом виде, передавать наверх «обернув», обрабатывать), т.е. полученный код сразу, после того как скомпилируется, будет устойчив к большинству ошибок! Это разительно отличается от ситуации, например, в Delphi, где любой вызов стандартной библиотеки, библиотеки логирования, библиотеки доступа к БД и т.д. может закончиться неожиданным исключением. Частично Вы найдете описание генерируемых исключений в документации, частично будете отлавливать в течении длительного времени, в процессе рабочей эксплуатации.

7. Мелкая радость для тех, кто в теме: sleep, wait, join и т.д. можно прервать из другого потока и они сгенерируют InterruptedException. На Delphi у меня была собственная библиотека с наследником Thread и заменой sleep (используя события).

К замеченным недостаткам Java можно отнести:
1. Крайне потребительское отношение к оперативной памяти. Java очень любит память ;-(

2. Меньший объем предложений хостинга в сравнении с PHP и Perl.

p.s.
Мелкие хотелки по синтаксису языка (syntax sugar ;-)
1. is вместо instanceof.

2. Объект as Тип вместо (Тип)объект т.к. приходится почти всегда делать ((Тип)объект).метод.

3. in для любых типов и .. для перечислимых типов, т.е:
чтобы можно было писать if (myStr in ("bla", "БЛА", "BLA", "бла")), if (myInt in (1,5,7..300)),
case 1..300: case 400:.

4. чтобы в switch () case могли участвовать любые объекты, а не только целые и enum.