Одной из задач в области биовычислений является обеспечение эффективного использования и взаимодействия широкого спектра быстро развивающихся вычислительных методов для моделирования, анализа и понимания сложных свойств и взаимодействий молекулярных систем.
Ученые разработали ряд вычислительных инструментов, таких как поверхности молекул, феноменологические потенциалы, различные программы стыковки и визуализации.
Количество доступных программ для расчета молекулярных свойств и моделирования молекулярных взаимодействий (например, молекулярная динамика, конформационный анализ, квантовая механика, дистанционная геометрия, методы стыковки) велико и быстро растет. Кроме того, эти программы имеют множество разновидностей и вариантов, используя различные силовые поля, методы поиска, алгоритмические детали.
Например, непрерывное пространство против дискретного, декартова против крутильного.
Каждая вариация имеет свой собственный характерный набор преимуществ и ограничений. Эти программы также имеют тенденцию быстро развиваться и обычно не являются компонентами, что затрудняет их совместную работу.
Одной из ключевых особенностей всех современных интерпретируемых языков является их расширяемость. Для решения этой задачи ученые рассмотрели способы, с помощью которых фреймворк сценариев на основе Python может интегрировать старый код и быть расширен новыми функциональными возможностями.
Существует три основных способа добавления новых функциональных возможностей в фреймворк скриптов:
- реализация в Python,
- "упаковка" существующего кода
- создание интерфейса к существующему коду, обладающего некоторыми коммуникационными возможностями.
- Реализация функциональности в Python:
Для кода, который еще не написан, высокий уровень Python и уже доступные расширения значительно облегчают его реализацию в Python, чем в C или C++. Даже если какой-то код уже существует, есть ряд случаев, когда мы решаем перереализовать его в Python. Это происходит, когда перекодирование в Python требует относительно небольшого количества кода и производительность Python кода, как ожидается, будет приемлемой. Такой подход обеспечивает основное преимущество независимости платформы.
- Упаковка существующих C, C++ и Fortran кодов:
Есть много случаев, когда нет смысла переделывать некоторые устаревшие коды в Python. Однако желательно иметь доступ к этому коду из Python. Это требует "упаковки" старого кода для Python. Рассмотрим следующий простой пример:
У нас есть функция "foo", которая принимает в качестве аргумента целое число и возвращает поплавок. В мире Python объектами являются целые числа и поплавки. Для того чтобы иметь возможность вызывать функцию foo из Python, нужно написать функцию на языке C, которая состоит з следующих шагов:
- принять объект Python в качестве аргумента;
- извлечь целочисленное значение из этого объекта;
- вызвать функцию foo для этого целочисленного значения;
- упаковать возвращенный объект в объект Python, представляющий собой поплавок;
- вернуть этот объект интерпретатору.
Этот код называется "код обёртки" (wrapper code). Как только получили wrapper code, необходимо скомпоновать его вместе с функцией foo и созддать общий объект (dll в мире Windows), который затем можно будет импортировать в интерпретатор Python. Конечно, это расширение теперь зависит от платформы. Этот процесс может быть в значительной степени автоматизирован с помощью генератора интерфейса Simple Wrapper Interface Generator (SWIG).
SWIG может генерировать код обёртки для нескольких интерпретируемых языков, таких как TCL, Perl, Guile и, конечно же, Python. Недавно была добавлена поддержка Java. Этот подход очень полезен для расширения Python с интерфейсами прикладных программ (API) существующего программного обеспечения. Как только такой API будет завернут кем-то, он может быть доступен для сообщества, и количество таких расширений будет расти. (Oracle, mySQL, OpenGL, DCOM и т.д. ... ).
- Код интерфейса:
Для устаревшего кода, который был разработан с некоторыми коммуникационными возможностями, например, через сокеты или используя стандартный протокол связи (HTTP, NNTP, SMTP и т.д.), поддержка, предоставляемая стандартными модулями Python для этих протоколов, обычно довольно проста для записи клиента на Python. Наконец, интерпретатор Python может быть встроен в приложение в качестве языка расширения. Помимо добавления скриптовых возможностей к программе, в которую встроен интерпретатор Python, это сделает все инструменты, перенесенные на Python, доступными в этой программе.
Этот "лингвистически ориентированный" или скриптовый подход имеет много преимуществ: резкий рост производительности, а также высокий уровень повторного использования кода. Конечно, он не является специфическим для Python и может быть воспроизведен на любом языке и даже на языках компиляции.
Самым важным изменением стал переход от написания программ или сценариев к написанию модулей или компонентов. Эта концепция хорошо известна сообществу разработчиков программного обеспечения на основе компонентов, но в исследовательской среде молекулярного моделирования, с ограниченными ресурсами для разработки и внедрения программных средств, Python сыграл важную роль.