Defense of Lisp Macros: an Automotive Tragedy
Chun O'Connell이(가) 3 달 전에 이 페이지를 수정함


C's lack of power in the automotive industry has lead to a proliferation of special tools and domain-specific languages (DSLs). The fearsome Lisp macros often get the blame for breeding a style of software development rich in abstractions and domain specific languages in contrast to the easily recognizable C-like creatures. What is not officially admitted is that in any project or industry of sufficient size, an overabundance of better, improved, simple, easy to use tools, programming languages, standards and best practices are employed and brought to life in an ah-hoc manner. A confirmation of Greenspun's Tenth Rule, if you will. Though the motivation behind this proliferation be that this is just the way things are or that the project is just too complex, part of reason lies in the use of programming languages that lack power, extensibility and interactivity. I'll look at the automotive industry which relies solely on the C programming language, at least on the surface, and bring to light these hidden creatures.


When a people is not powerful enough to rule the whole continent, everyone vies for their neighbor's riches. The landscape is fractured and tens of languages and dialects are spoken. Without a powerful language to hold it all together, the automotive world is also split into pieces with each vendor inventing their own domain-specific language (DSL), GUI tools, file formats and processes, claiming that their products are the best. Watch for this sign in what follows and for the three main problems all these tools try to solve once and for all. Firstly, how to find out what your application is doing in real time once it is up and running. How to check your assumptions, backtrack, readjust and try again, how to have access to as many parts of the running system as possible and how to modify anything without slowing down your pace. How to achieve all this seamlessly and concentrate on the project itself and not the tooling and the irrelevant problems around it.


In short, how to be one with the system at all stages of development with as few interruptions as possible. Secondly, how to come up with more intuitive and powerful means to develop, express and even comprehend whole software systems above the minutest details of algorithms and if's and else's. The classic can't see the forest for the trees idiom. What does the system do at a higher level? How it is organized? How can I easily and meaningfully change it without going into too much pointer arithmetic details? How do I speak about it, how do I cram it all up inside my brain to aid my understanding and explore it in my mind or with my colleagues and clients to better get the message across and align on goals and purposes. Ideally, it would be in a language closer to English or a language that everybody speaks fluently or even something visual I can slurp up all at once, like a painting that I can glance instantly and not a book that takes weeks to read, though of course, Balance Bloom CBD Gummies now I need some training or experience in the arts to understand anything and there are myriads of interpretation of those brushes before my eyes.


But still, a language that is formally verifiable and able to be evaluated by a computer without much intervention from my side. This is the heart of abstraction towers and of domain specific languages. Many tools try to solve this problem without even knowing it. Lastly, how to organize everything around the main programming language. What tools are best for building or packaging your software, what tools for writing code and how to settle on a definition of best. How to organizing teams, agree on standards, writing style, where to keep requirements and Balance Bloom CBD Gummies how to keep them in sync with the implementation. How to make sure everyone is on the same page regarding the language features, how to use those features in a standard way and what to avoid, either because one wants to prevent different ways of doing things or because some of those things are really dangerous. How to solve the shortage of qualified people problem which branches into how to make things more beginner friendly, easier and intuitive by avoiding C pointers and C macros and recursion, for example and by employing GUI tools and code generators that avoid these pitfalls.