pre-boarding call

Aaron J. Seigo aseigo at kde.org
Mon Aug 18 14:48:25 UTC 2014


hi all ...

While i'm working on filling in the remaining critical bits of the 
specification (which there is still a fair amount, to be honest), i'm also 
starting to sketch out what shape the tools will take.

There will be a number of tasks that should be highly automated for the user, 
including:

* creating a new project on disk (see docs/packaging.md for my thoughts there)
* generating documentation
* running tests
* fetching compile/run-time dependencies (modeled on node's npm)
* compiling code
* creating packages for distribution
* ... 

You get the picture: all the usual jobs and tasks that get in our way as 
developers ;)

For many projects this means using a large number of tools that were never 
really meant to be used together, but which tackle one type of task and 
hopefully do it well. As Qt devs we all know g++ (and others), doxygen, qmake, 
cmake, ...

Even languages like perl and python ship both a runtime as well as a doc 
generator, a package manager, etc. as separate tools.

Meanwhile, a lot of traditional middleware has been going through a 
"unification" process for tooling. The various and random iptools applications 
are now just one "ip" command with lots of capabilities; git does nearly 
bloody everything and the kitchen sink for revision control; modern package 
managers do everything in one tool (unlike debian's older apt-* tools) ...

I lean towards a single tool (i.e. named "funq") that provides all the 
necessary functionality behind one sleek tool. This won't reflect the code 
design which will be componentized, unit tested, etc. We don't want a big 
spaghetti ball of a monster, after all ;) but having one `funq` tool that 
gives one access to all the functionality is alluring to me.

The reasons / benefits I see:

* `funq help <something>` would let one learn about all parts of the system
* `funq` on its own would start a REPL, which seems elegant
* user interface consistency is more easily maintained with one tool rather 
than many
* it might feel "less scary" when there is just one tool rather than N for the 
newcomer
* reflects rather naturally the envisaged integrated/modular compiler system

Possible cons:

* could become git-level scary if the user interface is not carefully 
considered

The design I'm playing with is putting each set of functionality into its own 
library with `funq` being a thin wrapper on top of them that gives them a 
unified user interface on the command line.

Each library would optionally add grammar to the tool allowing the tool to 
naturally grow with time, and also help catch command collisions should they 
happen. So the packaging features would be in one library and add a grammar 
sth like:

	funq create project <name> <relative path>
	funq create package [<platform>]
	funq install deps
	funq list deps

I'd also like to have a second command description input method: JSON. Given 
how every language has JSON support these days, and funq gets it for free via 
Qt, having a JSON equivalent to the command line grammar would make it rather 
nicer to use from many higher level tools than cobbling together command 
lines. In this mode it would also respond with JSON, taking parsing command 
output out of the equation.

Do you prefer "one tool to rule them all" or "a suite of separately named 
tools, one per task"?

What are your thoughts on what would make for an excellent command input 
system?

-- 
Aaron J. Seigo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://kde.org/pipermail/funq-devel/attachments/20140818/0762d4e7/attachment.sig>


More information about the Funq-devel mailing list