V начало знаний
Возможности и совместимость:

Язык программирования V

Windows XP

Windows 7

Windows 8

x86

CGI

Apache

vsc

v32

vif

vsl

Хранилище

Структуры

Массивы

Деревья

Псевдонимы

Функции

Пример

include_vsc

                        
Описание нового языка программирования V.
V является скриптовым, компилируемым в коды x86, языком со строгой типизацией и без ссылочной арифметики.

V адаптирован для работы в CGI режиме с сервером Apache.

Исходный код хранится в файле с расширением vsc. Компилятор в случае отсутствия ошибок создает файл с расширением v32, а также 2 служебных файла с расширениями vif и vsl. При повторной компиляции проверяется дата последнего изменения файла vsc. Если она не изменилась с момента последней компиляции, то компиляция не осуществляется, а сразу исполняется v32.

Для безопасного доступа к данным на носителях существует сервер хранения, работа с которым синтаксически встроена в язык. Кроме базовых типов существует возможность создавать пользовательские типы в виде структур и типизированных массивов. Структуры могут хранить как базовые так и пользовательские типы. Существует возможность создания деревьев в структуре, а также наследование от ранее определенных структур.

Пользовательские массивы могут хранить несколько типов структур унаследованных от первой в перечислении. Для доступа к элементам генерируются специальные функции, а для получения элемента существует механизм псевдонимов.

Пример кода:
?Использовать("include.vsc") // присоединяет файл с кодом, исключает дублирование

Тип AtomicInteger(_0 А):
.
Функция getAndIncrement(AtomicInteger А):
	*лРез=0;
	[getAndIncrementLock]:
		*лРез=А.А;
		А.А=А.А+1;
	.
	=лРез;
.

~_СписокБайтов[_Байты]:
.

Тип Tmandelbrot (_СписокБайтов out, AtomicInteger yCt):
.

_Строка ВСтроку(_Число) импорт _ВСтрокуЧисло;
   
Тип Т4Числа(_0 А, _Число _1, _2, _3, _4, _Число _11, _22, _33, _44):
.
Функция НовыйТ4Числа(_Число _1, _2, _3, _4, _Число _11, _22, _33, _44):
	Т4Числа лРез;
	лРез._1=_1;
	лРез._2=_2;
	лРез._3=_3;
	лРез._4=_4;
	лРез._11=_11;
	лРез._22=_22;
	лРез._33=_33;
	лРез._44=_44;
	=лРез;
.
Функция Установить4Числа(Т4Числа лРез, _Число _1, _2, _3, _4, _Число _11, _22, _33, _44):
	лРез._1=_1;
	лРез._2=_2;
	лРез._3=_3;
	лРез._4=_4;
	лРез._11=_11;
	лРез._22=_22;
	лРез._33=_33;
	лРез._44=_44;
	=0;
.
Функция Установить4Числа(Т4Числа лРез, _Число _1):
	лРез._1=_1;
	лРез._2=_1;
	лРез._3=_1;
	лРез._4=_1;
	лРез._11=_1;
	лРез._22=_1;
	лРез._33=_1;
	лРез._44=_1;
	=0;
.
   
Функция АВХ(Т4Числа л4Zr, л4Zi, л4Crb_x_i, л4Cib_y, л4Рез):
	AVX; // VZEROALL
	
	AVX 7 << л4Zr(_1, _2, _3, _4);
	AVX *(5, 7, 7); //  л4Zr*л4Zr
	AVX 6 << л4Zi(_1, _2, _3, _4);
	AVX *(4, 6, 6); //  л4Zi*л4Zi
	AVX 0 << л4Crb_x_i(_1, _2, _3, _4);
	AVX *(3, 6, 7); //  л4Zr*л4Zi
	AVX 7 << л4Cib_y(_1, _2, _3, _4);
	AVX -(2, 5, 4); //  л4Zr*л4Zr - л4Zi*л4Zi
	AVX +(2, 2, 0); //  л4Zr*л4Zr - л4Zi*л4Zi + л4Crb_x_i
	
	AVX +(1, 3, 3); //  л4Zr*л4Zi + л4Zr*л4Zi
	AVX +(1, 1, 7); //  л4Zr*л4Zi + л4Zr*л4Zi + л4Cib_y

	AVX *(5, 2, 2); //  л4Zr*л4Zr
	AVX *(4, 1, 1); //  л4Zi*л4Zi
	AVX +(3, 4, 5); //  л4Zr*л4Zr
	AVX 3 >> л4Рез(_1, _2, _3, _4);
	AVX 2 >> л4Zr(_1, _2, _3, _4);
	AVX 1 >> л4Zi(_1, _2, _3, _4);
	
	//---------------------------------------------
	
	AVX 7 << л4Zr(_11, _22, _33, _44);
	AVX *(5, 7, 7); //  л4Zr*л4Zr
	AVX 6 << л4Zi(_11, _22, _33, _44);
	AVX *(4, 6, 6); //  л4Zi*л4Zi
	AVX 0 << л4Crb_x_i(_11, _22, _33, _44);
	AVX *(3, 6, 7); //  л4Zr*л4Zi
	AVX 7 << л4Cib_y(_11, _22, _33, _44);
	AVX -(2, 5, 4); //  л4Zr*л4Zr - л4Zi*л4Zi
	AVX +(2, 2, 0); //  л4Zr*л4Zr - л4Zi*л4Zi + л4Crb_x_i
	
	AVX +(1, 3, 3); //  л4Zr*л4Zi + л4Zr*л4Zi
	AVX +(1, 1, 7); //  л4Zr*л4Zi + л4Zr*л4Zi + л4Cib_y
	
	AVX *(5, 2, 2); //  л4Zr*л4Zr
	AVX *(4, 1, 1); //  л4Zi*л4Zi
	AVX +(3, 4, 5); //  л4Zr*л4Zr
	AVX 3 >> л4Рез(_11, _22, _33, _44);
	AVX 2 >> л4Zr(_11, _22, _33, _44);
	AVX 1 >> л4Zi(_11, _22, _33, _44);
	
	AVX; // VZEROALL
	=0;
.

Функция putLine(_0 y, _Байты line, _Память_ Crb, _Память_ Cib):{
	*л4Cib_y=НовыйТ4Числа(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
	*л4Zr=НовыйТ4Числа(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
	*л4Zi=НовыйТ4Числа(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
	*л4Crb_x_i=НовыйТ4Числа(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
	*л4Рез=НовыйТ4Числа(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
	
	Каждый xb++ из Длина line:
		*x=xb*8;
		*res=0;

		*Cib_y=Cib->[y];
		Установить4Числа(л4Cib_y, Cib_y);

		Установить4Числа(л4Zr, Crb->[x], Crb->[x+1], Crb->[x+2], Crb->[x+3], Crb->[x+4], Crb->[x+5], Crb->[x+6], Crb->[x+7]);
		Установить4Числа(л4Zi, Cib_y);
		Установить4Числа(л4Crb_x_i, Crb->[x], Crb->[x+1], Crb->[x+2], Crb->[x+3], Crb->[x+4], Crb->[x+5], Crb->[x+6], Crb->[x+7]);
			 
		 *b=0;
		 Цикл 50:{
			АВХ(л4Zr, л4Zi, л4Crb_x_i, л4Cib_y, л4Рез);
			
			Если л4Рез._1+л4Рез._2+л4Рез._3+л4Рез._4+л4Рез._11+л4Рез._22+л4Рез._33+л4Рез._44<4.0:{
				Повторить цикл;
			}

			Если л4Рез._1>4.0:{
				b=b|128;
				Если b==255:
					Прервать цикл;
				.
			}

			Если л4Рез._2>4.0:{
				b=b|64;
				Если b==255:
					Прервать цикл;
				.
			}

			Если л4Рез._3>4.0:{
				b=b|32;
				Если b==255:
					Прервать цикл;
				.
			}

			Если л4Рез._4>4.0:{
				b=b|16;
				Если b==255:
					Прервать цикл;
				.
			}
			
			Если л4Рез._11>4.0:{
				b=b|8;
				Если b==255:
					Прервать цикл;
				.
			}

			Если л4Рез._22>4.0:{
				b=b|4;
				Если b==255:
					Прервать цикл;
				.
			}

			Если л4Рез._33>4.0:{
				b=b|2;
				Если b==255:
					Прервать цикл;
				.
			}

			Если л4Рез._44>4.0:{
				b=b|1;
				Если b==255:
					Прервать цикл;
				.
			}
		 }
		 
		 res=b;

		line[xb] = (res^0xFFFFFFFF) & 0xFF;
	.
	=0;
}

Тип Thread(_0 Завершено, _ TmandelbrotLinck, _0 N):
.
Функция НовыйThread(_0 Завершено, Tmandelbrot TmandelbrotLinck, _0 N):
	Thread лThread;
	лThread.Завершено=Завершено;
	лThread.TmandelbrotLinck=TmandelbrotLinck._;
	лThread.N=N;
	=лThread;
.
Список СписокThread(Thread):
.

Программа Мандельброт(): // начало исполнения
	*лНачало=КМС(0);
	Tmandelbrot mandelbrot; 

	*N=16000;
	N=6000;
	N=200;
	N=1600;

	_Память_ Crb[(N+7)*8];
	_Память_ Cib[(N+7)*8];

    *invN = 2.0 / КакЧисло N; 
	Каждый i++ из N:
		Cib->[i] = КакЧисло i * invN - 1.0;
		Crb->[i] = КакЧисло i * invN - 1.5; 
	.
    *yCt=mandelbrot.yCt;
	*out=mandelbrot.out;
	Цикл N:
		out+={_0 L:
			_Байты лРез[L];
			=лРез;
		}((N+7)/8);
	.

	СписокThread лСписокThread;
	Каждый i++ из 4://2*КоличествоЦПУ(0)
		лСписокThread+=НовыйThread(0, mandelbrot, N); 
	.

	*Фн={Thread ttt:
		*TmandelbrotLinck=ttt.TmandelbrotLinck;
		TmandelbrotLinck.Tmandelbrot:
			_Память_ Crb[(ttt.N+7)*8];
			_Память_ Cib[(ttt.N+7)*8];

			*y=TmandelbrotLinck.yCt.getAndIncrement();

			Пока y < TmandelbrotLinck.out.__размер:
				//отображение (_С"y="+_С y+"\н");
				putLine(y, TmandelbrotLinck.out.__получить(y), Crb, Cib);
				y=TmandelbrotLinck.yCt.getAndIncrement();
			.
		.

		ttt.Завершено=1;
		=0;
	};
	Каждый t2++ из лСписокThread:
		Старт Фн(t2):
			//отображение "Поток запущен\н";
		.
	.
    
	Каждый t++ из лСписокThread:
		Пока t.Завершено==0:
			приостановка 100;
		.
	.

	отображение(_С"P4"+_С N+" "+_С N+"\n");
	отображение(_С"# "+_С (КМС(лНачало))+" ms\n");
	_Строка лСтр="";
	Каждый лБайты++ из out:
		//отображение ">";
		Каждый лИ++ из Длина лБайты:
			Если лБайты[лИ]=='\н':
				лБайты[лИ]=0;
			.
			Если отображение(лБайты[лИ])!=лБайты[лИ]:
				отображение (_С"лБайты[лИ]="+_С(лБайты[лИ])+"\н");
				отображение(0);
			.
			//отображение "|";
		.
		//отображение (_С"Длина лБайты="+_С(Длина лБайты)+"\н");
	.

	Конец 0; // возврат кода завершения
.
				
include.vsc :
_Счетчик ИдПотока(_Счетчик) импорт _ИдПотока;

_Счетчик Длина(_Счетчики) импорт _КоличествоСчетчиков;
_Счетчик Длина(_Символы) импорт _КоличествоСимволов;
_Счетчик Длина(_Байты) импорт _КоличествоБайтов;
_Счетчик Длина(_Текст) импорт _ДлинаСтроковойКонстанты;
_Счетчик Длина(_Строка) импорт _ДлинаСтроки;
_Счетчик Длина(_Стр8) импорт _ДлинаСтр8;
_Счетчик Длина(_Стр8Б) импорт _ДлинаСтр8Б;
_Счетчик Длина(_Память_) импорт _РазмерПамяти;

_Счетчик Найти(_Строка, _Счетчик, _Счетчик) импорт _НайтиСимволВСтроке;
_Счетчик Найти(_Стр8, _Счетчик, _Счетчик) импорт _НайтиСимволВСтр8;
_Счетчик Получить(_Строка, _Счетчик) импорт _Символ;
_Строка Подстрока(_Строка, _Счетчик, _Счетчик) импорт _Подстрока;
_Стр8 Подстрока(_Стр8, _Счетчик, _Счетчик) импорт _Подстрока8;
_Стр8Б Подстрока(_Стр8Б, _Счетчик, _Счетчик) импорт _Подстрока8Б;

_Счетчик отображение(_Строка) импорт _ОтобразитьСтроку;
_Счетчик отображение(_Стр8Б) импорт _ОтобразитьСтроку8Б;
_Счетчик отображение(_Стр8) импорт _ОтобразитьСтр8;
_Счетчик отображение(_Счетчики) импорт _ОтобразитьСчетчики;
_Счетчик отображение(_Текст) импорт _ОтобразитьТекст; _Счетчик print(_Текст) импорт _ОтобразитьТекст;
_Счетчик отображение(_Число) импорт _ОтобразитьЧисло; _Счетчик print(_Число) импорт _ОтобразитьЧисло;
_Счетчик отображение(_Счетчик) импорт _ОтобразитьСчетчик;

>:: СТР;//Префикс СТР;
	_Строка ВСтроку(_Стр8Б) импорт _Стр8БвСтроку;
	_Строка ВСтроку(_Счетчик) импорт _СчетчикВСтроку;
	_Строка ВСтроку(_Стр8) импорт _Стр8вСтроку;
	_Строка ВСтроку(_Счетчики) импорт _СчетчикиВСтроку;
	_Строка ВСтроку(_Счетчики_) импорт _Счетчики_ВСтроку;
	_Строка ВСтроку(_Символы) импорт _СимволыВСтроку;
	_Строка ВСтроку(_Текст) импорт _ВСтрокуТекст;
	_Строка ВСтроку(_Число) импорт _ВСтрокуЧисло;
<::; //Конец области префикса;
_$16 _С(_$) <- _ВСтрокуТекст;
_$16 _С(_Счетчик) <- _СчетчикВСтроку;
_$16 _С(_$16 Стр):
	_$16 лСтр="";
	лСтр=Стр;
	=лСтр;
.
_Строка _С(_Число) импорт _ВСтрокуЧисло;

_Стр8Б ВСтр8Б(_Строка) импорт _СтрокаВСтр8Б;
_Стр8 ВСтр8(_Строка) импорт _СтрокаВСтр8;
_Стр8 ВСтр8(_Байты) импорт _БайтыВСтр8;
_Стр8 ВСтр8(_Счетчик) импорт _СчетчикВСтр8;
_$8 _С8(_$ $):=$._С.ВСтр8;.

_Счетчик КакСчетчик(_Строка) импорт _СтрокаКакСчетчик;
_Счетчик КакСчетчик(_Число) импорт _ВСчетчикЧисло;
_Счетчик СравнитьЧисла(_Число, _Число) импорт _СравнитьДваЧисла; // 0 - равны, 1 - 1-ое больше, 2 - 2-ое больше
_Число КакЧисло(_Строка) импорт _СтрокаКакЧисло;
_Число КакЧисло(_Счетчик) импорт _ВЧислоСчетчик;

_Счетчик изменениеРазмера(_Счетчики, _Счетчик) импорт _УстановитьКоличествоСчетчиков;
_Счетчик изменениеРазмера(_Символы, _Счетчик) импорт _УстановитьКоличествоСимволов;
_Счетчик изменениеРазмера(_Байты, _Счетчик) импорт _УстановитьКоличествоБайтов;

_Счетчик КопироватьИзВ(_Счетчики, _Счетчик, _Счетчики, _Счетчик, _Счетчик) импорт _СчетчикиСкопироватьИзВ;
_Счетчик КопироватьИзВ(_Счетчики_, _Счетчик, _Счетчики_, _Счетчик, _Счетчик) импорт _Счетчики_СкопироватьИзВ;

_Счетчик приостановка(_Счетчик) импорт _Подождать;

_Счетчик КоличествоЦПУ(_Счетчик) импорт _КоличествоЦПУ;
_Счетчик КМС(_Счетчик) импорт _КоличествоМиллисекундОтСтарта;
_Счетчик КМССР(_Счетчик) импорт _КоличествоМиллисекундОтСтартаСреды;

_Счетчик СВФ(_Строка, _Строка) импорт _СохранитьВременныйФайл;

_Счетчик ВЛог(_Строка) импорт _ВЛог;
_Счетчик ФВывод(_Строка) импорт _ВВТФ;
_Счетчик СВТФ(_Строка) импорт _СохранитьВТФ;

_Файл Открыть(_Строка, _Строка) импорт _ОткрытьФайл;
_Счетчик Закрыть(_Файл) импорт _ЗакрытьФайл;
_Байты Получить(_Файл, _Счетчик) импорт _СчитатьИзФайла;
_Строка ПолучитьСтрокуANSI(_Файл) импорт _ПолучитьСтрокуИзФайлаANSI;
_Счетчик ЗаписатьСтрокуANSI(_Файл, _Строка) импорт _ЗаписатьСтрокуВФайлANSI;
_Стр8 ПолучитьСтрокуUTF8(_Файл) импорт _ПолучитьСтрокуИзФайлаUTF8;
_Счетчик ЗаписатьСтрокуUTF8(_Файл, _Стр8) импорт _ЗаписатьСтр8ВФайлUTF8;
_Счетчики Инфо(_Строка) импорт _ИнформацияОФайле;
_Счетчик Записать(_Файл, _Байты) импорт _ЗаписатьВФайл;
_Счетчик ЗаписатьБайт(_Файл, _Счетчик) импорт _ЗаписатьБайтВФайл;

_Сокет ОткрытьСокет(_Стр8, _Счетчик) импорт _ОткрытьСокет;
_Счетчик ЗакрытьСокет(_Сокет) импорт _ЗакрытьСокет;
_Счетчик ОтослатьБайты(_Сокет, _Байты) импорт _ОтослатьЧерезСокет;
_Счетчик ПолучитьБайты(_Сокет, _Байты) импорт _ПолучитьЧерезСокет;
_Сокет ОткрытьСокетНаПорте(_Счетчик) импорт _СлушатьНаПорте;
_Сокет ПодождатьСокетНаСокете(_Сокет) импорт _ПодождатьСокет;

_Память_ ПолучитьПамять(_Строка, _Счетчик, _Счетчик) импорт _ПолучитьПамять;

?(
~_СписокСтрок[_Строка]:
.

~_СписокСтр8[_Стр8]:
.

~_СписокСтр8Б[_Стр8Б]:
.

~_СписокТекста[_Текст]:
.

~_СписокСчетчиков[_Счетчик]:
.

~_СписокСимволов[_Символы]:
.

~_СписокБайтов[_Байты]:
.

~_СписокСсылок[_]:
.
)
		
Новости:

!!!Внизу страницы есть Download!!!

(20180317) Новый релиз (испралены недочёты, добавлен функционал сравнения для типа _Число). Download

(20180317) Новый релиз (испралены недочёты).

(20180223) Новый релиз (прерывание работы функции).

(20170622) Новый релиз (прерывание работы функции).

(20170525) Новый релиз (расширен функционал типа _ (мягкая ссылка на пользовательский тип)).

(20170509) С днём победы над немецко-фашистким отродъем.

(20170505) Обновлен архив со средой исполнения (расширен функционал добавления к списку).

(20170427) Обновлен архив со средой исполнения (испралены недочёты).

(20170425) Обновлен архив со средой исполнения (испралены недочёты).

(20170415) Обновлен архив со средой исполнения (новая возможность с множественным присвоением).

(20170223) Обновлен архив со средой исполнения (ресширен функционал сопоставления с шаблоном при приведении типа к ожидаемому).

(20161030) Обновлен архив со средой исполнения (устранены недочёты. обновлён последний пример).

(20161022) Обновлен архив со средой исполнения (расширены возможности макросов. добавлен пример в архив).

(20161009) Обновлен архив со средой исполнения (расширены возможности макросов. Создан макрос "Линза2").

(20161008) Обновлен архив со средой исполнения (расширены возможности макросов. Создан макрос "Линза" до 3 полей).

(20161005) Обновлен архив со средой исполнения (циклические и условные макросы расширены).

(20161002) Обновлен архив со средой исполнения (циклические и условные макросы для параметров функции).

(20160925) Обновлен архив со средой исполнения (ключ компилятора -cs:100500).

(20160903) Обновлен архив со средой исполнения (циклические и условные макросы).

(20160730) Обновлен архив со средой исполнения (исправлены ошибки).

(20160601) Обновлен архив со средой исполнения (шаблоны операторов для базовых типов).

(20160519) Обновлен архив со средой исполнения (лямбда вида {* a:=1} автоматически выводит тип входного параметра из контекста).

(20160517) Обновлен архив со средой исполнения (убрана необходимость писать ";" перед "}").

(20160509) Обновлен архив со средой исполнения (добавлен тип _Память_).

Тут могла быть ваша реклама)


˄˄˄
                                                                                 Яндекс.Метрика Рейтинг@Mail.ru