2015-07-24 6 views
2

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

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

Таким образом, кажется, что везде, где у вас есть декларативный код, где-то вниз по линии, он должен полагаться на не декларативный код для реализации. Является ли это просто природой, или существуют ли на языках, которые являются 100% декларативными (что я даже не могу начать концептуализировать)?

Пожалуйста, исправьте меня, если мое понимание этих концепций отключено! Хотя я примерно на полпути через B.A. в Computer Science, я чувствую, что до сих пор мне учили только «набирать материал, чтобы правильные вещи случались при запуске кода».

Спасибо.

+4

Я не эксперт в этом вопросе, но, похоже, ваш вопрос может быть лучше подходит для http://programmers.stackexchange.com/, который посвящен концепциям, а не решениям. Вы также можете попробовать Quora (http://www.quora.com/). –

+0

Декларативный код нуждается в какой-то стратегии исполнения. На общих компьютерных архитектурах на данный момент, которые в какой-то момент будут полагаться на какую-то императивную программу в реализации. – shuttle87

+0

Часть этого объясняется тем, что это верно для любого уровня организации более высокого языка. Все в конечном итоге сводится к чему-то в наборе инструкций процессора, и на этом уровне существует только настоятельная необходимость. У вас недостаточно набора для выполнения функциональных, декларативных или других функций. В этом смысле тривиально верно, что декларативные, функциональные и множество других языковых организаций более высокого уровня «где-то вниз» должны полагаться на [a] не декларативную реализацию]. –

ответ

0

Декларативное программирование выражает логику программного компонента без выделения его потока управления. Эта методология вызывающих функций (которая называется функциональным программированием - подпарадигма декларативного программирования), о которой вы говорите, может быть немного запутанной, особенно при изучении программирования и, возможно, изучении языка, такого как C/C++/Java. Существуют функциональные языки программирования, такие как Lisp и Haskell, которые полностью используют функциональную парадигму.

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

+0

Да, я начал с Scheme (Racket, если быть более конкретным), поэтому мой первый опыт программирования был чисто функциональным (я очень благодарен, что моя школа выбрала это). Я думаю, что то, с чем меня догнал, - это ложная дихотомия, которую я создал в моей голове между декларативным и императивным программированием - что-то вроде «вы можете сделать это повелительно или декларативно, и они полностью отдельно ", а не рассматривать их как взаимосвязанные. – jah