Кіріспе
Бағдарламаның өрнектер мен олардың мәндері ауыстырылғанда әртүрлі жұмыс істеуі мүмкін бе? Бағдарламалау тілі теориясындағы референциялық ашықтық. Аналитикалық философия мен компьютерлік ғылымда референциялық ашықтық және референциялық мөлдірсіздік – лингвистикалық конструкциялардың қасиеттері, ал одан әрі тілдердің қасиеттері. Егер одан құрастырылған кез келген өрнекте, оның мәнін сақтайтын басқа өрнекпен алмастыру өрнектің мәнін өзгертетін болса, онда тілдік конструкция референциялық ашық деп аталады. Әйтпесе, ол референциялық мөлдірсіз деп аталады. Референциялық мөлдірсіз лингвистикалық конструкциядан құрылған әрбір өрнек, кіші өрнек туралы бірдеңе білдіреді, ал референциялық ашық лингвистикалық конструкциядан құрылған әрбір өрнек кіші өрнек туралы ештеңе білдірмейді, яғни кіші өрнектер өрнек үшін «мөлдір» болып, тек басқа нәрсеге сілтеме ретінде ғана қызмет етеді. Мысалы, «дана болды» деген тілдік конструкция референциялық ашық (мысалы, «Сократ дана болды» деген сөз «Батыс философиясының негізін қалаушы дана болды» дегенмен мағынасы бірдей), бірақ «деді» деген тілдік конструкция референциялық мөлдірсіз (мысалы, «Ксенофонт «Сократ дана болды» деді» деген сөз «Ксенофонт «Батыс философиясының негізін қалаушы дана болды» деді» дегенмен мағынасы бірдей емес). Референциялық ашықтық өрнектерге байланысты мәндерге, яғни тілдің семантикасына байланысты. Сондықтан, декларативтік және императивтік тілдердің екеуі де оларға берілген семантикаға қарай референциялық ашық немесе референциялық мөлдірсіз болуы мүмкін. Референциялық ашықтықтың маңыздылығы – ол бағдарламашы мен компиляторға бағдарламаның мінез-құлқы туралы қайта жазу жүйесі ретінде ой жүгіртуге мүмкіндік береді. Бұл дұрыстығын дәлелдеуге, алгоритмді жеңілдетуге, кодты бұзбай өзгертуге немесе жадтан алу, ортақ кіші өрнектерді жою, жалқау бағалау немесе параллельдеу арқылы кодты оңтайландыруға көмектеседі.
referential transparency in programming language theory
In analytic philosophy and computer science, referential transparency and referential opacity are properties of linguistic constructions, and by extension of languages. A linguistic construction is called referentially transparent when for any expression built from it, replacing a subexpression with another one that denotes the same value does not change the value of the expression. Otherwise, it is called referentially opaque. Each expression built from a referentially opaque linguistic construction states something about a subexpression, whereas each expression built from a referentially transparent linguistic construction states something not about a subexpression, meaning that the subexpressions are ‘transparent’ to the expression, acting merely as ‘references’ to something else. For example, the linguistic construction ‘ was wise’ is referentially transparent (e. g., Socrates was wise is equivalent to The founder of Western philosophy was wise) but ‘ said ’ is referentially opaque (e. g., Xenophon said ‘Socrates was wise’ is not equivalent to Xenophon said ‘The founder of Western philosophy was wise’). Referential transparency depends on the values associated to expressions, that is on the semantics of the language. So, both declarative languages and imperative languages can be referentially transparent or referentially opaque, according to the semantics they are given. The importance of referential transparency is that it allows the programmer and the compiler to reason about program behavior as a rewrite system. This can help in proving correctness, simplifying an algorithm, assisting in modifying code without breaking it, or optimizing code by means of memoization, common subexpression elimination, lazy evaluation, or parallelization.
Белгілілігі
Формалды тілде, айнымалының қолданылған жерінің бәрі де оның қолданылған аймағында бір мәнді білдіреді. Мысал: — Математика нақты: 3x² + 2x + 17. Расында, x-тің екі рет кездесуі де бірдей мәнді көрсетеді.
3x^(2) + 2x + 17. Indeed, the two occurrences of x denote the same value.
Қалқымайтын
Формалды тіл ашылатын тіл болып табылады, егер барлық өрнектері β-қайтадалатын болса. Мысал: λ-есептеуі ашылатын тіл: ((λx. x + 1) 3). Шындығында, 1 = ((λx. x + 1) 3) = (x + 1)[3/x].
((λx. x + 1) 3). Indeed, 1=((λx. x + 1) 3) = (x + 1)[3/x].
Қасиеттер арасындағы қатынастар
Анықтамалық ашықтық, нақтылық және ашылу мүмкіндігі тәуелсіз. Нақтылық тек детерминистік тілдерде ғана ашылу мүмкіндігін білдіреді. Детерминистік емес тілдерде нақтылық пен ашылу мүмкіндігі бір уақытта болуы мүмкін емес.