Есть ли в ДНК эквивалент операторов IF, циклов WHILE или вызовов функций? Как насчет GOTO?

Есть ли в ДНК что-нибудь вроде операторов IF, переходов GOTO или циклов WHILE?

В разработке программного обеспечения эти конструкции выполняют следующие функции:

  • IF-операторы: оператор IF выполняет код в последующем блоке кода, если выполняется какое-то конкретное условие.
  • Циклы WHILE: код в последующем блоке кода выполняется столько раз, сколько указано, или до тех пор, пока выполняется определенное условие.
  • Вызовы функций: код временно пропускает последующий блок кода, выполняя вместо него другой блок кода. После выполнения другого блока кода код возвращается (иногда с некоторым значением) и продолжает выполнение следующего блока.
  • Операторы GOTO: код пропускает последующий блок кода, вместо этого переходя непосредственно к другому блоку.

Присутствуют ли конструкции, подобные этим, в ДНК? Если да, то как они реализованы и как называются?

в то время как (теломеры> 0) {DNA.replicate; cell.divide; теломеры-= 1; сон (x);}
Вызов функции — это просто красивое GOTOвыражение.
Для меня GOTO имеет смысл только для последовательного выполнения кода, и это не относится к ДНК (много транскрипций происходит все время параллельно).
@fileunderwater Последовательное выполнение происходит во время сигнальных каскадов
@MichaelKjörling Вызов функции требует наличия отдельной среды для функции. Он может принимать аргументы в качестве входных данных и возвращать некоторые выходные данные. GOTOс другой стороны, является частью основной программы и просто управляет потоком инструкций. В то время как информационный поток в биологической системе можно контролировать, практически невозможно обеспечить отдельную среду, необходимую для истинных функций.
@WYSIWYG да, но разве это не случай положительной обратной связи (или активации/запрета), аналогичной операторам IF, а не GOTO, как при выполнении-обходе-выполнении. Просто мое восприятие, но я недостаточно знаю о специфике транскрипции ДНК, чтобы что-то сказать. Может быть, показывает, как сложно нарисовать четкие аналоги программирования-ДНК.
@fileunderwater Существуют программные альтернативы GOTO. В большинстве языков это устарело. Таким образом, действие GOTOможет быть выполнено другими операторами. Так что вы правы. Более того, GOTOтребует меток; хотя промотор для определенного TF можно рассматривать как метку, это скорее логическое условие, которое необходимо выполнить. Поэтому более важным, чем фактические заявления, является лежащая в их основе логика.
Я думаю, что с ДНК мы ближе к самим битам и байтам или, может быть, к машинному коду, чем к языку программирования.
@WYSIWYG Верно, хотя большинство операторов потока управления преобразуются в машинную инструкцию, аналогичную GOTO, например переход или условный переход.
@skymninge Даже на уровне битов и байтов само оборудование действует как своего рода машина Тьюринга.
Крайне важно понимать, что на вашем компьютере нет циклов и вызовов функций. В нем есть сравнения и скачки.
ДНК — это не программа в том смысле, в каком вы думаете. Я полагаю, что это можно было бы считать декларативной программой с надлежащим интерпретатором?
Я почти уверен, что ДНК больше похожа на общие данные, чем на полноценную исполняемую программу. Это файл данных, который использует биопрограмма.
Я думаю, что ДНК больше похожа на HTML-страницу: это просто объявление того, какие элементы могут быть видны на странице (хотя display:noneв ДНК это вполне разрешено); эти элементы могут включать белок Javascript. Тут и там присутствует рудиментарная форма PHP (см. ответ @WYSIWYG).
Это , вероятно, актуальная статья, которую, я думаю, еще никто не упомянул.
@WYSIWYG Я бы сказал, что активация ядерных рецепторов может представлять собой вызов функции. Они висят в цитозоле до тех пор, пока не активируются путем связывания своего лиганда, а затем перемещаются в ядро, чтобы выполнить свою функцию.
Изучать таким образом генетику и молекулярную биологию; может ли кто-нибудь порекомендовать мне несколько книг или, по крайней мере, какую область обучения я должен искать?

Ответы (7)

Биологические примеры, похожие на операторы программирования:

  • IF: Активатор транскрипции; когда он присутствует, ген будет транскрибирован. Как правило, события не прекращаются, пока не пропадет сигнал; программа заканчивается только со смертью клетки. Таким образом, IFоператор всегда является частью цикла.
  • WHILE: репрессор транскрипции; ген будет транскрибироваться до тех пор, пока не исчезнет репрессор.
  • Нет эквивалентов functionзвонков. Все события происходят в одном и том же пространстве и всегда есть вероятность вмешательства. Можно возразить, что органеллы могут действовать как компартменты, которые могут иметь functionсходные свойства, но они очень сложны и не являются просто какими-то устройствами ввода-вывода.
  • GOTOвсегда зависит от условия. Это может произойти в случае определенных сетевых соединений, таких как петли прямой связи и разветвленные пути. Например, если есть такой сигнальный путь, как этот:
    A → B → C и есть другое соединение D → C , то, если каким -то образом D активируется, это напрямую повлияет на C , делая A и B ненужными.

Логические ворота были построены с использованием синтетических биологических схем. См. этот обзор для получения дополнительной информации.


Примечание

Молекулярно-биологические процессы нельзя напрямую сравнивать с компьютерным кодом. Важна лежащая в основе логика, а не сама конструкция утверждения, и эти примеры не следует воспринимать как абсолютные аналогии. Следует также отметить, что ДНК — это всего лишь набор инструкций, а не полностью функциональная сущность (она в некоторой степени функциональна). Однако, даже будучи просто кодом, он сравним с кодом HLL, который должен быть скомпилирован для выполнения своих функций. См. также этот пост.

Важно также отметить, что клетка, как и многие другие физические системы, имеет аналоговую природу. Поэтому в большинстве ситуаций нет 0/1 (двоичного) значения переменных. Рассмотрим экспрессию генов. Если присутствует активатор транскрипции, ген будет транскрибирован. Однако, если вы продолжаете увеличивать концентрацию активатора, экспрессия этого гена будет увеличиваться, пока не достигнет точки насыщения. Так что цифровой логики здесь нет. Сказав это, я бы добавил, что поведение переключения возможно в биологических системах (включая экспрессию генов) и также используется во многих случаях. Определенные виды регулирующих сетевых структур могут привести к такой динамике. Кооперативность с положительной обратной связью или без нее является одним из механизмов, которые могут реализовать переключающее поведение. Подробнее читайте осверхчувствительность . Также проверьте « Может ли молекулярная генетика сделать логическую переменную из непрерывной переменной? »

Я бы классифицировал сплайсинг интронов как своего рода GOTO, поскольку он по существу пропускает «указатель» рибосомы на другое значение.
Очень хорошо! Где поместятся альтернативные рамки считывания?
@MarchHo Да, это тоже можно считать примером. Можно провести множество аналогий. Спинномозговые рефлексы могут служить примеромBREAK
@CRags Я думаю, альтернативные рамки чтения могут быть примером SWITCH-CASE. Все это зависит. Логический вентиль здесь имеет большее значение, чем операторы программы. Ведь эти утверждения основаны на логических тестах.
Хотя ваши примеры умны, я чувствую, что аналогия, используемая здесь (ДНК против компьютерного кода), настолько плоха, что может ввести в заблуждение.
@JackAidley Это правда, что молекулярную биологию нельзя напрямую сравнивать с компьютерным кодом. Я предназначал этот ответ для тех, кому интересно, может ли клетка выполнять вычисления, как компьютерная программа. Я уже упоминал, что важна логика, лежащая в основе, а не сама конструкция утверждения, и эти примеры не следует воспринимать как абсолютные аналогии. Я добавлю это в ответ, чтобы избежать путаницы.
И @JackAidley Я нигде не упоминал, что ДНК выполняет все функции. ТФ представляет собой белок. Каким бы сложным это ни было, свойство системы можно предсказать на основе кода ДНК.
Я действительно думаю, что компартментализации, осуществляемые клеточными мембранами, можно сравнить с функциями. Это впечатляющий ответ @WYSIWYG
WYSIWYG, хорошо, что вы не упомянули, что ДНК выполняет все описанные вами функции, но вам действительно следует рассмотреть возможность прямого упоминания в своем ответе, что ДНК не выполняет и не может их выполнять; тот факт, что компьютерный код описывает такие управляющие структуры, на самом деле является довольно фундаментальным аспектом полноты по Тьюрингу, и в контексте этого вопроса очень важно отметить, что ДНК не имеет этой функции.
@KyleStrand IMO, ни ДНК, ни код HLL не выполняют эту функцию. Оба они просто дают инструкции; ДНК гораздо более загадочна. Тот факт, что машина Тьюринга не была разработана с использованием кода ДНК, не означает, что это теоретически невозможно. Это только мое мнение. Есть несколько различий между ДНК и компьютерным кодом. Цель этого ответа состояла в том, чтобы просто указать на некоторые элементарные сходства. Я добавил ваше предложение, хотя.
@WYSIWYG Спасибо. Я предполагаю, что я имел в виду под «выполнением всех функций» скорее то, что HLL (и LLL) предписывают фактический процесс их выполнения — где происходят переходы и т. д. — даже если они фактически не выполняют этот процесс сами. ДНК, насколько нам известно, этого не делает (хотя, по общему признанию, она может делать гораздо больше подобных вещей, чем мы думаем). Я предполагаю, что по аналогии, если ДНК похожа на чертеж, код чем-то похож на чертеж, объединенный с рабочими инструкциями для людей, которые фактически строят вещь, описанную в чертеже.
«органеллы» кажутся обработчиками прерываний или, может быть, событиями. Я думаю, что язык, основанный на событиях, может быть лучшим сравнением для понимания логики.
Для выполнения вычислений все, что вам нужно, это просто условный переход (т. е. если X переходит в P). Все остальные операторы управления предназначены только для удобства и могут быть смоделированы условным переходом. Вычислительная система, которая имеет только условный переход для управления, называется завершенной по Тьюрингу.
Органеллы @lesto похожи на подпрограммы, которые постоянно взаимодействуют с основной программой. У них есть собственная среда и некоторый уровень автономии, но они зависят от клетки.
@LieRyan Согласен. Все, что вам в основном нужно, это логические вентили.
Есть несколько гипотез относительно микроокружения хроматина, которые аналогичны пространствам имен в программировании.
«Биологические примеры» — Но вопрос касается ДНК, поэтому очевидно, что этот ответ неверен. Показывает, что вы не должны позволять некоторым людям голосовать.
@David, я согласен, что этот вопрос не очень хорош (и ответ тоже), но, к сожалению, наиболее правильно поставленные (и изученные) вопросы часто не так популярны. Да и вообще, с чем вы не согласны по поводу "биологических примеров"? Под этим термином я имел в виду аналогичные ситуации в биологических системах. Обратите внимание, что ОП сравнивает ДНК с компьютерной программой. Поскольку ДНК кодирует всю биологическую информацию, ДНК является программой. Большинство моих примеров связаны с регуляцией транскрипции, т.е. прямыми операциями на ДНК. Таким образом, ответ, хотя и не отличный, не является неправильным.
Извиняюсь. Не заметил, что это ты. Не хочу ввязываться в пламенную войну. Просто вопрос кажется мне типичной ложной аналогией ученого-компьютерщика между явной информацией в коде и в ДНК, которая спровоцировала мой недавний ответ на старый вопрос. Информация в ДНК не является явной, и я сомневаюсь, что вы когда-нибудь сможете понять эффекты экспрессии белков, читая только ДНК.
Я бы сказал, что хромосомная регуляция — это своего рода вызов функции (ДНК — это 3D) ДНК активируется в одной части хромосомы. Затем ниже по течению в какой-то момент это вызывает открытие хромосомной области для транскрипции ниже по течению начальной активации ДНК (метилирование хромосомных областей). Какой-то глупый вопрос, если честно. Мы далеки от того, чтобы синтетически смоделировать всю систему как in vitro, так и in silico. Слишком много движущихся частей, для которых у нас еще даже нет моделей взаимодействия с целыми важными областями, такими как биофизика, даже не разделяющими их важность.

ДНК не аналогична компьютерному коду, который делает поиск в нем подобных конструкций бессмысленным. Чтобы привести пару простых примеров, почему это так:

  • Компьютерный код имеет последовательный порядок выполнения; ДНК действует параллельно и вне последовательности, она не «исполняется».

  • Компьютерный код имеет строгое и последовательное значение, поэтому строка if x==4 : x=7всегда делает одно и то же; кодирующая ДНК преобразуется в аминокислоты, и именно сложные химические взаимодействия между этими кислотами придают белкам их функцию, поэтому ни одна часть кодирующей ДНК не может быть понята вне ее белка.

В биологических системах есть некоторые пути, которые работают подобно компьютерам, но вам следует искать их на уровне белков, а не на уровне ДНК, и даже в этом случае вы должны быть предельно осторожны, чтобы ваша аналогия не нарушила вашего понимания. что происходит на самом деле.

Когда вы говорите, что ДНК нужны белки для выполнения своих функций, тогда компьютерным программам также нужны компиляторы для выполнения их кода. В конечном счете, именно машинный язык говорит компьютеру, что делать.
Я не говорю, что ДНК нужны белки для выполнения своих функций; Я говорю, что ДНК принципиально отличается от компьютерного кода.
Хорошо, но существуют массово параллельные языки программирования, в которых каждая строка выполняется одновременно и может выполняться не по порядку. И то, что строки являются контекстно-зависимыми, не делает его не языком программирования, а просто делает его намного сложнее. Тем не менее, то, как я понимал ДНК, было больше данными, чем программой.
Даже в языках параллельного программирования каждый оператор выполняется последовательно. Просто одновременно выполняется несколько «потоков» выполнения. ДНК не является ни данными, ни программой. Аналогия совершенно неточная.
Я думаю, что ДНК — это данные и программа одновременно. Его регуляторы выражения действуют как логические предложения, так что аналогия по меньшей мере любопытна.

Конечно, можно провести некоторые сравнения между тем, как гены экспрессируются в ДНК, и логическими функциями, но они не очень удачны.

Но синтетическая биология — это действительно расцветающая новая область, которая пытается интегрировать логические функции в биологию, см., например, Siuti et al (2013) .

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

Просто чтобы добавить к предыдущим ответам, интерференция транскрипции (см., например , Shearwin et al., 2005 ) может рассматриваться как форма утверждения IF (или WHILE) в том смысле, что:

if(x transcribed){not y transcribed}

Однако интерференция не обязательно должна быть бинарной, и более распространены градуированные ответы. Транскрипционная интерференция также может иметь место на стадии РНК (см., например , Xue et al, 2014 ), с использованием антисмысловой РНК и часто обеспечивающей петлю отрицательной обратной связи, но затем интерференция удаляется из ДНК и не представляет собой прямое утверждение IF. аналог на стадии ДНК.

Для меня GOTO в основном имеет смысл для последовательного выполнения кода, и это не относится к ДНК (много транскрипций происходит все время параллельно). В более общем плане параллельное «выполнение» ДНК наряду с непрерывными взаимодействиями и петлями обратной связи между ДНК, транскриптами и белками (среди прочего) также означает, что клеточные процессы гораздо менее четкие и прослеживаемые, чем компьютерный код, а это означает, что компьютер код — очень неудачная метафора клеточных процессов и функционирования ДНК.

Я думаю, что внутренний параллелизм является ключевым моментом. Биологическая «обработка» на самом деле больше аналоговая, чем цифровая, поскольку даже дискретное срабатывание нейрона является кодированием аналоговых процессов в нейроне. Процессы клетки гораздо лучше аппроксимируются как ужасно (великолепно?) сложный набор перекрывающихся, перекрёстных аналоговых петель обратной связи. Частью этого является экспрессия генов, хотя она тесно связана со многими другими клеточными процессами.
@DanBryant Отличное описание и согласен - я попытался уточнить этот момент.

Как сказал WYSIWYG, для вызовов функций нет эквивалента, так как всегда будут некоторые помехи. Однако можно утверждать, что некоторые модульные пути (например, передача сигналов апоптоза) можно рассматривать как «блок кода», где определенный вход (почти) обязательно приведет к определенному эффекту. Аналогия с вызовами функций заключается в том, что при описании множества различных механизмов более короткий и эффективный «код» позволяет учитывать все, например, между. активация каспазы и утечка цитохрома как один блок. Кроме того, маркировку белка убиквитином можно рассматривать как функциональный вызов деградации.

Если вас интересуют строительные блоки для программирования с биологией, ознакомьтесь с программой biobricks.org, целью которой является определение модульных частей (кирпичиков), которые могут быть датчиками, логическими функциями, эффекторами и т. д.

Есть помехи и в вызовах функций: они называются глобальными переменными, конфигурацией системы, аппаратной поддержкой и т.д.

Что касается вызовов функций:

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

а также

Как сказал WYSIWYG, для вызовов функций нет эквивалента, так как всегда будут некоторые помехи.

Я думаю, что ядерные рецепторы — отличный пример вызова функции. Они висят в цитозоле, позволяя нормальному программированию функционировать нормативным образом. При активации своим лигандом они перемещаются в ядро, чтобы активировать подпрограммы репрессии/активации генов и последующие нижестоящие процессы.

Таким образом, можно даже утверждать, что большинство начальных взаимодействий лигандов, запускающих клеточную передачу сигналов, являются вызовами функций.

В дополнение к отличному ответу WYSIWYG, на более низком уровне есть некоторые конструкции, подобные программированию:

  • ФУНКЦИОНАЛЬНЫЙ ПРИЗЫВ - замена одной субъединицы внутри сложного белка, собранного из множества субъединиц, каждая из которых кодируется отдельными генами. Это также можно рассматривать как КОМПОЗИЦИЮ, еще одну концепцию программирования.
  • IF - альтернативный сплайсинг, участок ДНК (экзон) может быть включен или не включен в транскрипт, кодирующий конечный белок.
Я отменил редактирование, которое вернуло тики вокруг частей этого ответа, которые не являются кодом. Здесь FUNCTION CALL, COMPOSITION и IF — это не код, а концепции программирования.