Matthieu Perrin

Associate professor
at Nantes University
LS2N, GDD team

Teaching responsabilities

ALMA track (Master in Computer Science)

I am co-director with Hala Skaf-Molli of the ALMA track (Software Architectures and Distributed Systems) within the Master in Computer Science at Nantes Université. The track focuses on robust software architectures and distributed systems (modelling, algorithms, reliability), with applications to software engineering, distributed platforms, data and artificial intelligence.It combines advanced coursework with research-oriented projects, in close collaboration with the LS2N laboratory.

Languages and Automata (Bachelor, Year 2 — CS and Math-CS)

This course introduces formal languages and finite automata, which form the theoretical basis of compilers and program analysis. Students study regular expressions, determinization and minimization of automata, and context-free grammars, with practical sessions on lexical and syntax analysis.

Computability and Complexity (Bachelor, Year 3 — CS and Math-CS)

The course presents the foundations of computability, including Turing machines, decidable and undecidable languages, reductions, and NP-completeness. It focuses on problem modeling and on understanding the limits of effective computation.

Concurrent Multithread Programming (Master 1 — ALMA track)

This module explores parallel programming on multicore systems, focusing on synchronization mechanisms (locks, critical sections, shared objects) and concurrent data structures. Students design and evaluate Java multithreaded programs, progressing from basic synchronization to mutual exclusion algorithms.

Distributed Programming (Master 1 — ALMA track)

The course studies non-blocking algorithmic design in concurrent systems, with a focus on termination properties, the consensus hierarchy, and proofs of correctness. Students implement shared objects ensuring linearizability and impossibility proofs.

Communication Services and Distributed Systems (Master 2 — ALMA track)

This module focuses on distributed algorithms in message-passing systems subject to crashes and asynchrony. It covers broadcast abstractions (reliable, causal, total order), fault tolerance, distributed registers (ABD), consensus, and replicated state machines.