Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

A long time ago, in a developer's paradise called the 1970's there was an automated build tool called "make".

It had this and only this syntax:

If a line begins at character 0, that is a list of files whose timestamps should be checked, if any are 'old', then execute the series of command lines beneath, identifying them as starting with a tab character.

That was it, the entire syntax of "make", and it was complete. Then some smart people fucked it up and we have that piece of shit we call "make" now.



>some smart people fucked it up

This does seem to happen in our industry over and over, another example is the way we turn every small, well designed language into Java.


You clearly were not there at the start. Java was a perfectly nice, well designed language.

Then some other people fucked it up...


That's true, but I guess only after Java people started to notice this effect.

I still remember how Java was hailed as a perfect replacement for C++ as the language of choice when writing applications - it truly was.

Today though I was faced with a class name that was 46 characters long. There's a reason why "Fizz Buzz Enterprise Edition" is written in Java.


> Then some smart people ...

not sure which make you are criticizing here..

BSD Make (aka PMake) is imho light years beyond GnuMake in terms of coherence of the extensions to the base language and usability..

unfortunately most people in linux land think make==gnumake, and so it is hardly used outside of the base build system of BSD systems..


I did not use Make at this time (I wasn't alive!), but it seems that you'd have to declare dependencies too. How did you determine if it was "old"?


"If a line begins at character 0, that is a list of files whose timestamps should be checked"

The list of files would be the declared dependencies.


Ah I see.


the first file in the list is the one whose timestamp is compared against all the other files in the list after it. If the timestamp of any file is newer than that first file, the following lines starting with a tab are executed.


That almost describes how I still use "make" -- and smart people pretty much always fuck up my makefiles sooner or later.


I once (back in the mid-1980's) spent several weeks hunting down a makefile bug. In the end it turned out to be a SPACE character that preceded a TAB character.

It's some weeks of my life I will never get back.

I hate make and it's 'entire syntax'.


Back in that 1970's developer's paradise, it was not possible to lose a space next to a tab, because we did not have WYSIWYG editors, we had "vi" which has an easy toggle to show white space characters. "Back in the day" everything had a command line interface, and non-developers were afraid of computers. Ah, the good old daze...


Having been a (moderately power) vi user since the early-80's, Today I Learned about this "show white space" toggle. Thanks!


Nowadays there are build tools that can determine dependencies automatically, by running the compilers inside a sandbox (e.g. linux strace).


strace? I was under the impression strace is used to monitor system calls, how does this related to compilers inside a sandbox?


It's not technically a sandbox, but monitoring syscalls is very closely related.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: