Cog resurgence
nedbatchelder.com
nedbatchelder.com
It was made for LaTeX files but could have worked with anything. It even uses the same checksum protection!
I wonder how many people independently came up with the same idea.
Lips seems similar, but for Lisp/Scheme (e.g. https://github.com/zc1036/lips https://github.com/rbryan/guile-lips )
• PHP, the poster example for template-based languages, seems to have spent all its recent years in development trying to get away from its HTML templating roots. I basically never see a PHP file in the wild which is using the old style with mostly HTML with sprinkles of PHP; it’s almost all pure PHP.
• Python has a perfectly good templating system in Jinja2, used by Flask and many others. Last I looked, even Django seemed to imply that they’d themselves would rather be using Jinja2 than Django’s own templating language. IIRC, Django even natively supports replacing its templating engine with Jinja2.
• For small-ish templates embedded inline in code, Python now has f-strings.
Therefore, I wonder: In what situation, exactly, would Cog, a PHP-style inline code templating system, be better than Jinja2 and/or f-strings? And would this benefit be worth the added cost of having yet another model of abstractions which few people would be familiar with?
Certainly if you are happy with Jinja, you should use it.
You don’t output to a separate location, the output is embedded right after the generator itself, and if the inputs have not changed re-running cog is a no-op.
Cog’s “templating” is a mean, not an end, and in the interest of providing maximal flexibility it’s no templating at all but straight python code procedurally generating an output.
Typical jinja use is you have a controller or some outside code like Ansible that creates objects for jinja to operate on.
Cog is less like PHP templating, or jinja, and more like a standalone jupyter static text generator.
Too bad texthon is essentially unknown and unmaintained, as far as I know. I worked on a project with it for several years and it always worked really well and was much more pleasant to use than something like jinja. Maybe I need to make a modern fork…
Anyway, anyone interested in cog should check it out as well.
Re-reading the docs I realize that sure enough, they say very clearly what it does. But I think it just doesn’t click immediately.
Now that get it, I have a few problems coming to mind that I can solve with cog that I didn’t have a great solution to before. So I’m jumping on the bandwagon.
Like any tool, you need to use it well or it will be a foot gun.
Have you tried to understand what cog does? It's a completely different use than the C preprocessor.
Much more so than e.g. php or jinja comparisons anyway.