Қауіпсіз таратылған есептеулер үшін E бағдарламалау тілі
E (programming language)
E бағдарламалау тілі: қауіпсіз, таратылған есептеулер үшін жасалған. Java синтаксисі, құпиялылық, deadlock-тан сақтану, және қуатты concurrency ұсынады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
E — 1997 жылы Mark S. Miller, Dan Bornstein, Douglas Crockford, Chip Morningstar және тағы басқалар Electric Communities компаниясында жасаған, қауіпсіз таратылған есептеулерге арналған объектіге бағытталған бағдарламалау тілі. E тілі негізінен Joule тілінен, сондай-ақ Java-ға қауіпсіз таратылған бағдарламалау мүмкіндіктерін қосатын Original E-ден туындаған. E Java синтаксисіне ұқсас хабар алмасу арқылы есептеулерді біріктіреді. Оқиға циклдары мен уәделерге негізделген параллелизм моделі, құлыптанудың (deadlock) ешқашан болмайтынын қамтамасыз етеді.
E is an object oriented programming language for secure distributed computing, created by Mark S. Miller, Dan Bornstein, Douglas Crockford, Chip Morningstar and others at Electric Communities in 1997. E is mainly descended from the concurrent language Joule and from Original E, a set of extensions to Java for secure distributed programming. E combines message based computation with Java like syntax. A concurrency model based on event loops and promises ensures that deadlock can never occur.
Философия
E тілі компьютерлік қауіпсіздік және қауіпсіз есептеулер үшін жасалған. Бұл, негізінен, таза нысанаға бағытталған есептеу моделін қатаң сақтау арқылы іске асырылады, ол қауіпсіз есептеуді қолдайтын қасиеттерге ие. E тілі және оның стандартты кітапханасы бағдарламашыларға қауіпсіз бағдарлама құруға және бағдарламалық компоненттердің бір-біріне толық сенімсіздік танытса да, өзара жұмыс істеуіне мүмкіндік беру үшін мүмкіндіктерге негізделген дизайн философиясын тұрақты түрде қолданады. E тілінде объектілерге сілтемелер мүмкіндіктер ретінде табельделеді, сондықтан мүмкіндіктер есептеу немесе түсінік жүзіндегі қосымша шығындарға әкелмейді. Тілдің синтаксисі қауіпсіздік кемшіліктерін тексеруді жеңілдету үшін жасалған. Мысалы, лексикалық ауқым берілген айнымалыға тиетін әсерін тексеру қажетті код көлемін шектейді. Тағы бір мысал ретінде, тіл салыстыру үшін == операторын, ал тағайындау үшін := операторын пайдаланады; шатасудың алдын алу үшін = операторы қолданылмайды.
The E language is designed for computer security and secure computing. This is performed mainly by strict adherence to the object oriented computing model, which in its pure form, has properties that support secure computing. The E language and its standard library employ a capability based design philosophy throughout in order to help programmers build secure software and to enable software components to co operate even if they don't fully trust each other. In E, object references serve as capabilities, hence capabilities add no computational or conceptual overhead costs. The language syntax is designed to be easy for people to audit for security flaws. For example, lexical scoping limits the amount of code that must be examined for its effects on a given variable. As another example, the language uses the == operator for comparison and the := operator for assignment; to avoid the possibility of confusion, there is no = operator.
Есептеу моделі
E-де барлық мәндер объектілер, ал есептеулер объектілерге хабарламалар жіберу арқылы жүзеге асырылады. Әрбір объекті бір ыдысқа (процеске ұқсас) жатады. Әрбір ыдыстың орындалудың бір ғана жібі, стек жамылғысы және оқиға кезегі болады. Ұқсас бағдарламалау – қашықтағы объектілерге (басқа ыдыстардағы объектілерге) хабарламалар жіберудің мәселесі ғана. Қашықтағы тараптармен байланыс E орындау кезінде шифрланады. Келіп түскен хабарламалар ыдыстың оқиға кезегіне қойылады; ыдыстың оқиға циклы келіп түскен хабарламаларды келу ретімен бірінен соң бірін өңдейді. E-де хабарламаларды жіберудің екі тәсілі бар: дереу шақыру және кейінге қалдырылған жіберу. Дереу шақыру – бұл бір уақытта орындалмаған тілдегі әдеттегі функция немесе әдіс шақыруы сияқты: жіберуші қабылдаушы аяқталып, мәнді қайтарғанша күтеді. Кейінге қалдырылған жіберу – нәтиже үшін орын сақтаушы, яғни уәде деп аталатын хабарламаны жібереді. Жіберуші дереу уәдесімен жұмысты жалғастырады. Кейіннен, қабылдаушы аяқталып, нәтижені бергенде, уәде нәтижеге айналады. Қашықтағы объектілермен байланыс кезінде тек кейінге қалдырылған жіберуге рұқсат берілгендіктен, тұйықталулар болмайды. Ұқсас жүйелерде уәде механизмі желілік кешігулерден туындаған кідірістерді азайтады.
In E, all values are objects and computation is performed by sending messages to objects. Each object belongs to a vat (analogous to a process). Each vat has a single thread of execution, a stack frame, and an event queue. Distributed programming is just a matter of sending messages to remote objects (objects in other vats). All communication with remote parties is encrypted by the E runtime. Arriving messages are placed into the vat's event queue; the vat's event loop processes the incoming messages one by one in order of arrival. E has two ways to send messages: an immediate call and an eventual send. An immediate call is just like a typical function or method call in a non concurrent language: a sender waits until a receiver finishes and returns a value. An eventual send sends a message while producing a placeholder for a result called a promise. A sender proceeds immediately with the promise. Later, when a receiver finishes and yields a result, the promise resolves to a result. Since only eventual sends are allowed when communicating with remote objects, deadlocks cannot happen. In distributed systems, the promise mechanism also minimizes delays caused by network latency.