Archives de catégorie : Langage C

Jean-François Perrot : « Un objet pédagogique : la verticale multilingue » (20/04/2017)

Orateur

Jean-François Perrot (LIP6)

Titre

Un objet pédagogique : la verticale multilingue

Résumé

Il s’agit de traiter un même programme en plusieurs langages de niveaux différents (du genre Python, C, assembleur MIPS), en prêtant attention aux changements de perspective induits par ces transitions.

On présentera une réalisation de cette idée pour le programme du calcul itératif de la suite de Fibonacci sans limitation de la taille du résultat, en Python, C et MIPS. (Évidemment, le point essentiel est l’exigence de valeurs illimitées, rendue « naturelle » par Python.)

Outre l’augmentation spectaculaire de la taille du code, on voit apparaître des problèmes imprévus de divers ordres, comme une particularité de l’addition fib(n-1)+fib(n), ou du nombre de zéros qui apparaissent au début d’un quotient. Loin d’être un simple exercice de réécriture, l’expérience devient un projet logiciel complet, avec plusieurs tours de spirale, où Python joue un rôle précieux de boîte à outils pour la modélisation, où l’écriture en C a sa propre problématique, et où la réalisation en assembleur MIPS exige une démarche d’une rigueur de fer.

On discutera des vertus pédagogiques attendues de ce dispositif.

Informations

20 avril 2017, 14h-15h30.

LIP6, salle 24-25/405.

Documents

Yann Régis-Gianas : CallCC, un coup d’état sur le contrôle (23/03/2016)

Orateur

Yann Régis-Gianas

Titre

CallCC, un coup d’état sur le contrôle

Résumé

Lorsque Dijkstra publie son article « Go To Statement Considered Harmful », une fronde de programmeurs – dont Knuth – s’est élevée contre les restrictions d’expressivité proposées par l’informaticien néerlandais : en effet, la structuration du flot de contrôle par les seules procédures et boucles while interdisait certains idiomes de programmation fort utiles et répandus.

Cependant, les motivations de Dijkstra étaient légitimes : puisque l’on ne peut pas prédire les prédécesseurs d’un point de contrôle en présence du « goto », on ne peut pas raisonner localement sur les instructions d’un programme et cela interdit toute ambition de passage à l’échelle de la preuve de programme.

Seulement, l’expressivité du « goto » peut être retrouvée à l’aide d’opérateurs de contrôle inventés par Peter Landin plusieurs années auparavant : en présence de ces opérateurs, les points de contrôle deviennent des objets de première classe appelés continuations. En tant qu’objet du calcul, les points de contrôle du programme sont alors l’affaire du programmeur. Grâce à l’abstraction de type, il peut alors choisir de légiférer comme bon lui semble pour spécifier leur bon usage.

Informations

Mercredi 23 mars 2016, 14h-15h30.

LIP6, salle 24-24/405.

Documents

Nicolas George : La négociation de formats multimédia (17/02/2016)

Orateur

Nicolas George

Titre

La négociation de format dans libavfilter

Résumé

FFmpeg est un projet de logiciel libre dédié au décodage, à l’encodage et à la manipulation en général de données multimédia ; libavfilter est le composant de FFmpeg consacré à la modification du contenu des flux audio et vidéo, qu’il s’agisse de transformations élémentaires comme changer la résolution ou la fréquence ou d’opérations complexes faisant intervenir plusieurs flux de nature différente.

Afin d’assurer les meilleures performances, libavfilter doit sélectionner des formats pour les différents flux compatibles avec les filtres utilisés tout en évitant autant que possible les coûteuses conversions inutiles.

Dans cet exposé, nous examinerons le mécanisme employé pour choisir les formats. Il est optimisé pour gérer le plus simplement les cas les plus courants mais a été étendu progressivement quand de nouveaux besoins se sont fait sentir. Le résultat est assez typique de la manière dont FFmpeg progresse.

FFmpeg is a libre software project dedicated to decoding, encoding and general manipulation of multimedia data; libavfilter is the FFmpeg component dedicated to changing the contents of the audio and video streams, whether it is for simple transformations such as changing the resolution of frequency or for complex operations involving several streams of various nature.

In order to ensure best performance, libavfilter needs to select formats for all the streams that are compatible with the involved filters while avoiding as much a possible expensive useless conversions.

In this presentation, we will study the mechanism used to select the formats. It is optimised to handle in the simplest way the most common cases but was progressively extended when new needs have arisen. The result is quite typical of the way FFmpeg evolves.

Informations

Mercredi 17 février 2016, 14h-15h30.

LIP6, salle 24-24/405.

Enregistrement et documents

Greg Kroah Hartman : Objects in the Linux kernel (09/04/2015)

Speaker

Greg KROAH HARTMAN (Linux Foundation)

Title

Objects in the Linux kernel: evolution is good

Abstract

This talk will discuss how the Linux kernel driver model came to be, starting out with one idea, which was refined by a group of people over time to encompass all types of devices within the kernel.  This evolution changed Linux to use object oriented programming throughout all drivers, taking small objects and building on them, all using only the C language with almost no runtime overhead.

This model would never have come about except due to the way the Linux kernel is developed, with multiple developer helping each other out, and forcing developers to break their changes up into small individual pieces.  Combined with the fact that all device drivers are within the kernel source tree, this has enabled Linux drivers to be, on average, 1/3 smaller than drivers for other operating systems.
Portions of this model have now been copied by the BSD kernels, including MacOS, validating the basic idea in a cross-codebase manner.

Documents

Practical information

Thursday, April the 9th, 14-16 PM.

LIP6, room 24-25/405.

 

Julia Lawall : Understanding Linux Network Device Driver Code (19/02/2015)

Speaker

Julia LAWALL (Inria/LIP6-Whisper)

Title

Understanding Linux Network Device Driver Code

Abstract

A device driver forms the interface between the operating system and a specific device.  While the operating system, running on a CPU, has a global view of machines resources, the device, due to possible limitations on its capabilities and to security constraints, has a specific and limited view.  This different view of system resources leads to complex communication protocols.  To address performance issues and evolutions in device design, these protocols have furthermore changed over time.  We illustrate these issues in the context of network device drivers via examples, and consider how program manipulation techniques can be used to help in getting a global understanding of the code.

Julia Lawall has been a Senior Researcher at Inria since 2011. Previously she was an Associate Professor at the University of Copenhagen. Her work includes the development of the program matching and transformation tool for C code, Coccinelle.  Coccinelle has been used in the development of around 2000 patches for the Linux kernel.

Documents

Practical information

Thursday, February the 19th.
LIP6, room 24-25/405, 14-16 PM.