Изобретённый велосипед, серия 247
Jun. 19th, 2015 01:08 pmПридумал клёвую мысль: литературное программирование, это же когда не комменты отмечаются в коде, а код в "комментах", следовательно в идеале исходник программы должен быть маркдауном с вкраплёнными кусками кода, благо в языках питоновского типа они автоматически индентированы, а первая строка помечена ключевым словом, обозначающим что дальше пойдёт код: def, structure, object, theorem и т.д.
Так вот, оказалось что эта идея (причём в качестве языка комментов взят в точности маркдаун) уже применена в literate coffescript, единственное в кофескрипте нету ключевых слов интродукции сущностей, что чуть ухудшает внешний вид: индентить нужно не только тело, как в любом исходнике, но весь код.
Ну и идея не доведена до логического завершения: в отличие от CWEB, тут нету умных инклудов и возможности augment'ить (это когда какую-то секцию кода недописали, оставив там многоточие в конце, которое оператор throws NotYetImplementedException, отвлеклись на что-то другое, а потом сказали augment SectionName: и написали, на что многоточия заменять) и ammend'ить секции (это когда к уже написанным секциям с аннотацией, что определение @preliminary или @incomplete, применяются трансформации). Я думаю, что амменды и аппенды должны поддерживаться самим языком в рамках общей поддержки аспектно-ориентированности, а инклуды в любом синтаксически допустимом месте в рамках поддержки макросов. Ну и ссылки на идентификаторы в litcoffee не саморесолвятся, а чего, казалось бы, нет чтобы заюзать для инклюзии валидных кусков кода специально зарезервированную под это конструкцию [code].
Так вот, оказалось что эта идея (причём в качестве языка комментов взят в точности маркдаун) уже применена в literate coffescript, единственное в кофескрипте нету ключевых слов интродукции сущностей, что чуть ухудшает внешний вид: индентить нужно не только тело, как в любом исходнике, но весь код.
Ну и идея не доведена до логического завершения: в отличие от CWEB, тут нету умных инклудов и возможности augment'ить (это когда какую-то секцию кода недописали, оставив там многоточие в конце, которое оператор throws NotYetImplementedException, отвлеклись на что-то другое, а потом сказали augment SectionName: и написали, на что многоточия заменять) и ammend'ить секции (это когда к уже написанным секциям с аннотацией, что определение @preliminary или @incomplete, применяются трансформации). Я думаю, что амменды и аппенды должны поддерживаться самим языком в рамках общей поддержки аспектно-ориентированности, а инклуды в любом синтаксически допустимом месте в рамках поддержки макросов. Ну и ссылки на идентификаторы в litcoffee не саморесолвятся, а чего, казалось бы, нет чтобы заюзать для инклюзии валидных кусков кода специально зарезервированную под это конструкцию [code].