The title is a bit long, but the question is all there. Let me bring more precision on what the title exactly means.
I'm having this idea for a program which will be:
- Quite complex (not exactly just duct taping)
- Will contain many levels of abstraction
- Will have to interact with databases
- Will have to interact with the host OS
- Will have to be scriptable to some extent
- Would probably benefit from functional (and object-oriented?) programming paradigm facilities
- Intense on shell interactions
- Not necessarily very intense in term of interaction by unit of time (though it would peak high enough)
- Intense in term of quantity of other tools and applications on which it will depend
- The application's good behavior will depend entirely on its capability to interact with what's available in the OS shell
- Must be able to use the application's return value as well as what's printed to STDOUT/STDERR
- Portable
- The application doesn't really make any sense if it doesn't run on Mac/Lin/Win
So I've been thinking about languages I know, languages I've only heard of... And I didn't come up with one which totally shines over the others as a great language to use for this project. Obviously, this reflection is very biased by my own experience/knowledge. You really don't have to read the following... I'm thinking out loud. I'm looking for suggestions and good arguments about them.
Any input is really appreciated.
- My main language is currently Java. I know that calling shell applications from Java and gathering detailed results is not something to build upon. So I'm leaving aside some more interesting JVM languages as well (like Clojure and Scala). I know some people came up with methods to run shell commands, but it seems buggy and I don't think they get the output of the shell programs entirely...
- I've thought of Perl, obviously, for its greatness at interacting with shell applications. The backtick quote operator, for example. But I'm no too sure if building a big application in Perl is a particularly good idea.
- I've thought of Python too, but I didn't enjoy my experience with it much. Still not ruling it out. I have a little something against such verbose languages like it and Java... That philosophy which states that programmers are idiots and the languages must leave them as little choices as possible...
- I know C++ to some good extent... but I believe it would be too low level.
- There is more, but there's no use to discuss Pascal, assembly, brainfxxk and other such dying/low-level/esoteric languages.