Author: Christian.Queinnec@lip6.fr

## Introduction

Having reached this point, the reader should no longer doubt the richness of Objective CAML. This language rests on a functional and imperative core, and it integrates the two major application organization models: modules and objects. While presented as libraries, threads are an attractive part of the language. The system primitives, portable for the most part, complete the language with all the possibilities offered by distributed programming. These different programming paradigms are shaped within the general framework of static typing with inference. For all that, these elements do not, in themselves, settle the question of Objective CAML's relevance for developing applications, or more prosaically, ``is it a good language?''
None of the following classic arguments can be used in its favor:

- (marketing development) ``it's a good language because clients buy it'';
- (historical development) ``it's a good language because thousands of lines of code have already been written in it'';
- (systems development) ``it's a good language because the Unix or Windows systems are written in it'';
- (beacon application development) ``it's a good language because such-and-such application is written in it'';
- (standardization development) ``it's a good language because it has an ISO specification''.

We'll review one last time the various features of the language, but this time from the angle of its relevance for answering a development team's needs. The criteria selected to make up the elements of our evaluation take into account the intrinsic qualities of the language, its development environment, the contributions of its community and the significant applications which have been achieved. Finally we'll compare Objective CAML with several similar functional languages as well as the object-oriented language Java in order to underscore the main differences.