Каково различие между данными и кодом?

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

Более длительное время со многими задачами означает повторное рассмотрение одной и той же задачи на большом расстоянии (например, более резкое поведение).

(Примечание: я обычно использую переключатели задач 1 мс на MCU очень низкого уровня с очень хорошими результатами, всего около 5-10 задач.)

15
задан Phil H 13 March 2009 в 13:59
поделиться

11 ответов

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

Большинство достаточно крупных проектов разработано для создания "выпусков", которые являются одним большим пакетом, произведенным в 3-месячном (или дольше) циклы, протестированные экстенсивно, и не могут быть изменены впоследствии кроме плотно управляемых путей. "Код" совершенно определенно не может быть изменен, таким образом, что-либо, что действительно должно быть изменено, должно быть факторизовано и сделанные "данные конфигурации" так, чтобы изменение его стало приемлемым те, задание которых он должен гарантировать, что выпуск работает.

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

Это уже более твердо, чем большинство людей думает, когда это - действительно всего несколько строк и чисел, которые настроены (я лично засвидетельствовал, что производственная система мейнфрейма отказывает, потому что этому установили одно булево значение по-другому, чем другая система, с которой это говорило). Когда Ваши "данные конфигурации" содержат сложную логику, почти невозможно достигнуть. Но ситуация не будет немного лучше ust, потому что Вы используете плохо разработанный для данного случая "язык" конфигурации правил вместо "реального" кода.

8
ответ дан 1 December 2019 в 03:35
поделиться

Отношения между кодом и данными следующие:

код, после того, как скомпилировано в программу обрабатывает данные в то время как выполнение

программа может извлечь данные, преобразовать данные, данные загрузки, генерировать данные...

Также программа может извлечь код, преобразовать код, код загрузки, сгенерировать код tooooooo...

Следовательно код без скомпилированного или interperator бесполезен, данные всегда стоят..., но код, после того, как скомпилировано может сделать все вышеупомянутые операции....

Для, например)

Sourcecontrolsystem обрабатывают Исходные коды

здесь сам исходный код является кодом

Backupscripts обрабатывают файлы

здесь файлы являются данными и так далее...

0
ответ дан 1 December 2019 в 03:35
поделиться

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

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

Это - компромисс между гибкостью и эффективностью. Исполняемые данные (как правила XML) предлагают больше гибкости (иногда), в то время как те же данные/правила при кодировании как часть приложения будут работать более эффективно, но изменение его часто становится громоздким. Другими словами, исполняемые данные легко развернуть, но неэффективны и наоборот. Таким образом, в конечном счете решение лежит на Вас - разработчик программного обеспечения.

Исправьте меня если я неправильно.

0
ответ дан 1 December 2019 в 03:35
поделиться

Я сказал бы, что различие между данными, кодом и конфигурацией - что-то, чтобы быть сделанным в контексте конкретного компонента. Иногда это очевидно, иногда меньше.

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

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

Это - очень мощный способ разработать.

Применение этого к базовому вопросу ("Как Вы кодировали бы вышеупомянутый пример?"), одна опция могла бы состоять в том, чтобы принять или разработать Предметно-ориентированный язык (DSL) высокого уровня для определения правил. При запуске, или когда сначала необходимый, сервер читает правило и выполняет его.

Предоставьте администраторскому интерфейсу разрешение администратора к

  • протестируйте новый файл правила
  • замените текущую конфигурацию этим из нового файла правила

... все из которых произошли бы во времени выполнения.

DSL мог бы быть чем-то столь же простым как синтаксический анализатор таблицы или синтаксический анализатор XML, или это могло быть что-то столь же сложное как язык сценариев. От C легко встроить Python или Lua. От Java легко встроить Groovy или Clojure.

Вы могли переключиться в скомпилированный код во времени выполнения с умным соединением или приемами classloader. Это кажется более трудным и менее ценным, чем встроенная опция DSL, по-моему.

0
ответ дан 1 December 2019 в 03:35
поделиться

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

То же происходит для поведений / код. Это не о том, где Вы решаете поместить его или как Вы принимаете решение представить его.

0
ответ дан 1 December 2019 в 03:35
поделиться

Строка между данными и кодом (программа) является расплывчатой. Это - в конечном счете просто вопрос терминологии - например, Вы могли сказать, что данные - все, что не является кодом. Но, как Вы записали, они могут быть счастливо смешаны (хотя обычно лучше разделить их).

0
ответ дан 1 December 2019 в 03:35
поделиться

Важное примечание - то, что Вы хотите выделить часть своего кода, который выполнится тот же каждый раз, (т.е. применение скидки) от части Вашего кода, который мог измениться (т.е. продукты, которые будут обесценены, или % скидки, и т.д.)

Это просто для безопасности. Если скидка изменяется, Вы не должны будете переписывать свой код скидки, необходимо будет только войти дисконтный репозиторий (DB, или файл приложения или XML-файл, или однако Вы принимаете решение реализовать его), и сделайте небольшое изменение числа.

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

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

1
ответ дан 1 December 2019 в 03:35
поделиться

Данные являются информацией, которые обрабатываются инструкциями под названием Код. Я не уверен, что чувствую, что существует размывание в OOD, существуют все еще свойства (Данные) и методы (Код). Теория OO инкапсулирует обоих в объект гештальта, названный Классом, но они все еще дискретны в Классе.

Как гибкий Вы хотите сделать свой код в течение выбора. Включая постоянные величины (что Вы делаете, при помощи того, если операторы, как описано выше) негибко, не повторно обрабатывая Ваш источник, тогда как использование динамично полученных данных более гибко. Любой подход неправильно? Я сказал бы, что это действительно зависит от обстоятельств. Как сказанный Leppie, существуют определенные точки 'данных', которые являются invariate, как дни недели, которая может быть трудно кодирована, но даже там может быть выгодно сделать это динамично при определенных обстоятельствах.

2
ответ дан 1 December 2019 в 03:35
поделиться

Все это зависит от требования. Если данные похожи на данные поиска и часто изменяются, Вы действительно не хотите делать это в коде, но вещах как День Недели, не должен chnage в течение следующих 200 лет или так, так код это.

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

2
ответ дан 1 December 2019 в 03:35
поделиться

В Lisp Ваш код является данными, и Ваши данные являются кодом

В Прологе пункты являются условиями, и условия являются пунктами.

1
ответ дан 1 December 2019 в 03:35
поделиться

Это - довольно философский вопрос (который я люблю), таким образом, я отвечу на это философским способом: с ничего особенного для резервного копирования его.;)

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

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

К компилятору (или VM), код является на самом деле данными, на которых он выполняет свои операции. Однако скомпилированный будущим образом код не указывает поведение для компилятора, собственный код компилятора делает это.

6
ответ дан 1 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: