Статьи

Интервью: Аллан Дэвис, разработчик nbPython

Аллан Дэвис недавно опубликовал скринкаст с названием «nbPython» здесь , на NetBeans.tv . Позже скринкаст был размещен здесь, в зоне NetBeans. Python — один из немногих горячих языков, которым по-прежнему не хватает поддержки в IDE NetBeans, и теперь, когда языковые API-интерфейсы NetBeans становятся все более универсальными, настало время для создания поддержки, например, для Scala и Groovy, а также для: сейчас Python.

Итак, давайте познакомимся с Алланом, узнаем, что такое nbPython, и рассмотрим некоторые из магии API …

Можете ли вы рассказать нам немного о себе, кто вы, где и что вы делаете?

Конечно, меня зовут Аллан Дэвис. Я занимаюсь разработкой программного обеспечения около 15 лет. Я начал изучать и использовать Java в 1998 году, в 2003 году получил SCJP. Я начал работать с NetBeans в 2002 году, используя версию 3.3. Я перепрыгивал через разные IDE (JDeveloper, Eclipse, JBuilder и многие другие), каждый раз возвращаясь к NetBeans. Недавно я создал 3 разных приложения RCP.

В настоящее время я работаю разработчиком GIS / Java для General Dynamics. Мы разрабатываем веб-редактор карт JSF.

Что такое nbPython?

NbPython является расширением среды IDE NetBeans для поддержки языка программирования Python.

Как это началось и почему?

После нескольких сценариев ГИС с Python и pydev я подумал, что было бы здорово, если бы я мог использовать NetBeans. Примерно в то же время NetBeans 6.0 был выпущен с поддержкой Ruby. Я понял, что расширение Python идеально подойдет. Недавно наш офис также начал переход с Eclipse на NetBeans, поэтому потребности в этой разработке постоянно растут.

Что он стремится обеспечить?

NbPython стремится обеспечить первоклассную поддержку языка Python в NetBeans. Это включает в себя полный редактор, интерактивную консоль, менеджер платформы Python и поддержку Django. Полный редактор включает подсветку синтаксиса, завершение кода, подсказки редактора и множество других функций.

Что это дает прямо сейчас?

Прямо сейчас nbPython обеспечивает подсветку синтаксиса, базовый шаблон проекта Python и базовое выполнение любого скрипта Python.

Вы, должно быть, использовали довольно много API-интерфейсов NetBeans. Какие и каким был опыт?

С тех пор, как я начал работать с NetBeans, в API было много изменений. Для этого проекта одним из моих любимых был GSF. GSF, или Generic Scripting Framework, используется для обеспечения поддержки языков сценариев, таких как Ruby, Python и PHP. Это облегчило некоторые требования к кодированию, что позволило упростить этапы кодирования. Главный пример этого — само окно редактора:

Единственные элементы, которые я должен определить, это Lexer и языковой файл, который расширяет DefaultLanguageConfig. Затем я создаю ссылку на GSF в layer.xml , как показано в следующих примерах:

public class PythonLanguage extends DefaultLanguageConfig {

@Override
public String getLineCommentPrefix() {
return "#"; //NOI18N

}

public Language getLexerLanguage() {
return PythonTokenId.language();
}

public String getDisplayName() {
return "Python";
}

@Override
public String getPreferredExtension() {
return "py";
}

@Override
public Parser getParser() {
return new PythonParser();
}

@Override
@SuppressWarnings("deprecation")
public boolean hasStructureScanner() {
return true;
}

@Override
public StructureScanner getStructureScanner() {
return new PythonStructureScanner();
}

}
<folder name="GsfPlugins">
<folder name="text">
<folder name="x-python">
<file name="language.instance">
<attr name="instanceOf"
stringvalue="org.netbeans.modules.gsf.api.GsfLanguage"/>
<attr name="instanceClass"
stringvalue="net.java.dev.nbpython.editor.PythonLanguage"/>
</file>
<file name="structure.instance">
<attr name="instanceClass"
stringvalue="net.java.dev.nbpython.editor.PythonStructureScanner"/>
</file>
</folder>
</folder>
</folder>

Еще один замечательный API для NetBeans — это extExecution. Этот API-интерфейс позволяет упростить создание внешних процессов выполнения в NetBeans. Мы используем его для исполнения как на Jython, так и на Cpython.

// Setup process Information 
ExternalProcessBuilder processBuilder =
new ExternalProcessBuilder(command);
processBuilder.pwd(new File(workingDirectory));
processBuilder.addArgument(commandArgs);
processBuilder.addArgument(script);
processBuilder.addArgument(scriptArgs);
processBuilder.addEnvironmentVariable("PYTHONPATH", path);
...
//build Service
ExecutionService service =
ExecutionService.newService(
(Callable<Process>) processBuilder.create(),
execBuilder.create(), displayName);
// Start Service
service.run();

Опыт использования этих API был очень хорошим. Я не могу ни на что жаловаться.

У вас есть советы, чтобы поделиться с другими, делающими подобные вещи?

Один из самых больших советов, которые я могу предложить, — это использовать списки рассылки. Каждый хочет поделиться тем, что он сделал. Кроме того, примеры размещены и проверить модуль «contrib», а также «trunk». Когда я впервые начал разрабатывать модуль Lexer и пытался использовать ANTLR для обработки грамматики, я искал пример того, как заставить это работать. Тот, который я нашел, связан с NetBeans 6.0 Lexer. На этой странице указан код с сервера CVS, который не был перенесен в Mercurial. Я отправил вопрос в список рассылки для разработчиков и указал на модуль javafx.editor, который делал то же самое, что и я. Изучив их код, я смог без проблем создать Lexer.

Это только вы или другие работают над этим? Могут ли другие присоединиться?

Я никак не мог сделать это один. Проект открыт, поэтому присоединиться может каждый. Я начал строить команду из друзей на работе. Мы работаем над этим проектом в наше свободное время. Интерес к проекту был невероятным. Не прошло и двух дней после публикации страниц проекта на java.net , я начал получать запросы на новые функции. Такие вещи действительно питают меня. У меня также был большой интерес со стороны Sun, Tor Norbye (Ruby) и Martin Adamek (Groovy) были незаменимы, чтобы помочь мне начать работать с GSF.

Если вы хотите присоединиться, перейдите на страницу проекта ( http://nbpython.dev.java.net ). Запросите членство в проекте, и пока вы там, подпишитесь на список рассылки для разработчиков ( https://nbpython.dev.java.net/servlets/ProjectMailingListList ).

Какой срок отсюда? Как часто и что вы будете публиковать дальше?

Мы нацелены на синхронизацию с выпуском NetBeans версии 6.5, а выпуски этапов выпускаются примерно каждые 2-3 недели. Мы хотим, чтобы все могли видеть, как продвигается проект. В следующем выпуске будет несколько улучшений редактора и менеджер платформы Python.

Как мне начать использовать его?

Чтобы начать использовать программу, вы можете просто скачать биты со страницы проекта в разделе « Документы и файлы ». Там вы найдете архивированные загрузки всех файлов этапов, включая исходный код того времени. Или, если вы так склонны, вы можете проверить исходный код Subversion. Затем откройте проект в последней сборке разработки среды IDE NetBeans и затем … просто нажмите «Выполнить»!