Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|
Главная » Програмування
Метапрограмування — вид програмування, пов'язаний зі створенням програм, які породжують інші програми як результат своєї роботи[1] (зокрема, на стадії компіляції їх вихідного коду), або програм, які змінюють себе під час виконання (самомодифицирующийся код). Перше дозволяє одержувати програми при менших витратах часу і зусиль на кодування, ніж якщо б програміст писав їх вручну цілком, друга дозволяє поліпшити властивості коду (розмір і швидкодія).
При цьому підході код програми не пишеться вручну, а створюється автоматично програмою-генератором на основі іншої, більш простої програми.
Такий підхід набуває сенс, якщо при програмуванні виробляються різні додаткові правила (більш високорівневі парадигми, виконання вимог зовнішніх бібліотек, стереотипні методи реалізації певних функцій тощо). При цьому частина коду втрачає змістовний сенс і стає лише механічним виконанням правил. Коли ця частина стає значною, виникає думка задавати вручну лише змістовну частину
...
Читать дальше »
|
Програмування потоків даних (англ. dataflow programming) — підхід до програмування, при якому програма моделюється у вигляді орієнтованого графа потоку даних між операціями, подібного діаграми потоку даних. Розвивається в програмної інженерії з 1970-х років[].
Природне візуальне уявлення поряд з підтримкою паралелізму є двома привабливими для розробників властивостями даної парадигми[]. Зрозуміло, програмування потоків даних необов'язково пов'язане з інструментами візуального програмування.
Програмісти Unix знайомі з програмуванням потоків даних, так як в командній оболонці цієї системи застосовуються іменовані канали та інші подібні засоби межпроцессного взаємодії
Основою роботи програм потоків даних (dataflow) є активація обчислень на вузлах (node), які можна вважати чорними ящиками, що викликається змінами, оновленнями вхідних даних. Вузол (моделі — вершина графа) представляє з себе елемент, який здійснює обробку даних на вході, перетворюючи їх в
...
Читать дальше »
|
Програмування в обмеженнях (або програмування обмеженнями) є парадигмою програмування, в якій відношення між змінними вказані у формі обмежень. Обмеження відрізняються від загальних примітивів мов імперативного програмування тим, що вони визначають не послідовність кроків для виконання, а властивості шуканого рішення. Це робить програмування в обмеженнях формою декларативного програмування. Обмеження, які використовуються в програмуванні в обмеженнях, бувають різних видів: ті, які використовуються в задачі задоволення обмежень (наприклад, «А або В істинно»), ті, які вирішуються симплекс-алгоритму (наприклад, «x ≤ 5») та інші. Обмеження, як правило, вбудовані в мову програмування або здійснюються через окремі програмні бібліотеки.
Програмування в обмеженнях тісно пов'язане з теорією задоволення обмежень, яка пропонує зручний апарат і просту формальну схему для подання і розв'язання комбінаторних задач штучного інтелекту.
Програмування в обмеженнях почалося з
...
Читать дальше »
|
Логічне програмування — парадигма програмування, заснована на автоматичному доказі теорем, а також розділ дискретної математики, що вивчає принципи логічного виведення інформації на основі певних фактів і правил виводу. Логічне програмування засноване на теорії та апараті математичної логіки з використанням математичних принципів резолюцій.
Найвідомішим мовою логічного програмування Prolog є.
Першою мовою логічного програмування мова Planner (див. огляд Шапіро (Ehud Shapiro) [1989]), у якому була закладена можливість автоматичного виводу результату даних і заданих правил перебору варіантів (сукупність яких називалася планом). Planner використовувався для того, щоб знизити вимоги до обчислювальних ресурсів (з допомогою бэктрекинга — пошуку з поверненням) і забезпечити можливість виводу фактів, без активного використання стека. Потім був розроблений мовою Prolog, який не вимагав плану перебору варіантів і був, в цьому сенсі, спрощенням мови Planner.
Ві
...
Читать дальше »
|
РЕФАЛ (Рекурсивних Функцій Алгоритмічний) — один з найстаріших функціональних мов програмування, орієнтований на символьні обчислення: опрацювання символьних рядків (наприклад, алгебраїчні викладення); переклад з однієї мови (штучного чи природного) на інший; вирішення проблем, пов'язаних з штучним інтелектом. Поєднує в собі математичну простоту з практичною спрямованістю на написання великих і складних програм.
Відмінною рисою мови є використання зіставлення зі зразком і переписування термів як основного способу визначення функцій.
Програма на Рефале може складатися з одного або декількох модулів (файлів), кожен з яких, у свою чергу, складається з функцій.
Рефал-функція являє собою упорядкований набір речень, що складаються із зразка та шаблону. На вхід функції подається деякий вираз; обчислення функції полягає в зіставленні вираження почергово зразками, взятими з першого, другого і т. д. пропозицій. Якщо чергове зіставлення проходить успішно, то на
...
Читать дальше »
|
Продовження (англ. continuation) являє стан програми в певний момент, який може бути збережено і використано для переходу в цей стан. Продовження містять всю інформацію, щоб продовжити виконання програми з певної точки. Стан глобальних змінних зазвичай не зберігається, однак для функціональних мов це несуттєво (вибіркове збереження/відновлення значень глобальних об'єктів в Scheme досягається окремим механізмом dynamic-wind). Продовження схожі на goto Бейсика або setjmp/longjmp Сі, так як також дозволяють перейти в будь-яке місце програми. Але продовження, на відміну від goto, дозволяють перейти тільки на ділянку програми з певним станом, яке має бути збережено заздалегідь, у той час, як goto дозволяє перейти в ділянку програми з неинициализированными змінними.
Scheme був першим промисловим мовою, в якому реалізовані повноцінні продовження. Bruce Duba ввів продовження в Standard ML.
Формально, callcc — це функція вищого порядку, що дозволяє абстрагува
...
Читать дальше »
|
Комбінаторне програмування (англ. function-level programming) — це парадигма програмування, не вимагає явного згадки аргументів визначається функції (програми) і використовує замість змінних комбінатори і композицію функцій (але не λ-абстракція). Таким чином комбінаторне програмування можна вважати особливою різновидом функціонального. Різновидом комбінаторного можна вважати конкатенативное програмування.
У мовах J і K (сучасних різновидах APL) цей підхід відомий як неявне програмування (англ. tacit programming).
Ось класичний приклад на мові J — визначення функції (в термінах J — дієслова) для обчислення середнього арифметичного:
avg =. +/ % #
Тут +/ — монада (унарная операція) підсумовування списку, % діада (бінарна операція) розподілу, а # діада взяття довжини списку. Дана конструкція (пропозиція мови J) читається «середнє є сума, поділена на довжину». Подібні конструкції з трьох функцій-дієслів у J прийнято називати «в
...
Читать дальше »
|
Аппликативное програмування — один з видів декларативного програмування, у якому написання програми полягає в систематичному здійсненні застосування одного об'єкта до іншого. Результатом такого застосування знову є об'єкт, який може брати участь в застосуваннях як у ролі функції, так і в ролі аргументу і так далі. Це робить запис програми математично ясною. Той факт, що функція позначається виразом, свідчить про можливість використання значень функцій — функціональних об'єктів — на рівних правах з іншими об'єктами, які можна передавати як аргументи, або повертати як результат обчислення інших функцій.
Моделі апплікатівного програмування ґрунтуються, як правило, на комбінаторної логіки або λ-численні. У комбінаторної логіки єдиний метаоператор — аплікація, забезпечує застосування одного об'єкта до іншого, λ-числення, крім аплікації, є метаоператор λ-абстракції, за допомогою якого можливо побудова функцій, виразів, які, в свою чергу, можна застосовувати до інших об'
...
Читать дальше »
|
Чистота (щодо мови програмування) — відсутність побічних ефектів. Мова програмування є чистим у тому випадку, якщо всі функції в програмах цієї мови є чистими.
Програми, написані на чистих мовах програмування, простіше налагоджувати, верифікувати, в них простіше виявляти помилки, які не вдалося виявити за допомогою тестування. Програми на чистому мовою програмування простіше переписувати, уникаючи внесення помилок. У той же час, сам процес планування програми з розрахунком на чистоту складніше.
Ще однією важливою перевагою чистих функціональних мов є паралелізм. Оскільки всі функції для обчислень використовують тільки свої параметри, можна організувати обчислення незалежних функцій у довільному порядку або паралельно, на результат обчислень це не вплине. Паралелізм може бути організований не тільки на рівні компілятора мови, але і на рівні архітектури технічних засобів. Існують експериментальні комп'ютери, засновані на подібних архітектур, наприклад Lisp-ма
...
Читать дальше »
|
Функціональне програмування — це розділ дискретної математики і парадигма програмування, в якій процес обчислення трактується як обчислення значень функцій у математичному розумінні останніх (на відміну від функцій як підпрограм в процедурному програмуванні).
Протиставляється парадигмі імперативного програмування, яка описує процес обчислень як послідовна зміна станів (у значенні, подібному такому в теорії автоматів). При необхідності, у функціональному програмуванні вся сукупність послідовних станів обчислювального процесу представляється явним чином, наприклад, як список.
Функціональне програмування передбачає обходитися обчисленням результатів функцій від вхідних даних і результатів інших функцій, і не передбачає явного зберігання стану програми. Відповідно, не припускає воно і змінюваність цього стану (на відміну від імперативного, де однією з базових концепцій є змінна, що зберігає своє значення і дозволяє змінювати його по мірі виконання алгоритму).
...
Читать дальше »
|
|
|
|
Архив записей |
|
|