Техасские исследователи создали язык программирования (ЯП) для химиков. Он позволяет описывать химические формулы языком, понятным человеку, легко вносить изменения и проверять их.
Зачем нужен новый язык?
Биохимики давно пытаются разработать инструмент, который позволил бы выстраивать структуру требуемого вещества с необходимыми свойствами. Зачастую их можно предсказать, но этот метод не всегда дает необходимый результат. Работая над решением этой проблемы, ученые из Техасского университета в Остине, США, создали химический язык программирования. Он получил название CRN++.
Молекулы взаимодействуют между собой посредством химических реакций, а CRN++ позволяет описать этот процесс математическим языком и запрограммировать биохимическую систему на определенные действия. Это похоже на принцип действия химического контроллера. С помощью CRN++ можно описать любые типы химических реакций.
Авторы нового ЯП поясняют, что благодаря их проекту ученые могут перевести сложные реакции в цифровой формат. Это позволит написанный на CRN++ код воспроизводить в неизменном виде на любом компьютере с одним и тем же результатом. Также появляется возможность изменять и модифицировать написанные алгоритмы, искать в них ошибки и при этом не использовать долгие и трудоемкие расчеты.
Особенности реализации
Ключевой особенностью реализации разработки стала возможность учитывать множество биохимических факторов и моделировать их взаимодействие. Авторы CRN++ относят созданный язык к императивной парадигме программирования. Несмотря на то, что код может показаться похожим на ассемблер, разработчики выступают против такого сравнения. По их словам, CRN++ не следует относить к машинным языкам – специфика описания химических реакций требует частого использования абстракций, поэтому проект ученых работает на более высоком уровне.
Пример реализации алгоритма, вычисляющего числа Фибоначчи на языке CRN++:
Последовательность Фибоначчи – математическая последовательность, каждый член которой является суммой двух предыдущих. Если энный член последовательности обозначается хn, то для всей последовательности справедливым будет уравнение: хn+2=хn+хn+1, первыми двумя членами которого будут x1=l и x2=1. Порядок последовательности при этом таков: 1, 1, 2, 3, 5, 8, 13, 21..., следующим числом будет 34, так как сумма 13 и 21 равна 34 и т.д.
Также авторы CRN++ проводят параллель с другими популярными языками вроде C, Java или Python. Разработка преследует те же цели, что и эти ЯП – упростить представление машинного кода для человека и дать инструменты для краткого описания сложных структур данных. Поэтому в CRN++ можно встретить привычные конструкции if/else и циклы. Чаще всего для программирования химических реакций применяются последовательные ветвящиеся алгоритмы, что также роднит новый ЯП с другими высокоуровневыми представителями императивной парадигмы.
«Мы предлагаем язык программирования, который соответствует всем типам химических реакций. При этом CRN++ – язык с открытым кодом, так что ученые могут вносить в него свои поправки и улучшать так, как им необходимо», – комментирует разработку Марко Васик, аспирант Техасского университета, один из авторов проекта.
Исходный код языка и примеры использования доступны на GitHub. Техническая документация опубликована на сайте библиотеки Корнеллского университета.
Проблемы биохимического программирования
Главный недостаток CRN++ на данный момент – погрешности при описании химических реакций. Из-за того, что язык манипулирует реальными показателями концентраций биохимических элементов, не всегда удается достичь идеального выходного значения – неизбежно встречаются отклонения.
Сейчас ученые пытаются минимизировать количество ошибок, используя доступные инструменты анализа.