4 ms·
I can also say smart things: Template language is useful not because it allows to do things, but because it limits what can be done.
by nercury 11y ago
I can also say smart things:
Template language is useful not because it allows to do things, but because it limits what can be done.
- jasim 11y agoIt limits useful things that can be done, but comes up with worse way to do the same. Code/view reuse for example is done through partials in template languages: you can either learn `<%= render partial: "filename" %>` syntax for ERB (with Rails), or `include filename` syntax for JADE, or the `{% include template_name %}` syntax in Django. Or you could simply use functions: compose them, curry them, put them in objects and call them, and even remote execute them; it is all code. Logic is similar: every template language has their own syntax for conditionals and loops. Learning these does not teach us anything new nor make us better at our craft. These are simply useless tediums. Another pet peeve is Template Inheritance. Jade has `block` and `extends` keywords; RABL similarly has an `extend` keyword. Programming languages have an arguably better way to do inheritance. This is my rule of thumb: if a library/template language brings its own semantics for inheritance, be wary.
- nercury 11y agoI disagree that the way is "worse". I like that in templates, string handling is _enforced_ to be different. For example, when you manipulate strings in template, you can be reasonably sure all output is escaped, unless you specify otherwise in a very few precise cases with explicit syntax. A good template language allows you to create/limit available tools/helpers for your particular project. That is especially important in larger projects and larger teams, where everyone is not immediately expected to know intended good practice to follow. Creating DSL in template _is_ a way of documenting intended good practice. A good template language does not pretend not to be turing-complete: instead, it provides comprehensive error handling and error messages, so that users know exactly where some error or type occurred. One more reason to use the language is because it is a language. If someone used something like Django, the Twig will be quite familiar and easy to pick up. Template engine can optimize-away, pre-compile things, just like languages do. With separate template language you don't need to recompile whole build if you change a template (presuming hosting language is compiling to binary and template engine is interpreted). Full disclosure: I am currently rewriting Twig in another language, and believe it's completely worth the effort.
- jbergens 11y agoI think these are different use cases. If you create a CMS and allows your users to write templates you probably want to limit them a lot. If you use a template language as a part of building a web site or an application you probably want as much features as possible.