<?xml version="1.0" encoding="utf-8"?>
<Gradivo ID="186768" NadgradivoID="0" NRID="29194532" OceID="0" DomainUrl="https://repozitorij.uni-lj.si/" IzpisPolniUrl="https://repozitorij.uni-lj.si/IzpisGradiva.php?lang=slv&amp;id=186768" StOgledov="92" StPrenosov="17" StOcen="0" VsotaOcen="0" DatumIzvoza="2026-09-20 19:04:30" OcenaSkupna="0" StPodgradiv="0" StudijskiProgramEvsID="0" JeIndeksirano="0" JeVecAvtorjev="0" DovoliZahtevkeZaDostop="0">
  <PID Url="http://hdl.handle.net/20.500.12556/RUL-186768">20.500.12556/RUL-186768</PID>
  <Naslov>Implementacije vezanih spremenljivk v programskih jezikih</Naslov>
  <Podnaslov>delo diplomskega seminarja</Podnaslov>
  <TujJezik_Naslov>Implementations of bound variables in programming languages</TujJezik_Naslov>
  <TujJezik_Podnaslov></TujJezik_Podnaslov>
  <Opis>Pri implementaciji programskih jezikov programe pogosto predstavljamo z
abstraktnimi sintaksnimi drevesi. Pri tej strukturi moramo biti posebej pozorni na
predstavitev vezanih spremenljivk. Postopka preimenovanja spremenljivk in substitucije
sta nagnjena k napakam. Naivne implementacije so pogosto neučinkovite.

V delu je problem vezanih spremenljivk obravnavan na lambda računu, ki je preprost
programski jezik funkcij. Predstavljeni so trije standardni pristopi k implementaciji
vezanih spremenljivk: naivni pristop, de Bruijnovi indeksi in abstraktna sintaksa
višjega reda.

Predstavljena je tudi knjižnica Bindlib za OCaml, ki omogoča preprosto, varno in učinkovito
delo z vezanimi spremenljivkami.

Na koncu je opisana predstavitev vezanih spremenljivk programskega jezika
Millet, ki služi kot osnova za razvoj prototipnih programskih jezikov. Implementacija
vezanih spremenljivk v Milletu je izvedena z uporabo knjižnice Bindlib.

Razlike v učinkovitosti predstavitev vezanih spremenljivk so prikazane z eksperimentom,
v katerem merimo čas izvajanja štirih pristopov.</Opis>
  <TujJezik_Opis>When implementing programming languages, we usually represent computer programs
as abstract syntax trees. With this representation we need to be especially careful when
representing bound variables, because the implementations of variable renaming and
substitution are error-prone. Naive implementations can result in poor performance.

In this work, this problem is explored using the lambda calculus, which is a simple
programming language of functions. Three representations of bound variables are
presented: the naive approach, de Bruijn indices, and higher-order abstract syntax.

The OCaml library Bindlib is also presented, as it makes working with bound variables
simple, safe and efficient.

Finally, the use of the Bindlib library is demonstrated with the example of the
Millet programming language, which is used as a base when prototyping programming
languages.

The differences in the efficiency of bound variable representations are demonstrated by
an experiment in which we measure the execution time of four implementations of the lambda calculus.</TujJezik_Opis>
  <KljucneBesede>
    <Beseda>programski jeziki</Beseda>
    <Beseda>vezane spremenljivke</Beseda>
    <Beseda>OCaml</Beseda>
  </KljucneBesede>
  <TujJezik_KljucneBesede>
    <Beseda>programming languages</Beseda>
    <Beseda>bound variables</Beseda>
    <Beseda>OCaml</Beseda>
  </TujJezik_KljucneBesede>
  <Potrjeno>true</Potrjeno>
  <JeZaklenjeno>false</JeZaklenjeno>
  <JeRecenzirano>false</JeRecenzirano>
  <Zaloznik></Zaloznik>
  <Izvor></Izvor>
  <Jezik ID="1060" ISO639-3="slv">Slovenski jezik</Jezik>
  <TujJezik ID="1033" ISO639-3="eng">Angleški jezik</TujJezik>
  <Povezave></Povezave>
  <Pokrivanje></Pokrivanje>
  <CasovnoPokritje></CasovnoPokritje>
  <AvtorskePravice></AvtorskePravice>
  <VrstaGradiva ID="mb14" DRIVER="info:eu-repo/semantics/bachelorThesis">Delo diplomskega seminarja/zaključno seminarsko delo/naloga</VrstaGradiva>
  <DatumVstavljanja>2026-09-05 08:15:22</DatumVstavljanja>
  <DatumObjave>2026-09-05 08:15:30</DatumObjave>
  <DatumSpremembe>2026-09-07 10:45:27</DatumSpremembe>
  <DatumTrajnegaHranjenja>0000-00-00 00:00:00</DatumTrajnegaHranjenja>
  <LetoIzida>2026</LetoIzida>
  <LetoIzidaDo>0</LetoIzidaDo>
  <KrajIzida></KrajIzida>
  <LetoIzvedbe>0</LetoIzvedbe>
  <KrajIzvedbe></KrajIzvedbe>
  <Opomba></Opomba>
  <StStrani></StStrani>
  <StevilcenjeNivo1></StevilcenjeNivo1>
  <StevilcenjeNivo2></StevilcenjeNivo2>
  <Kronologija></Kronologija>
  <Patent_Stevilka></Patent_Stevilka>
  <Patent_DatumVeljavnosti>0000-00-00</Patent_DatumVeljavnosti>
  <VerzijaDokumenta>NiDoloceno</VerzijaDokumenta>
  <StatusObjaveDrugje>NiDoloceno</StatusObjaveDrugje>
  <VrstaStroskaObjave>NiDoloceno</VrstaStroskaObjave>
  <DatumPoslanoVRecenzijo>0000-00-00</DatumPoslanoVRecenzijo>
  <DatumSprejetjaClanka>0000-00-00</DatumSprejetjaClanka>
  <DatumObjaveClanka>0000-00-00</DatumObjaveClanka>
  <EmbargoDo></EmbargoDo>
  <VrstaEmbarga ID="1" Naziv="Takojšnja javna objava" OpenAIREDostop="openAccess"></VrstaEmbarga>
  <Osebe>
    <Oseba ID="165001" Ime="Lovro" Priimek="Zupan Škrlj" AltIme="" VlogaID="70" VlogaNaziv="Avtor" ConorID="" Afiliacija="" ArrsID="0" ORCID=""></Oseba>
    <Oseba ID="120200" Ime="Matija" Priimek="Pretnar" AltIme="" VlogaID="991" VlogaNaziv="Mentor" ConorID="" Afiliacija="" ArrsID="0" ORCID=""></Oseba>
  </Osebe>
  <Identifikatorji>
    <Identifikator ID="4" Sifra="UDK" Naziv="UDK" URL="">004.43</Identifikator>
    <Identifikator ID="16" Sifra="VisID" Naziv="VisID" URL="">162680</Identifikator>
    <Identifikator ID="3" Sifra="CobissID" Naziv="COBISS_ID" URL="https://plus.cobiss.net/cobiss/si/sl/bib/290144003">290144003</Identifikator>
  </Identifikatorji>
  <Datoteke>
    <Datoteka ID="246139" DatotekaNRID="14778631" NamenDatotekeID="2" NamenDatoteke="Predstavitvena datoteka" FormatDatotekeID="2" FormatDatoteke=".pdf" MIME="application/pdf" IkonaFormata="pdf.png" IkonaFormataPolniUrl="https://repozitorij.uni-lj.si/teme/rulDev/img/fileTypes/pdf.png" VelikostDatoteke="383629" VelikostDatotekeKratko="374,64 KB" DatumVstavljanja="2026-09-05 08:15:41" JeZbrisana="false" JeJavnoVidna="true" JeIndeksirana="false" JeVidno="true" VidnoOd="01.01.0001" Zaporedje="0">
      <Naziv>23906.pdf</Naziv>
      <OrgNaziv>23906.pdf</OrgNaziv>
      <URL></URL>
      <Opis></Opis>
      <OpisTujJezik></OpisTujJezik>
      <UrlObdelave></UrlObdelave>
      <FrekvencaAzuriranjaID>1</FrekvencaAzuriranjaID>
      <Verzija></Verzija>
      <MD5>CD94BECAF3EA3FCAB385D3AA33E4193B</MD5>
      <SHA256>d6c17e911118f542b1cb58bd26d628b921c592f540acdeb74285dd5d02983b47</SHA256>
      <UUID>363dfd3a-a8f1-11f1-8bc5-0050569b8976</UUID>
      <PID></PID>
      <PrenosPolniUrl>https://repozitorij.uni-lj.si/Dokument.php?lang=slv&amp;id=246139</PrenosPolniUrl>
      <Vsebine>
      </Vsebine>
    </Datoteka>
  </Datoteke>
  <Organizacije>
    <Organizacija OrganizacijaID="11" Kratica="FMF" ZavodEvsID="0000064" Logo="" LogoPolniUrl="https://repozitorij.uni-lj.si/teme/rulDev/img/logo/">Fakulteta za matematiko in fiziko </Organizacija>
  </Organizacije>
  <OrganizacijeVira>
  </OrganizacijeVira>
  <MetodeZbiranjaPodatkov>
  </MetodeZbiranjaPodatkov>
  <TipologijaDela ID="2.11" Koda="2.11" Naziv="Diplomsko delo" SchemaOrg="Thesis"></TipologijaDela>
  <Ostalo>
    <StIrodsDatotek>0</StIrodsDatotek>
    <StDatotekPodTrajnimEmbargom>0</StDatotekPodTrajnimEmbargom>
    <StDatotekZOmejenimDostopom>0</StDatotekZOmejenimDostopom>
  </Ostalo>
</Gradivo>
