Как работает дифференциальное исполнение?

Я видел несколько упоминаний об этом в Stack Overflow, но просмотр Википедии (соответствующая страница с тех пор была удалена) и Демонстрация динамического диалога MFC не помогли мне просветить. Может кто-нибудь объяснить это? Изучение принципиально иной концепции звучит неплохо.


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

Спасибо за проявленный интерес, Брайан. Мне интересно, что что-то простое кажется разочаровывающим. Для меня самые красивые вещи просты. Заботиться.

Mike Dunlavey 29.01.2009 04:00

Я думаю, что упускаю что-то важное. Прямо сейчас я думаю: «это просто». Если бы я действительно это понимал, я бы подумал: «Это просто. И действительно потрясающе и полезно».

Brian 29.01.2009 05:17

Я делал это так много раз на стольких языках, что замалчиваю тяжелые уроки, которые усвоил на этом пути, например важность макроса P и DD_THROW. Но когда вы освоитесь, вы сможете делать так много, что это вызывает привыкание.

Mike Dunlavey 30.01.2009 01:03

... Я до сих пор вижу, как люди представляют MVC как лучшую вещь, и я думаю, что лучше уйду на пенсию, чем придется делать это снова.

Mike Dunlavey 30.01.2009 01:06

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

Mike Dunlavey 01.02.2009 18:43

Я дал второй ответ, который дает игрушечную реализацию, которую вы можете пройти. (Я пробовал код, так что он работает.)

Mike Dunlavey 01.02.2009 20:27

@Mike Dunlavey: предназначена ли DE в первую очередь как альтернатива MVC для представления данных и манипулирования ими? Читая вашу вики и ваши записи здесь, я не могу сказать, применима ли DE для других целей. Спасибо.

Toybuilder 02.02.2009 16:59

@Toybuilder: Dynamic Dialogs - альтернатива MVC и одно (основное) приложение DE. Я также использовал DE как способ обнаружения изменений в небольшой базе данных, которая не полагается на перехват событий изменений. Я также пробовал это для общей "отмены" - путем сжатия FIFO.

Mike Dunlavey 02.02.2009 20:34

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

Mike Dunlavey 03.02.2009 17:53

@MikeDunlavey, пожалуйста, поделитесь своими примерами! Я имею в виду библиотеку или исходный код. Также я заметил, что ваша демо-версия MFC Dynamic Dialog - это GPL, что, конечно, вы делаете по своему выбору, но для меня это неудобно. :)

Prof. Falken 16.09.2015 11:28

@ Проф. Фалькен: Я действительно ничего не знаю о лицензиях. Если вы можете предложить лучший вариант и, может быть, как его изменить с того, что есть, я буду рад. Что касается примеров, я должен подумать, чем я могу поделиться. Я сделал личное приложение на C++ для закрытия благотворительных аукционов. Он делает много этого. Может быть, это было бы хорошо.

Mike Dunlavey 16.09.2015 15:19

@ Prof.Falken: Возможно, вы уже видели это, но есть пара видео на мой ютуб.

Mike Dunlavey 16.09.2015 15:33

@MikeDunlavey, это приложение отлично звучит, потому что оно делает что-то реальное. Действительно простой лицензией для понимания и использования во всех видах приложений, в том числе коммерческих с закрытым исходным кодом, является лицензия MIT: opensource.org/licenses/MIT(GPLv2 также хороша тем, что это Легко понять, но ограничивает то, что вы можете делать с кодом.) Если вы единственный значительный автор, вы можете просто изменить лицензию в любое время на MIT или любая другая лицензия - вы являетесь правообладателем. Видео не смотрел, посмотрю позже.

Prof. Falken 16.09.2015 15:34

@ Проф. Фалькен: Хорошо, я пытаюсь это сделать. Они дали мне новую 64-битную машину W7 и обновили меня до VS 2013, поэтому мне пришлось переустановить MySQL, и я изо всех сил пытаюсь перестроить приложение. Я постараюсь сделать это сегодня, а потом выложу в SF. Спасибо за интерес.

Mike Dunlavey 16.09.2015 16:15

Не хочу увеличивать вашу рабочую нагрузку, @MikeDunlavey, но если вы пропустили это, Source Forge попал в немилость из-за сомнительной деловой практики. Github.com - это то место, где сейчас крутятся крутые ребята. У них есть действительно хороший клиент Windows для W7 по адресу desktop.github.com

Prof. Falken 16.09.2015 16:22

@ Prof.Falken: Я только что сделал свой первый пост на github под своим именем и AucUI. Надеюсь, я все сделал правильно :)

Mike Dunlavey 16.09.2015 17:37

@MikeDunlavey, мне нравится! Я снял тебя в главной роли. :) Вы можете добавить LICENSE.txt

Prof. Falken 16.09.2015 17:42

@ Prof.Falken: Есть еще одно объяснение здесь.

Mike Dunlavey 17.09.2015 15:35

@ Prof.Falken: Удачи с этим? Я искал вашу электронную почту, чтобы спросить об этом, но получил не того человека.

Mike Dunlavey 25.09.2015 15:29

@MikeDunlavey Между тем у меня возникли проблемы с COM +. :)

Prof. Falken 25.09.2015 15:31

@ Prof.Falken: На GitHub есть начальная минимальная реализация на Javascript под моим именем под моим именем DiffExeInJS.

Mike Dunlavey 22.11.2016 03:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
84
21
24 952
2

Ответы 2

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

Базовый поток выглядит следующим образом:

Start loop:
for each element in the datastructure: 
    if element has changed from oldDatastructure:
        copy element from datastructure to oldDatastructure
        execute corresponding subroutine (display the new button in your GUI, for example)
End loop:
Allow the states of the datastructure to change (such as having the user do some input in the GUI)

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

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

Машина, следующий вывод которой зависит от текущего ввода и предыдущего вывода согласно (ВАШ КОД ЗДЕСЬ). Этот текущий ввод - не что иное, как предыдущий вывод + (ПОЛЬЗОВАТЕЛЬ, ВЗАИМОДЕЙСТВИЕ ЗДЕСЬ).

Заполните поверхность такими машинами, и она будет интерактивной для пользователя и в то же время представляет собой слой изменяемых данных. Но на этом этапе это все еще будет глупо, просто отражая взаимодействие пользователя с базовыми данными.

Затем соедините машины на вашей поверхности, дайте им возможность делиться заметками в соответствии с (ВАШ КОД ЗДЕСЬ), и теперь мы сделаем это умным. Он станет интерактивной вычислительной системой.

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

Я, кажется, помню, что когда это пришло мне в голову, действительно имел в виду аппаратную модель.

Mike Dunlavey 19.07.2012 15:08

Другие вопросы по теме