Язык программирования для живого компьютера
Набор логических элементов, которые можно записать в ДНК, позволяет создавать относительно сложные алгоритмы для «бактериального калькулятора».
В основе работы электронных устройств, от калькулятора до компьютера, лежат логические операции: например, если выполняются два каких-то условия, связанные логическим оператором AND, то машина что-нибудь посчитает, если же одно условие не выполняется, то машина ничего делать не станет. Можно ли то же самое сделать на основе живой клетки? Оказывается, можно, если логическим операциям поставить в соответствие молекулярно-биохимические процессы, когда связкам AND (и), OR (или) и другим будут соответствовать те или иные внутриклеточные реакции. Например, логический оператор AND может запустить синтез флуоресцентного белка: в клетку приходят извне два сигнала (в виде каких-то химических веществ), биохимические процессы выполняют аналог логического сложения и, если операция прошла успешно, в итоге синтезируется светящаяся белковая молекула. За последние годы такие живые калькуляторы сумели сделать в Высшей технической школы Цюриха и в Массачусетском технологическом институте. Более того, бактерию даже научили помнить результат, полученный в результате её «логических размышлений»: в экспериментах исследователей из Массачусетского технологического института кишечная палочка в ответ на какой-то сигнал из внешней среды синтезировала кусок ДНК, а специальный фермент, которым её снабдили, встраивал новосинтезированную ДНК в бактериальный геном, причём в строго определённое место. Таким образом, хромосома бактерии выступала в роли жёсткого диска; об этой работе мы писали два года назад.
Ну а если не ограничиваться одной-двумя логическими процедурами, а попытаться создать целый язык программирования, воплощённый в молекулярных взаимодействиях и биохимических реакциях? В статье в Science Кристофер Войгт (Christopher A. Voigt) из всё того же Массачусетского технологического института и его коллеги из Бостонского университета и Национального института стандартов и технологий как раз такой язык и описывают. В качестве основы исследователи использовали Verilog, один из так называемых языков описания аппаратуры, с помощью которых логические операции переводят в электрические микросхемы. Составными элементами «клеточного Verilog’а» стали логические элементы и сенсоры, от которых к логическим элементам поступали самые разные данные, от содержания кислорода или глюкозы в среде до температуры и уровня кислотности. Самым сложным, по словам авторов работы, было вписать в бактериальный геном 14 логических вентилей – так называют элементы цифровых схем, выполняющие элементарные логические операции (вроде уже упомянутых AND, OR, NOT и т. д.); трудность же была в том, чтобы химические реакции и межмолекулярные взаимодействия, которые служили алгоритмам материальной базой, не мешали бы ни друг другу, ни прочим клеточным процессам.
В результате удалось сконструировать 60 разных программных цепочек. Некоторые из них предназначались для измерений каких-то внешних параметров, некоторые же были посложнее: например, от клетки требовалось проранжировать три входящих сигнала и отреагировать на тот, который в данный момент оказался самым главным. Одна из логических цепей включала в себя семь элементарных логических операций, и для её записи понадобилось 12 000 генетических «букв» ДНК.
Все эксперименты делали на кишечной палочке, однако в перспективе исследователи хотят адаптировать этот язык программирования для других бактерий, таких как Bacteroides (представители которых живут в нашей пищеварительной системе) и Pseudomonas (обитающий на корнях растений); кроме того, сложному программированию хотят подвергнуть и дрожжей Saccharomyces cerevisiae. Можно представить, что в будущем удастся разработать системы программирования и для многоклеточных организмов, однако не стоит забывать, что успех программы будет зависеть от того, насколько сложен геном организма и насколько хорошо мы понимаем, как он работает. Варианты программных алгоритмов для эукариотических клеток, чей геном больше и сложнее, чем у дрожжей, появятся, скорее всего, не очень скоро.
Важно отметить, что основным результатом работы стали не бактерии-измерители кислорода, кислотности и т. д., а разработка системы программирования, состоящей из набора элементов-«кирпичиков». Чтобы заставить клетку делать то-то и то-то, не обязательно погружаться в подробности функционирования её сенсоров, молекулярных переключателей генетической активности, биологических часов и т. д. – всю процедуру можно собрать из готовых логических модулей. Иными словами, программу для клетки можно написать, зная только этот язык и вообще не вспоминая про ДНК.
В общем, биологи сделали ещё один шаг в сторону создания синтетических организмов, создаваемых под конкретную задачу и в соответствии с конкретным дизайном. Область применения таких «клеточных машин» может быть весьма обширной. Например, бактерии, настроенные запоминать присутствие какого-нибудь загрязнителя, могут работать хорошими экологическими детекторами, и, будучи выпущены в какой-то резервуар с водой, они могут хранить информацию о нежелательных веществах в течение довольно долгого времени. С другой стороны, похожую работу могут выполнять модифицированные бактерии-симбионты, которые будут фиксировать сведения о хороших и плохих веществах, поступивших в наш кишечник, а потом «докладывать» об этом врачам.