Portée (informatique)

En informatique, la portée (scope en anglais) d'un identifiant est l'étendue au sein de laquelle cet identifiant est lié. Cette portée peut être lexicale ou dynamique.

Portée lexicale

Une portée lexicale est définie par une portion du code source. Au sein de cette portion, l'identifiant n'a qu'une seule liaison.

Un identifiant à portée globale est lié dans l'ensemble du code source (parfois seulement après sa déclaration ou sa définition). Dans de nombreux langages de programmation, toutes les fonctions ont une portée globale (exemple : C). Lorsqu'un identifiant à portée globale désigne une variable, on parle alors de variable globale. Celles-ci servent typiquement à stocker des données utiles à de multiples endroits du programme, un cas particulier étant les verrous.

Un identifiant à portée locale n'est lié qu'au sein d'une construction syntaxique du langage, généralement celle où il est déclaré. Lorsqu'un identifiant à portée locale désigne une variable, on parle alors de variable locale. De plus, dans la plupart des langages, un identifiant à portée locale masque tout éventuel identifiant de même nom, mais de plus grande portée. Déclarer deux fois le même identifiant dans la même portée peut être considéré comme une erreur ou comme une redéclaration, selon le langage et le contexte.

Exemple en Scheme :

 REPL> (define foo 42)             ; la variable globale foo contient la valeur 42
 REPL> foo                         ; accès à la variable foo
 42
 REPL> (let ((foo -1))             ; ouverture d'une forme let où est définie une variable locale foo qui contient la valeur -1
         foo)                      ; fin de la forme let, qui renvoie la valeur de la variable foo
 -1
 REPL> foo                         ; accès à la variable foo
 42

Historique

Le principe de portée lexicale a été introduit pour la première fois dans LISP 1.5. Il fut ajouté à Algol 60, dont les descendants sont typiquement à portées uniquement lexicales (C, Pascal). Scheme, qui en fut un promoteur, est un dialecte Lisp qui n'a également de portées que lexicales. Common Lisp, lui, dispose à la fois de portées lexicales, importées de Scheme, et de portées dynamiques.

Portée dynamique

Une portée dynamique est définie dans une étendue dynamique délimitée par un point d'entrée et un point de sortie pendant l'exécution. La liaison d'un identifiant à portée dynamique masque une liaison précédente au sein de l'étendue dynamique de la forme qui réalise cette nouvelle liaison. Une variable à portée dynamique, appelée variable dynamique, permet donc de propager dans la pile d'appels une modification à un environnement.

Exemple en Common Lisp :

 CL-USER> (defvar *foo* 42)        ; définition d'une variable à portée dynamique *foo* contenant la valeur 42
 *FOO*
 CL-USER> (defun return-foo ()     ; définition d'une fonction renvoyant la valeur de *foo*
            *foo*)
 RETURN-FOO
 CL-USER> (return-foo)             ; accès à la variable *foo*
 42
 CL-USER> (let ((*foo* -1))        ; ouverture d'une forme let re-liant *foo* à la valeur -1,
            (return-foo))          ; dont l'exécution constitue l'étendue dynamique de cette liaison
 -1
 CL-USER> (return-foo)             ; accès à la variable *foo*
 42

Et le même exemple en Scheme, sans portée dynamique :

 REPL> (define foo 42)
 REPL> (define (return-foo)
         foo)
 REPL> (return-foo)
 42
 REPL> (let ((foo -1))
         (return-foo))             ; ici l'exécution de return-foo accèdera à la variable foo dans sa portée lexicale
 42
 REPL> (return-foo)
 42

Des langages non fonctionnels supportent aussi une portée dynamique, notamment ceux dérivés de Forth (un langage à pile) dont PostScript. La méthode employée est d'utiliser une seconde pile (indépendante de la pile des paramètres ou de la pile de retour des fonctions, les deux piles étant souvent communes) contenant pour chaque position empilée une référence à un dictionnaire de variables. Si une variable ne peut être trouvée dans le premier dictionnaire référencé au sommet de la pile, la recherche se poursuit dans le (ou les) dictionnaires plus bas dans la pile.

Chaque dictionnaire de variables est généralement modélisé par une table de hachage afin d'obtenir un temps de recherche optimal au sein de chaque dictionnaire (le temps de recherche devient quasiment indépendant du nombre de variables stockées dans le dictionnaire). Pour cela, le nom de la variable est converti en une clé de recherche numérique dont tous les bits d'information sont équidistribués à l'aide d'une fonction de hachage; cette clé numérique est alors réduite à l'intervalle de la taille de la table de hachage, pour obtenir l'emplacement où la variable est stockée. Comme des collisions sont possibles, la table de hachage contient à chaque position utilisée à la fois une entrée pour le nom de la variable (afin de pouvoir vérifier par égalité que la bonne variable est stockée à cet endroit). Il existe alors différentes stratégies pour résoudre la collision de variables partageant la même clé calculée :

  • Augmenter la taille de la table de hachage et redistribuer toutes les variables qui y sont déjà stockées. Cette opération est coûteuse lors de l'ajout de variable mais permet de limiter le nombre de collisions.
  • Enchaîner dans une liste les variables partageant la même position dans la table de hachage. La liste de collision peut être externe à la table, ou bien occuper des positions choisies aléatoirement parmi les positions libres dans la table de hachage.
  • Stocker, à la position déterminée par la clé de hachage commune, une autre variable telle qu'une référence à une autre table de hachage (contenant toutes les variables partageant la même clé dans la première table), la seconde table utilisant une fonction de hachage distincte (dans ce cas, le temps de recherche devient partiellement logarithmique en fonction du nombre total de variables, et non partiellement linéaire).

PostScript et Forth ont ceci de particulier que tous les dictionnaires (référencés dans la pile de portée) sont eux-mêmes des variables que l'on peut nommer, que l'on peut soit utiliser directement soit rechercher par leur nom recherché lui aussi dans la pile de portée, avant d'en obtenir la référence, qu'on peut alors empiler dans la pile de portée. Il n'y a donc dans ces langages aucun nom de variable réservé, tous les noms d'objets prédéfinis étant en fait référencés dans une pile de portée qui n'est jamais vide mais référence au minimum un premier dictionnaire "système" de portée contenant sa propre référence et son propre nom. De plus, il est possible de retirer sélectivement certaines variables de toutes les résolutions ultérieures de portée, en supprimant leur référence dans un des dictionnaires référencés dans la pile de portée (ceci permet de masquer certaines variables d'un niveau de portée donné pour utiliser ensuite la variable définie dans un niveau de portée inférieur). On peut également replacer une des entrées par une autre (la variable définie dans la portée initiale n'y est plus accessible mais sera remplacée par une autre de même nom, mais éventuellement de type différent, ceci pouvant rendre ensuite totalement inaccessible une variable système que l'on veut cacher).

La portée de noms n'est pas réservée aux seuls langages pour le stockage et le référencement de valeurs. On la retrouve aussi dans la plupart des systèmes de fichiers hiérarchiques pour présenter des vues différentes des noms de fichiers accessibles. Seuls les anciens systèmes de fichiers très simples, ne comportant qu'un seul dictionnaire de noms de fichiers pour le système tout entier (et tous les processus hébergés par le système), ne supportent qu'une seule portée pour les noms de fichiers (on peut toutefois les utiliser tels quels pour les étendre, en y stockant sous forme d'un fichier des dictionnaires de noms supplémentaires).

  • Par exemple sous Unix et Linux, les noms de fichiers sont résolus en objets fichiers accessibles au moyen d'une variable de portée (dans ce cas, les répertoires de fichiers sont des dictionnaires), et permettent aussi de référencer le même fichier sous des noms multiples et différents, y compris dans des répertoires multiples et différents. La résolution de portée utilise une variable globale spécifique au processus qui accède au fichier par son nom, modifiable par chroot et on référence implicitement ce dictionnaire « racine » en recherchant un nom commençant par "/".
  • Une autre variable contenant la référence à un dictionnaire courant supportant la notion de sous-répertoires et la navigation dynamique d'un niveau de portée à l'autre, à l'aide d'opérations comme chdir. Cette facilité de nommage est supportée par pratiquement tous les systèmes de fichiers des systèmes d'exploitation actuels.
  • Certains systèmes de fichiers permettent d'utiliser plusieurs dictionnaires racines simultanément en leur attribuant à chacun un nom; pour les systèmes de fichiers CPM, DOS ou Windows chaque racine est désignée par une lettre unique (désignant généralement un lecteur ou un volume contenant les fichiers référencés bien que ce ne soit pas obligatoire); pour chaque lecteur ainsi nommé existe un répertoire courant propre à chaque processus, et chaque processus est aussi associé à un lecteur courant.
  • D'autres systèmes (comme VMS) vont plus loin et ne se limitent pas à une seule lettre de lecteur, mais permettent de nommer une quantité virtuellement infinie de volumes courants, chacun par leur propre nom. Dans ce cas il existe dans chaque processus un dictionnaire des volumes accessibles, dans lequel on trouve soit des fichiers, soit d'autres répertoires, lesquels peuvent être mémorisés dans le contexte d'un processus au sein de son propre dictionnaire de volumes. Cela combine les avantages des deux méthodes de résolution dynamique de portée: hiérarchique, ou contextuelle.

Read other articles:

Mining industry in Sweden Kiruna iron ore mine in Kiruna, Norrbotten County The mining industry in Sweden has a history dating back 6,000 years. Historically, Sweden's most famous mine is the copper Falun Mine in Dalarna, which made a significant contribution to the Swedish economy for several centuries. Sweden today is one of the largest sources of iron ore in Europe, with approximately 90% of Europe's iron and 5% of the world's iron reserves.[1] Geology Most of Sweden's landmass is ...

 

Vincenzo Giuffrida Ministro delle poste del Regno d'ItaliaDurata mandato4 luglio 1921 –26 febbraio 1922 MonarcaVittorio Emanuele III di Savoia Capo del governoIvanoe Bonomi PredecessoreRosario Pasqualino Vassallo SuccessoreGiovanni Antonio Colonna di Cesarò LegislaturaXXVI Deputato del Regno d'ItaliaLegislaturaXXV, XXVI, XXVII Sito istituzionale Dati generaliTitolo di studioLaurea in Giurisprudenza Professionefunzionario amministrativo Vincenzo Giuffrida (Ca...

 

Villes et régions touristiques Les atouts Un pays immense : les États-Unis sont le quatrième État le plus grand du monde. Cette immensité est un facteur de variété des paysages. Les villes de la Nouvelle-Angleterre offrent également un patrimoine architectural des XVIIe et XVIIIe siècles. La Louisiane est réputée pour ses maisons coloniales et le quartier français de La Nouvelle-Orléans Mesa Verde (XIIIe / XIVe siècles) Independance Hall, Philadelp...

Innôcentê IIITựu nhiệm8 tháng 1 1198Bãi nhiệm16 tháng 7 1216Tiền nhiệmCelestine IIIKế nhiệmHonorius IIIThông tin cá nhânTên khai sinhLotario de' Conti di SegniSinh1160 hoặc 1161Gavignano, Lãnh địa giáo hoàng, Đế quốc La Mã Thần thánhMất(1216-07-16)16 tháng 7, 1216Perugia, Đế quốc La Mã Thần thánhHuy hiệuCác giáo hoàng khác lấy tông hiệu Innocent Innôcentê III (Latinh: Innocens III) là vị giáo hoàng thứ 176 của Giáo h...

 

Serge kan verwijzen naar: Serge (jongensnaam), een Franse jongensnaam Serge (lama), een Franse circuslama Serge (religieus), rituele paal of boom bij de Boerjaten en Jakoeten in Rusland Serge (stripreeks), een stripreeks van de Belg Jeff Broeckx Serge (stof), een Engelse term voor een wollen stof in keperbinding Bekijk alle artikelen waarvan de titel begint met Serge of met Serge in de titel. Dit is een doorverwijspagina, bedoeld om de verschillen in betekenis of gebr...

 

Toby StephensPekerjaanaktorSuami/istriAnna-Louise Plowman Toby Stephens (lahir 21 April 1969) merupakan seorang aktor TV, teater, dan film asal Inggris. Dikenal luas oleh masyarakat setelah ia memerankan karakter musuh James Bond, Gustav Graves dalam film tahun 2002, Die Another Day dan juga dalam film TV dari saluran BBC, Jane Eyre (2006). Referensi ^ Index entry. FreeBMD. ONS. Diakses tanggal 13 January 2018.  Pranala luar RSC Hamlet website Diarsipkan 2010-03-29 di Wayback Machine. In...

American criminal (1964–1987) This article is about the American criminal. For the rapper who also goes by the name 50 Cent, see 50 Cent. For the American football player, see Kelvin Martin (American football). For the American basketball player, see Kelvin Martin (basketball). Kelvin MartinMartin, c. 1985.Born(1964-07-24)July 24, 1964The Bronx, New York City, U.S.DiedOctober 24, 1987(1987-10-24) (aged 23)Brooklyn, New York City, U.S.Resting placeSilver Mount Cemetery(Staten Island, Ne...

 

Porträt von Frederick Delius Ida Gerhardi: Porträt von Frederick Delius, Öl auf Leinwand, 1903 Frederick Theodore Albert Delius [ˈdiːliəs] CH (* 29. Januar 1862 in Bradford; † 10. Juni 1934 in Grez-sur-Loing) war ein britischer Komponist. Inhaltsverzeichnis 1 Leben 2 Kompositionen 2.1 Bühnenwerke 2.1.1 Opern 2.1.2 Schauspielmusik 2.2 Vokalkompositionen 2.2.1 Klavierlieder 2.2.2 Orchesterlieder, Chorwerke 2.3 Konzerte 2.4 Orchesterwerke 2.5 Kammermusik 2.6 Klavier- und Cembalomusik 3 ...

 

Port of Nawiliwili Nawiliwili Beach Park is a beach park and port on the south-east coast of the island of Kauai in the Hawaiian Islands.[1] It is located on Nāwiliwili Bay at 21°57′33″N 159°21′10″W / 21.95917°N 159.35278°W / 21.95917; -159.35278, about 1.9 miles (3.1 km) south of Līhuʻe. It is at the south end of Hawaii Route 51, known as Rice Street. Just to the west is Niumalu Beach Park. Across Nāwiliwili Bay is Kawai Point. Refere...

Camera model Nikon FENikon FE with Nikkor 50mm f/1.4 lensOverviewMakerNippon Kogaku K. K.Typesingle-lens reflexReleased1978LensLens mountNikon F lens mountSensor/mediumFilm format35 mmFilm size36 mm × 24 mmFilm speedISO 12 – 4000Film advancemanualFocusingFocusManualExposure/meteringExposure modesAperture priority, manualExposure meteringTTL with silicon photodiodeMetering modesCenterweightedFlashFlashISO standard Hot shoeFlash synchronization1/125 sShutterShutter speed range8 s ...

 

Sculpture in Toronto, Ontario, Canada Statue of Northrop FryeThe statue in 2018SubjectNorthrop FryeLocationToronto, Ontario, CanadaCoordinates43°39′59.7″N 79°23′32.4″W / 43.666583°N 79.392333°W / 43.666583; -79.392333 A statue of Northrop Frye is installed in Toronto, Ontario, Canada.[1][2] References ^ New statue commemorating Northrop Frye unveiled. The Varsity. 2012-10-15. Archived from the original on 2022-11-27. Retrieved 2023-11-11. ^ ...

 

American baseball player (1883-1942) Baseball player Amby McConnellMcConnell's 1911 baseball cardSecond basemanBorn: (1883-04-29)April 29, 1883North Pownal, Vermont, U.S.Died: May 20, 1942(1942-05-20) (aged 59)Utica, New York, U.S.Batted: LeftThrew: RightMLB debutApril 17, 1908, for the Boston Red SoxLast MLB appearanceOctober 8, 1911, for the Chicago White SoxMLB statisticsBatting average.264Home runs3Runs batted in119 Teams Boston Red Sox (1908–1910) Chi...

Indonesian chicken soup Soto ayamSoto ayamCourseMain dishPlace of originIndonesia[1][2]Region or stateJavaAssociated cuisineIndonesia, Singapore, Malaysia, and Suriname (known as saoto ayam)Serving temperatureHotMain ingredientsChicken in spicy light turmeric soup[3] Cookbook: Soto ayam  Media: Soto ayam Soto ayam is a traditional Indonesian dish which uses ingredients such as chicken, lontong, noodles, and rice vermicelli. Soto ayam is popular in Singapore,&#...

 

This article is about the Bachman–Turner Overdrive album. For the song of the same group, see You Ain't Seen Nothing Yet (Bachman-Turner Overdrive song). For other uses, see You Ain't Seen Nothin' Yet (disambiguation). This article includes a list of references, related reading, or external links, but its sources remain unclear because it lacks inline citations. Please help to improve this article by introducing more precise citations. (September 2018) (Learn how and when to remove this tem...

 

Kürnberg Stadt Schopfheim Wappen von Kürnberg Koordinaten: 47° 40′ N, 7° 52′ O47.66493337.8700578507Koordinaten: 47° 39′ 54″ N, 7° 52′ 12″ O Höhe: 507 m ü. NN Fläche: 1,84 km² Eingemeindung: 1934 Postleitzahl: 79650 Vorwahl: 07622 Karte Lage von Kürnberg in der Stadt Schopfheim Kürnberg ist ein Ortsteil von Schopfheim im Südlichen Schwarzwald. Es befindet sich im Landkreis Lörrach im Dreiländereck...

Rollercoaster in Spain Dragon KhanDragon Khan's (red) layout under Shambhala (white)PortAventura ParkLocationPortAventura ParkPark sectionChinaCoordinates41°05′15″N 1°09′39″E / 41.08750°N 1.16083°E / 41.08750; 1.16083StatusOperatingOpening date2 May 1995 (1995-05-02)General statisticsTypeSteelManufacturerBolliger & MabillardDesignerWerner StengelModelSitting CoasterLift/launch systemChain lift hillHeight45.1 m (148 ft)Drop49.1&#...

 

Emiliano Sala's transfer to Cardiff City F.C. Emiliano Sala during his time with FC Nantes. The association football transfer of Emiliano Sala from FC Nantes to Cardiff City F.C. occurred on 19 January 2019. After month-long negotiations between the two clubs, Welsh-based Premier League club Cardiff City agreed to pay French Ligue 1 club Nantes a club record £15 million transfer fee for Emiliano Sala, a 28-year-old Argentine striker. Sala was Cardiff manager Neil Warnock's prime target in th...

 

Shooting range in New Delhi, India Dr. Karni Singh Shooting Range is a shooting range in New Delhi, India. Spread over 18 acres, it is situated on South Delhi ridges in the backdrop of Adilabad Fort, near the historic Tughlaqabad Fort to its North and Surajkund Lake to its South West. It was first constructed for the 1982 Asian Games in New Delhi, and later rebuilt altogether for the 2010 Commonwealth Games. It was named after Karni Singh, who won the silver medal at the 38th World Shooting C...

Type of radiometric dating Uranium–lead dating, abbreviated U–Pb dating, is one of the oldest[1] and most refined of the radiometric dating schemes. It can be used to date rocks that formed and crystallised from about 1 million years to over 4.5 billion years ago with routine precisions in the 0.1–1 percent range.[2][3] The method is usually applied to zircon. This mineral incorporates uranium and thorium atoms into its crystal structure, but strongly rejects lea...

 

Stadion Internasional AmmanLokasiLokasiAmman, YordaniaKoordinat31°59′6.37″N 35°54′10.25″E / 31.9851028°N 35.9028472°E / 31.9851028; 35.9028472Data teknisPermukaanRumputKapasitas25.000Pemakai Tim nasional sepak bola Stadion Internasional Amman (Arab: ستاد عمان الدولي) merupakan sebuah stadion yang terletak di Amman, Yordania. Stadion ini berkapasitas 25.000 orang, dan merupakan stadion berkapasitas terbesar di Yordania. Stadion ini pernah m...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!