|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Привет всем. Тема. Литературное программирование (ЛП). Или, можно встретить в источниках еще такой термин как грамотное программирование (ГП) в некоторых переводах статей Кнута. Или - просто литературный код. Всё - синонимы. Лет несколько назад я читал книгу по Haskell. Просто из любопытства. Циатата. В языке Haskell возможно использование так называемого "литературного кода", который характеризуется тем что в текстовом файле записан не исходный код программы, а поясняющий ее текст, при этом сама программа определенным обазом вставлена в таком файле так, что транслятор Haskell Пример. Я накопипастил с wiki текст и добавил свои сорцы. gcd.lhs (в данном случае extension .lhs имеет значение) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Возможен еще вариант с исходником в LaTex форматировании типа Код: sql 1. 2. 3.
Меня заинтересовал этот подход. И я стал листать источники. Интересовало какие языки и технологии практикуют такое. Там оказалось все немного глубже. Некоторые ссылки меня привели к книге Дональда Кнута https://www.amazon.com/Literate-Programming-Lecture-Notes-Donald/dp/0937073806/ Еще один линк. https://www-cs-faculty.stanford.edu/~knuth/lp.html И еще несколько видосов youtube где эта тема освящалась с разных сторон. Туда-же до кучи макросы. Редактор emacs. И прочее. Я их не буду приаттачивать. Пока смотрю. И если будет достойно внимания - добавлю. Вопрос. Кто из вас на проектах практиковал нечто подобное? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 16:48 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Если развернуть определение, вместо: "в текстовом файле записан не исходный код программы, а поясняющий ее текст, при этом сама программа определенным образом вставлена в таком файле", - скажем: "в текстовом файле записан исходный код программы, а поясняющий еге текст, при этом определенным образом вставлена в таком файле" - то мы получаем практически любой язык в котором доступны комментарии. А теперь вспоминаем что есть утилиты умеющие вытягивать из исходников текст комментария оформленного специальным образом и вот тебе готовое ЛП. Насколько часто это используется? Ну.... - Doxygen - пожалуй самое известное из подобных систем. Родилось в Java, но может быть использовано почти с любым языком. - Perl имеет свою собственную систему POD (Plain Old Documentation), Используется очень часто - практически всегда если есть желание опубликовать свою библиотеку в CPAN (общий репозиторий библиотек). Хотя лично мне не очень удобно писать POD, меня в нем нервирует что практически все старт-стопы для кусков документации надо выделять пустыми строками. В крупных конторах очень рекомендуют (в смысле обязуют) добавлять POD комментарии даже в CGI скрипты. - QDoc - почти тоже самое что Doxygen, но специально для Qt фреймворка. Довольно удобно, но используется намного реже. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 19:39 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Полностью согласен. Но мне кажется что идеи Кнута идут чуть дальше чем просто форматирование каментов как книги или документации. Я опубликую здесь Contents из его книги. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 20:31 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Еще одна цитата и ссылка на 3 инструмента для LP. http://mmix.cs.hm.edu/bin/index.html Literate Programming Literate programming means writing programs, as you would write a novel or an essay. You explain to the reader what your program is all about and how it is working. You put this description in a "web" file and if you do this on a sufficient level of detail, the program ctangle, itself written as a literate program (see The CWEB System of Structured Documentation ), can tangle the web and extract a program from it. The program cweave on the other hand will weave the web into a nice book. The program ctie, is an advanced utility. You find more about is on the documentation page.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 22:06 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Добавлю линк на книжку. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 23:53 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Кнут конечно это "О-го-го!" и "Ух!", но эти его идеи слишком далеки от реальности. Литераутрно писать так чтобы "компилятор" мог собрать программу... Это будет возможным когда изобретут полноценный ИИ. А до тех пор, для перевода с литературного языка на строгий нужен человек. Да мы (программисты) до сих пор мучаемся с техническими заданиями написанными на почти литературном языке и то далеко не всегда понимаем что заказчик хотел сказать. А ты ждешь что кто-то использовал методы о которых Кнут мечтал? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 01:30 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Там не про ИИ насколько я понял. А про DSL , и написание кода человеком для человека. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 10:04 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Дональд Кнудт - и швец и жнец и на дуде игрец. А вот какой процент программистов в состоянии создать литературный текст, если проблемы начинаются с элементарной грамотности? Это я даже молчу, что далеко не всегда получается просто техническая документация - какой-то мутный вал акын-сказаний: что у себя вижу, то вам и пою. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 11:14 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Возможно в качестве источника литературного текста будет выступать user story ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 16:43 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
mayton Возможно в качестве источника литературного текста будет выступать user story ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 17:47 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Да. Здесь как будто-бы не хватает какого-то связующего DSL. Может DSL - это английский язык? Вот мой еще один литературный (ш)кодинг. Только што написал по мотивам 99-th Haskell problems https://wiki.haskell.org/99_questions/1_to_10 Первая половина сорца - копипаста с вики. Там - текст задания и модульные тесты. Вторая (подсвеченная желтым маркером) - моя попытка переложить assumptions на язык кода. Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Код написан херово. Я пока еще не спец в GHC, но пока суть не в этом а в литературности. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 23:08 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Я принципиально не открывал спойлеры и не смотрел солюшены по проблемам. Мне не хотелось замутнять свой взгляд чужим и хорошим отшлифованным решением. Мне хотелось пройти через шаги этой самой литературы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 23:18 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
mayton Там не про ИИ насколько я понял. А про DSL , и написание кода человеком для человека. Да блин, любой ЯП уже является DSL, вы же не пишите инструкции к процессору в машинных кодах? По сути это лишь философия, по поводу "литературности". Одна из основных задач исходного кода на ЯП -- это способность быть прочитанной и понятой человеком. Чем не литературность? Такие вещи как комментарии тоже являются инструментом ЯП. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 09:54 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
"Литературное программирование" оно, всё-таки, про другое: из одного текста генерируется и программа и документация к ней. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 10:13 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Попробовал CTangle. Вот как-то так хреновенько вышло. Код: sql 1. 2. 3. 4.
Input: gcd-lcm.w Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Output: Куда-то поползло форматирование. Какие-то непонятные каменты пошли. gcd-lcm.w Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
И для output для Tex: gcd-lcm.tex Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
Делать дизайн олд-скульных текстовых статей я почти умею. Но КМК должна быть еще какая-то хитрость. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 16:48 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
Да в output, gcd-lcm.w надо заменить на gcd-lcm.c ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 16:50 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
mayton, ну я ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 15:28 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
tchingiz, шикарно. Поделись как используете. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 15:42 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
по прямому назначению пытаюсь пояснительную записку вместе с кодом делать в архиве http://agp1.adr.com.ua/software/args.zip пояснительная записка args.2.10.chm ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 15:50 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
относительно большой проект: http://agp1.adr.com.ua/docs/elGeo.07.21.01.chm писать коментарии имеет смысл на языках формальных спецификаций в силу однозначности терминов. долго смотрел на raise specification language: http://www.realcoding.net/dn/docs/ClassDesign.pdf потом в нем разочаровался, начал на Z смотреть, но не успел к нему привыкнуть, перегрузился работой и забросил. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 15:58 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
так уже до кучи В отделе Вельбицкого при СССРе из этой хрени (Р-схема) генерили программы на фортране или, там, на PL-1: //это выбор индекса максимума из массива а[ASZ] Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 16:09 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
мог бы и маршрутом поделиться https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1198977&msg=22137342 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 17:01 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
tchingiz, а я там что-до должен? ХЗ. Ладно почитаю. Забыл уже или стало неактуально. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 17:06 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
mayton tchingiz, а я там что-до должен? ХЗ. Ладно почитаю. Забыл уже или стало неактуально. Ты там никому ничего не должен. Я пишу читалку из формата gpx и просил пример другого трека, отличного от моего навитела. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 17:23 |
|
Субботний литературный код.
|
|||
---|---|---|---|
#18+
tchingiz mayton tchingiz, а я там что-до должен? ХЗ. Ладно почитаю. Забыл уже или стало неактуально. Ты там никому ничего не должен. Я пишу читалку из формата gpx и просил пример другого трека, отличного от моего навитела. ОК. Я гляну в бэкапах. Я честно уже лет 5 не пользовался Garmin-ом. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 17:55 |
|
|
start [/forum/topic.php?fid=16&msg=39974079&tid=1339591]: |
0ms |
get settings: |
16ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
38ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
410ms |
get tp. blocked users: |
0ms |
others: | 2428ms |
total: | 2904ms |
0 / 0 |