NYU, Graduate Division, Computer Science Course, CSCI-GA.3110-001
Honors Programming Languages
Programming is one of the basic activities of computer scientists which implies to know one or several programming languages. In the history of computer science thousands of programming languages have been invented, implemented, and used. Moreover each language has many revisions, dialects for different computers and operating systems, and domain-specific variants. It is therefore impossible to know all programming languages and programming models. Moreover reserach in programming languages is very active, so that computer scientists are very likely to use many programming languages during their career that simply did not exist at the beginning of their career. Hence, it is extremely important to learn how to learn new programming languages This is precisely the main objective of this course which provides a methodology to learn and use programming languages, models, and concepts to cope with legacy, portability, inter-operability, scalability, safety and security challenges in programming.
Languages are designed out of basic ideas, concepts, models, and programming styles that can be explained and understood independently of a particular languages and have as many instances as programming languages emboddying these features. The course will extensively study such features and abstractions. Examples are static and dynamic languages, typing and type inferrence, object-orientation, modularity, data organization, allocation and handling (e.g. stack, heap), control structures (iterators, recursion), abstraction (functions, objects), environment accessing (scripting), reflexion (self-modification of behavior), shared-variables/communications concurrency, etc.
The course will introduce a panorama of programming languages representative of the main families of programming languages (such as imperative, functional, object-oriented, logic, scripting). A programming project (design and implementation of an interpreter for an object-oriented mini-language) with be programmed in OCaml, a multiparadigm language introduced at the beginning of the course. This year high assurance verification techniques for software safety and security will be presented in detail.
© P. Cousot