Литературное программирование

Офигенная картинка для привлечения внимания. Сова с титьками

Содержание

Трактат http://www.howardism.org/Technical/Emacs/literate-programming-tutorial.html Самое лучшее что я нашел, документация с офф.сайта слишком сухая и без примеров.

Вот ещё ничего https://caiorss.github.io/Emacs-Elisp-Programming/Org-mode-recipes.html http://cachestocaches.com/2018/6/org-literate-programming/

1 Один файл , один код

Начнем с простого создадим кодовый блок и экспортируем его в файл

import time
print("Hello, today's date is %s" % time.ctime())
print('Two plus two is')
return 2 + 2

В данном кодовом блоке используеться управляющие слово :tangle: yes При запуске функции org-babel-tangle этот кусок будет перемещен в файл litrus.python

Добавим простой отрезок на другом языке

(message "Hello World!")

Итак у нас два файла с расширение .el и .python , теперь укажем файл напрямую :tangle src/main.py

print('Target main exist')
return 2 + 2

И второй кусок

# Комментарий
print("42")

Оба куска будут добавлены разделеные пробелами.

Также можно глобально указать свойство

#  ,#+PROPERTY: tangle src/main.py

1.1 TODO Добавление результата а не кода

можно указать :file а формат результата это :results

1.2 TODO Разбросанные куски

Создадим кодовый блок с параметром #+NAME: counter-do

print("Hello!")

Создадим новый кодовый блок и разместим в нем существующий с помощью :noweb tangle

for i in range(0,10):
    <<counter-do>>
    <<do-counter>>

Причем в начале или дальше указан кусок кода он будет все равно вставлен.

print(i)

1.3 TODO Вставка в указанное место

1.4 TODO Использование результатов одного блока для работы второго

1.5 DONE Вычисление блоков не отдельно а вместе

Each block re-starts its interpreter every time you evaluate a block. Use the :session header parameter as a label and have all blocks with that label use the same session.

Дата: 2019-01-04 Пт 00:46

Автор: valber

Created: 2019-08-26 Пн 00:06

Validate