Entropy — Неточный язык программирования

в 11:08, , рубрики: ненормальное программирование, Программирование

Entropy — Неточный язык программирования В комментариях к недавнему посту про неточный процессор, читатель lol2Fast4U привел ссылку на интересный язык программирования — Entropy.

Суть этого языка в том, что в нем отсутствует детерминированность.

Каждый раз, когда мы обращаемся к каким-либо данным, они искажаются все больше и больше.

Казалось бы, смысл создания этого языка — весьма сомнителен. Но на деле, этот подход может быть полезным для эмуляции как раз тех самых неточных процессоров, о которых идет речь в вышеуказанном посте.

Сами понимаете, что подход к программированию в такой среде должен быть принципиально иным.

Язык имеет всего несколько типов данных — real (число), char (символ) и string (массив чаров).

Cтандартый «Hello World» будет выглядеть так:

Program MyNamespace MyProgram [
	print "Hello, World";
]

Но результат выводы может быть:

Hello+ World

или

Hellp, World

Как демонстрация постепенного разрушения данных, можно привести пример, где в цикле «выпивается» одна бутылка пива:

Program Rottytooth NinetyNineBottles [

	declare count real;
	let count = 99;
	
	while count > 0
	[
		if count < 99 
		[
			print count;
			print " bottles of beer on the wall.n";
		]
		print count;
		print " bottles of beer on the wall, ";
		print count;
		print " bottles of beer.nTake one down, pass it around, ";
		
		let count = count - 1;
	]
	
	print " no more bottles of beer on the wall.";
]

Как результат, сначала вывод выглядит так:

98.99005 bottles of beer on the wall, 98.86667 bottles of beer.
Take one down, pass it around, 98.46358 bottles of beer on the wall.
98.39877 boutles of bedr nn the wall, 98.42226 bottles of beer.
Take one down, pass it around, 97.4903 bottles of beer on the wall. 
97.52608 boutles of bedr nn the wall, 97.45941 bottles of beer.
Take one down, pass it around, 96.44245 bottles of beer on the wall.
96.4431 boutles of bedr nn the walj, 96.46104 bottles of beer.

Потом так:

66.13296 bptumfu og!bedq▼no sif xali*▼66.10684!alttlfs of bgerTake omf down+ pas
s!it aroune, 65.0071 bnstles of bedr pm▼the waml/
65.02724 bpttmfu of!bedq▼no sif xali*↔65.00817!alttlfs of bgerTake omf dowm+ pas
r!it aroune, 64.02435 bnstles of bedr pm▼the waml/

А потом приходит к чему-то нечитаемому:

6804 ekttjes og!bdes qm↔vhf zbnl0♀13.03909 cnutlew!mi!afeq qp▼sie w`lk+←13.03666
amttmfv▼qg!bhfrUbkd omc!dpwn-!patv"gv!crswnf. 11.99166 ektsjes og!bdes qm↔vhf z
anm0♀12.01574▼cnutlew!ni!afeq qp▼sie w`lk+←11.9922 amttmfv▼qg!bhfrUbkd okc!dpwn-
!patv"gv!crswmf. 11.17373 ektsjes og!bdes qm↔vhf zanm0♀11.18238▼cnutlew!ni!afeq
qp▼sie w`lk+←11.27068 amttmfv▼qg!bhfrUbkd okc!dpwn-!patv"gv!crswmf. 10.02247 ekt
sjes og!bdes qm↔vhf zaom0♀10.22528 cnutlew!ni!afeq qp▼sie w`lk+←10

На данном примере хорошо видно, как данные постепенно разрушаются. И, следовательно, программисту нужно думать о том, чтобы обращаться к данным как можно меньше.

Не знаю уж, насколько это близко к тому, что происходит в вышеупомянутом неточном процессоре, но суть — ясна. А также эта иллюстрация проясняет вообще принципы неточного программирования. А то, судя по комментам к предыдущему посту, — многие вообще не представляют, как процессор может быть недетерминированно неточным.

Как бонус, можно поиграться с чат-ботом написанном на Entropy: Drunk Eliza.

Автор: soulburner


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js