Philosophy may be too strong of a word. The language was developed from a clean slate with no time constraints and no ideological axe to grind, very much in the tradition of an exploratory spare time project or hack. Nevertheless, certain recurring themes appear to have emerged simply from following each incremental improvement to its further implications. The outcome can be summarized as follows.
Brevity, the ability to express complex algorithms with very little code, derives in Ursala from a set of operators enabling an algebra of functional combining forms. Many frequently needed data transformations find an elegant and succinct expression that becomes second nature to a proficient user of the language. The net effect is a dramatic improvement in productivity.
To leverage other people's expertise, particularly with regard mathematical software, ready made interfaces are provided for the numerical and statistical packages Octave, R, and Scilab, the computer algebra systems Axiom, Maxima, and Pari-gp, and the number theory package Gap. These interfaces make any built-in or user-defined interactive command from these packages callable as a function within the language.
There are also interfaces to the standard shells bash and psh (the perl shell), allowing execution of arbitrary system commands on the host. Orthogonal to the choice of an application package or shell is the option to access it locally or on a remote host via ssh.
New interfaces can be user-defined for any locally or remotely accessible third party application having a command line interface without rebuilding the compiler or modifying the core language. There is no requirement for the application's source code, API specifications, or dynamic library to be disclosed, only the user level documentation, so interoperability is possible even with proprietary applications. (This magic is worked by integration of the run-time environment with an extraordinary third party utility known as the expect library. The details are not exposed at the source level.)
In addition to the interfaces to interactive commands, interoperability with a substantial assortment of high quality numerical libraries is supported. These include selected functions from the GNU Scientific Library, linear algebra functions from lapack, non-linear optimization from minpack and kinsol, fast Fourier transforms from fftw, statistical functions from Rmath, manipulation of sparse matrices by ufsparse, and linear programming by glpk and lpsolve.
There is unlimited opportunity for customizing the language to suit individual requirements.
Depending on the particular computational model, functional programming languages may demand an unconventional approach to debugging, as it may not be feasible to add print statements or to interrogate the values of variables.
Several useful debugging techniques have emerged in the development of Ursala. For code that interacts with external applications such as computer algebra systems or shells, the underlying virtual machine avram can be directed to generate a character by character transcript of the interaction between the user written code and the external application.
In more general settings, a useful diagnostic technique amounts to inserting type expressions at strategic points in the code. Type expressions in Ursala have a succinct form allowing them to be inserted unobtrusively. Various optional settings can then be chosen to modify the semantics of a function thus annotated. These are especially helpful for troubleshooting a particular section of code within a larger application.
Testing is a related issue to debugging, often burdensome in functional languages when functions operate on complex data structures for which test cases are difficult to prepare. This issue is addressed by facilities in Ursala allowing data that are instances of a given type to be generated randomly to order, at any size and for any type expression. By making it trivial to generate large amounts of test data, the language allows less robust code to be screened out easily and early in the development cycle.