# Programming Languages in the Wild 1) For discussion, you chose the programming language: TikZ ist _kein_ Zeichenprogramm (Does GitHub's MarkDown support italicizing a single letter within a word? 2) This language is: Domain Specific 3) Is this language Turing complete?: Yes..? ## Uses 4) For what killer app, projects, or historical reason is this language best known or used ?: TikZ is best known for its ability to make high-quality diagrams in LaTeX. It is a LaTeX package that allows authors to describe their desired images without the need for a WYSIWYG editor. 5) Is the answer to 4, which the language is known for, due to language features, community support or libraries, or something else?: TikZ is one of the only LaTex libraries that allows authors to make diagrams directly within their files. There's no need to create the image externally and import it. (Many of the other LaTeX libraries are built on top of TikZ.) Because of this unique ability, there are tons of users, making it relatively easy to get support on StackOverflow. Also, because it is the de-facto tool for this, several additional libraries have been written for it for people who have an even more specific niche they wish to use it for. 6) As a programmer, what is easy to do in the language?: It is easy to draw shapes by specifying coordinates for line segments and cubic Bezier curves. Using some of the more common libraries, many types of diagrams become easy as well, like finite-state automata, trees, and other finite graphs. As all the graphics are vector-based, affine transformations like rotating, scaling, and shifting are also simple for the programmer to use. 7) What does the method to do the answer to 6 look like in general purpose languages like c or java?: Oof. I don't know how to make decent diagrams in either C or Java; if I'm using one of those languages, I'm usally outputting a text file that I'm going to run through pdflatex. I have made output images in C# before, and it was all bitmap manipulation: if I had a complicated thing and I wanted to scale it up, I had to hope I'd already defined all the coordinates in terms of some `scale` variable, or else I'd be stuck editing each and every line to change each part of the images. 8) Does the programmer have to give up anything to gain the benefits of this language?: Well, as the only current implementation of TikZ is a LaTeX package, the programmer pretty much has to learn two languages to use TikZ. TikZ does not follow many of the conventions of LaTeX, so it's far more daunting than most packages are. As a package in LaTeX, there is no such thing as a local variable, which often encourages programmers to avoid using variables when feasible, to prevent cluttering the global scope. Also, LaTeX is missing several things from more general purpose languages, like subroutines and arrays (not counting experiemental LaTeX3). The last time I wanted to use an array, it was purely as a joke/experiement, and I wound up using a cons list from the Lambda package. (The fact that TeX is Turing Complete is only obvious once realising that lambda-calculus is Turing Complete.) Oh, and the global variables are all either strings or integers, without any real way to combine multiple pieces of information into a larger unit.