18.09.09

[Google] Noop - это вам не хухры-мухры

Вольный, впрочем как всегда, перевод вступительного слова к новому языку программирования от (в большей части) сотрудников Google.
-------------------------------
Что такое Noop?

Noop (своеобразное "ничего", как инструкция NOP в ассемблере) - это новый экспериментальный язык программирования, взявший всё лучшее из языков старых и новых, впитавший в себя лучшие находки индустрии и отринувший худшие, в том числе и касающиеся синтаксиса. Noop изначально предназначен для запуска на виртуальной машине Java (JVM).

Кто стоит за Noop?

Noop - это совместный проект сообщества единомышленников, состоящего из программистов и сочувствующих (список на сайте). Мы собрались из нескольких компаний, включая, но не ограничиваясь, Google.

Мировозрение Noop.

Разработчики Noop прекрасно знают о лучших достижениях и чудовищных промахах в мире программного обеспечения, разработки ПО и эволюции языков программирования. Noop будет поддерживать прекрасное и бороться с чудовищным настолько хорошо, насколько это возможно. Например:

Noop поощряет:
- Dependency injection (внедрение зависимости) так называемые внешние зависимости вновь созданного объекта;
- Testability (тестируемость) - шов между между каждой парой классов;
- Immutability (неизменяемость);
- Читаемость кода важнее любой синтаксической функции;
- Документирование, которое позволяет всегда иметь актуальную документацию;
- Properties, strong typing, современная и разумная stdlib.

Noop порицает:
- Статику, в любом ее проявлении (статические методы и т.д.);
- Реализацию наследования (subclassing);
- Примитивы;
- --Ненужную-- шаблонизацию.

Почему Noop?
Dependency injection (внедрения зависимости) изменили представление о том, как разрабатывать программное обеспечение. Spring догнал EJB в сфере коммерческих приложений, и Guice и PicoContainer сегодня являются важной частью хорошо написаных и спроектированных приложений.

Автоматизированное тестирование, в особенности Unit Testing, также является важнейшим элементом построения надежного программного обеспечения, без труда поддерживаемого и легко масштабируемого. Любой приличный разработчик программного обеспечения обязан писать тесты, лучшие из них автоматизированы и охватывают большую кода.

Noop - новый язык программирования, который выполняется на виртуальной машине Java, и в своей исходной форме весьма схож с Java. Смысл сего мероприятия в том, чтобы построить систему зависимостей и тестирования в языке с самого его зарождения, а не полагаться на сторонние библиотеки, как это сейчас делают все другие языки.

Неизменяемость и минимальная зона видимости переменных воодушевляют на использование final/const поведения по умолчанию и обеспечивают легкий доступ к функциональному стилю программирования. Тестируемость предполагается путем предоставления возможности внедрения зависимостей (Dependency injection) на уровне языка, а также компактным синтаксисом конструкторов внедрения зависимостей.

Запланировано три пути использования исходных файлов Noop:
- Java транслятор: транслирует Noop код в исходные коды Java. Позволяет вам использовать Noop без преобразования вашего текущего кода, но не все возможности рантайма языка поддерживаются;
- Интерпретация: читает и исполняет код Noop через интепретатор. Медленно, зато будет иметь интерфейс командной строки;
- Компиляция: компиляция непосредственно в байткод Java.
-------------------------------

Кто перейдет по всем ссылкам в переводе и прочитает все статьи, тому +10 к скиллу "Наука".

Традиционный, но ни о чем не говорящий, HelloWorld.noop:

import noop.Application;
import noop.Console;

class HelloWorld(Console console) implements Application {

Int main(List args) {
String s = "Hello World!";

console.println(s);
return 0;
}
}

На выходных более подробно поковыряюсь и что-нибудь еще плохое-хорошее расскажу.

Итак, зачем и кому оно нужно? Будет нужно? Нужно ли?

Я тут размышлял 10 минут об этом, ничего здравого мне на ум не приходит. Разве что (судя по интерпретации и компиляции в Java код / байткод) Google готовит запасной вариант на случай «новая, вкусная, но немножко дорогая и ограниченная патентами Java от Oracle!».