Среда, 27.11.2024
Ukrainiancontet.at.ua
Меню сайта
Категории раздела
Програмування [35]
Мови веб-програмування [5]
О компании [0]
Новости игры
Статистика

Онлайн всего: 3
Гостей: 3
Пользователей: 0
Главная » 2015 » Октябрь » 25 » Метапрограмування
22:51
Метапрограмування
Метапрограмування — вид програмування, пов'язаний зі створенням програм, які породжують інші програми як результат своєї роботи[1] (зокрема, на стадії компіляції їх вихідного коду), або програм, які змінюють себе під час виконання (самомодифицирующийся код). Перше дозволяє одержувати програми при менших витратах часу і зусиль на кодування, ніж якщо б програміст писав їх вручну цілком, друга дозволяє поліпшити властивості коду (розмір і швидкодія).

При цьому підході код програми не пишеться вручну, а створюється автоматично програмою-генератором на основі іншої, більш простої програми.

Такий підхід набуває сенс, якщо при програмуванні виробляються різні додаткові правила (більш високорівневі парадигми, виконання вимог зовнішніх бібліотек, стереотипні методи реалізації певних функцій тощо). При цьому частина коду втрачає змістовний сенс і стає лише механічним виконанням правил. Коли ця частина стає значною, виникає думка задавати вручну лише змістовну частину, а решту додавати автоматично. Це і проробляє генератор.

Реалізується двома основними методами:
Шаблони (найбільш відомі випадки застосування — препроцесор Сі та шаблони в C++)
Вирішують задачу, якщо дотримання «правил» зводиться до вставки в програму повторюваних (або майже повторюваних) шматків коду. Крім цього, мають ще ряд переваг: наприклад, допомагають повторному використанню. См. також: поліморфізм
Синтаксичні макроси. Дозволяють генерувати код як шаблони З++, але мають більше можливостей для кодогенерации, так як вміють працювати з об'єктною моделлю програми, на відміну від шаблонів С++. Реалізовані в декількох мовах програмування: Nemerle, Scala, Лисп та інших.
Внеязыковые кошти (приклад: генератори синтаксичних і лексичних аналізаторів lex, yacc, bison)
Застосовуються у випадках, якщо простих засобів зразок шаблонів недостатньо. Мова генератора складається так, щоб автоматично або з мінімальними зусиллями з боку програміста реалізовувати правила парадигми чи необхідні спеціальні функції. Фактично, це — більш високорівнева мова програмування, а генератор — не що інше, як транслятор. Генератори пишуться, як правило, для створення спеціалізованих програм, в яких дуже значна частина стереотипна, або для реалізації складних парадигм.
В Perl існує поняття «source filters» («фільтрів вихідного коду») — методу переробки файлів з вихідним кодом перед виконанням, що дозволяє повністю змінювати синтаксис і семантику мови. Одним з відомих прикладів є модуль Lingua::Romana::Perligata, що дозволяє писати код Perl на латині.[]
У Форт надають програмісту вбудовані в мову можливості по зміні свого синтаксису і семантики. Це досягається визначенням архітектури віртуальної машини і повного доступу до можливостей зміни її складових.

Можливість змінювати або доповнювати себе під час виконання перетворює програму у віртуальну машину. Хоча така можливість існувала вже давно на рівні машинних кодів (і активно використовувалася, наприклад, при створенні поліморфних вірусів), з метапрограммированием зазвичай пов'язують перенесення подібних технологій у високорівневі мови.

Основні методи реалізації:
Інтроспекція — уявлення внутрішніх структур мови у вигляді змінних вбудованих типів з можливістю доступу до них з програми.
Дозволяє під час виконання переглядати, створювати і змінювати визначення типів, стек викликів, звертатися до змінної по імені, одержуваному динамічно та ін.

Простір імен System.Reflection і тип System.Type .NET; класи Class, Method, Field в Java; подання просторів імен і визначень типів через вбудовані типи даних в Python; стандартні вбудовані можливості в Форт з доступу до ресурсів віртуальної машини; отримання значення і зміна властивостей майже будь-якого з об'єктів в ECMAScript (із застереженнями).
Інтерпретація довільного коду, представленого у вигляді рядка.
Існує природним чином в безлічі інтерпретованих мов, наприклад, eval() в PHP.
Компілятор Tiny C дозволяє «на льоту» компілювати та виконувати код на мові C, представлений у вигляді рядка символів.
Для Форт використання процедури інтерпретації з рядка EVALUATE.

У мові Пролог метапрограмування дозволяє автоматизувати розробку та верифікацію (перевірку властивостей) Пролог-програм. Метапрограми розглядають програми на Пролозі як терми і дозволяють аналізувати їх властивості і відносини, будувати програми для управління іншими Пролог-програмами[].
Категория: Програмування | Просмотров: 449 | Добавил: Admin | Теги: Метапрограмування | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Вход на сайт

Поиск
Интернет
Здоровье
Афиша
Ситуация на восток
Религия
Архив записей
Каталог сайтов Всего.RU
Рейтинг@Mail.ru
Copyright Ukrainiancontet.at.ua © 2024
uCozЯндекс.Метрика