Форум программистов, компьютерный форум, киберфорум
Наши страницы
Другие языки программирования
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.58/88: Рейтинг темы: голосов - 88, средняя оценка - 4.58
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
1

[V] Хорош ли синтаксис языка программирования V?

24.03.2015, 08:17. Просмотров 16908. Ответов 77

Создаю язык программирования для CGI и текстовых терминалов. Сайт www.vlang.ru. Ищу конструктивную критику синтаксиса языка.

Пример:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
?Use("include.vsc") // присоединяет файл с кодом, исключает дублирование
_Счетчик Отобразить(_Строка) импорт _ОтобразитьСтроку;
 
?Шаблон Клон-Тип1(
    Тип1 Клон(Тип1 пА):
        Тип1 лРез;
        __ИзСтроки(лРез, пА.__ВСтроку, 0);
        =лРез;
    .
)
?Шаблон на-Тип1(
    Тип1 на(Тип1 *пА):
        =пА;
    .
    Тип1 на(Тип1 !пА):
        =пА;
    .
)
~ТРезультат(_0 А, Б, И):
.
~ТРезультат2(_0 А):
.
 
-> АвтоШаблоны(): // начало исполнения
    ТРезультат лТРезультат; лТРезультат.А=123; лТРезультат.Б=777; лТРезультат.И=100500;
    Отобразить(лТРезультат.Клон.на.__ВСтроку+"\н"); // "Клон" и "на" автоматически создаются
    ТРезультат2 лТРезультат2; лТРезультат2=999;
    Отобразить(Клон(на лТРезультат2).__ВСтроку+"\н"); // "Клон" и "на" автоматически создаются
    <-0; // возврат кода завершения
.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2015, 08:17
Ответы с готовыми решениями:

Выбор языка программирования
Добрый день, посетители форума. Мой путь в программирование начался 2 года...

Ребят, презентация нового языка программирования ObjectScript
Сколько же существует всяких языков программирования, еще один? Ну можно и так...

Синтаксис какого языка программирования наиболее читабелен?
Здравия всем! Пытаюсь тут ЯП пилить, но вот проблема, не могу подобрать...

Что мне может дать знание языка Perl и чем он хорош?
Думаю начать изучать язык Perl. Чем то он мне понравился. Но думаю - стоит или...

По русскому названию языка программирования определить английское название этого языка
Задача на перечисляемый тип P=(ада, бейсик, модула2, лисп, паскаль, пл2,...

77
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
02.08.2015, 14:15  [ТС] 21
Теперь можно использовать {}
Fortran
1
2
3
4
Function List__Add(List__ rval_ret L, Type1 rval_ret R):{
            L+=R;
            Return L;
        }
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
16.08.2015, 07:42  [ТС] 22
Фунция как результат вызова функции:
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function TFn1(_Counter F):
    Return F+1;
.
 
Function TFn2(_Counter F):
    Return F+2;
.
 
Function TFn1_TFn1(_Counter Cond, (TFn1) fn1, (TFn1) fn2):
    If Cond:
        Return fn1;
    .
    Return fn2;
.
 
Function CallIf(_Counter Cond, F):
    Return TFn1_TFn1(Cond, TFn1, TFn2)(F);
.
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
17.08.2015, 18:14  [ТС] 23
Начал реализацию eval:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*fn_StringIn_String={_String S:=S+"\н"};
    _String lParam="!!!!!!!!!!!!!!!!!!";
    _String lStr_=
<<  
_String S:
    Return S+" lStr_lParam\н";
.
>> (lParam);
    *lNewFn=FnGen(fn_StringIn_String, lStr_);
    If lNewFn==fn_StringIn_String:
        ("Не удалось\n".ToString).Print;
    .
    Else:
        lNewFn("Привет мир!!!".ToString).Print;
    .
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
30.08.2015, 15:33  [ТС] 24
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Type T1(_Counter F):
.
 
_Counter Set(T1 it, _Counter F):
    *lOld=it.F;
    it.F=F;
    Return lOld;
.
 
Program Prog(): // начало исполнения
    T1 lT1;
    *lOld3=ret_Set(lT1, 2).ret_print_Set(3).print_Set(4);
// у функций появились префиксы вида "ret_" "print_"
    Print("lOld3="+lOld3.ToString+"\n");
    Print("lT1.F(4)="+lT1.F.ToString+"\n");
 
    End 0; // возврат кода завершения
.
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
14.09.2015, 07:19  [ТС] 25
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
_Counter Print(_String) <- _ОтобразитьСтроку;
_String ToString(_Text) <- _ВСтрокуТекст;
_String ToString(_Counter) <- _СчетчикВСтроку;
 
Type TFnBaseT(_String name):{
}
 
?Template TFnBaseExtT - Type1 FnType1(
    Function TFnBaseExtT(_String name, (FnType1) fn):{
        Return {
            Type TFnBaseExtT__ TFnBaseT+((FnType1) fn):{
            }
 
            (_String name, (FnType1) fn):
                TFnBaseExtT__ lTFnBaseExt__; 
                lTFnBaseExt__.name=name; lTFnBaseExt__.fn=fn;
                Return lTFnBaseExt__;
        }(name, fn);
    }
)
 
List LFnBaseT[TFnBaseT]:{
}
Var LFnBaseT gLFnBaseT;
 
?Template GetFn - Type2 FnType1(
    Function GetFn(_String name, (FnType1) fn)(gLFnBaseT):{
        *lForT=TFnBaseExtT(name, fn);
        @el,ind++ gLFnBaseT:
            If el.name==name:
                el._lForT_:
                    Print("Попалась "+name+"\n");
                    Return el.fn;
                .
            .
        .
        gLFnBaseT+=TFnBaseExtT(name, fn);
        Return fn;
    }
    Function GetFn(_Text name, (FnType1) fn):{
        Return GetFn(name.ToString, fn);
    }
)
 
?Template SetFn - Type2 FnType1(
    Function SetFn(_String name, (FnType1) fn)(gLFnBaseT):{
        *lForT=TFnBaseExtT(name, fn);
        @el,ind++ gLFnBaseT:
            If el.name==name:
                el._lForT_:
                    el.fn=fn;
                    Print("Попалась "+name+"\n");
                    Return 1;
                .
            .
        .
        gLFnBaseT+=TFnBaseExtT(name, fn);
        Return 0;
    }
    Function SetFn(_Text name, (FnType1) fn):{
        Return SetFn(name.ToString, fn);
    }
)
 
?Template CreateList - Type2(
    Function CreateList(Type2 t2):{
        Return {
            List List__[Type2]:.
 
            ():
                List__ lList__;
                =lList__;
        }();
    }
);
 
?Template GetFns - FnType1(
    Function GetFns((FnType1) fn)(gLFnBaseT):{
        _String name;
        *lForT=TFnBaseExtT(name, fn);
        *lRes=CreateList(lForT);
        @el,ind++ gLFnBaseT:
            el._lForT_:
                lRes+=TFnBaseExtT(el.name, el.fn);
                Print("Нашлась "+el.name+"\n");
            .
        .
        Return lRes;
    }
)
 
Program Prog(): // начало исполнения
 
    *fn1=GetFn"A2"{_Counter A:=A+A};
    *fn2=GetFn"A3"{_Counter A:=A+A};
    Print(fn1(10).ToString+"==20\n");
    SetFn"A2"{_Counter A:=A*A};
    fn1=GetFn"A2"{_Counter A:=A+A};
    Print(fn1(10).ToString+"==100\n");
    Print(GetFn("A2",fn1)(11).ToString+"==121\n");
 
    @lel,ind++ GetFns{_Counter A:=A}:
        Print(ind.ToString+") "+lel.name+"(3)="+lel.fn(3).ToString+"\n");
    .
 
    End 0; // возврат кода завершения
.
0
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
16.09.2015, 22:40 26
Можно вопрос, этот язык он будет кого заменять, РНР? ну в смысле что на нем в основном планируется программировать?
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
17.09.2015, 09:46  [ТС] 27
VLK, Можно вопрос, этот язык он будет кого заменять, РНР?
да - есть
PHP
1
2
3
4
5
6
7
sdfsdfs
<?; 
If a==1:{
    Print "Привет мир!!!"
}
?>;
ваываыаыв
0
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
17.09.2015, 15:15 28
а в чем юмор, в чем его преимущество перед допустим тем же РНР?
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
17.09.2015, 19:20  [ТС] 29
Цитата Сообщение от VLK Посмотреть сообщение
а в чем юмор, в чем его преимущество перед допустим тем же РНР?
Строгая типизация переменных и компиляция в машинный код.
Много фичей для возможности "пережить" строгую типизацию.
0
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
17.09.2015, 20:07 30
Цитата Сообщение от vic_one Посмотреть сообщение
Много фичей для возможности "пережить" строгую типизацию.
а что за фичи? можно пример.

Вообще для веба мне кажется есть потребность в языке который бы мог работать на стороне клиента (т.е. заменять JS) и при этом на стороне сервера (заменять РНР) с простотой работы как у РНР, но при этом желательно полностью объект-ориентированный, как C#.

т.к. учить 2 языка это накладно, а тут всего один, это бы имело успех.
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
18.09.2015, 08:47  [ТС] 31
Цитата Сообщение от VLK Посмотреть сообщение
т.к. учить 2 языка это накладно, а тут всего один, это бы имело успех.
Это может Котлин. Но он на JVM на серверной стороне, что имеет свои минусы.

Добавлено через 7 минут
Цитата Сообщение от VLK Посмотреть сообщение
а что за фичи? можно пример.
Автоматический вывод типов всего и вся. Шаблоны и анонимные типы.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
sdfsdfs
<?; 
If a==1:{
    *НоваяПеременная="Привет мир!!!";
    *="Привет мир!!!".Print;
     *ЕщеОдна=Box("asdasd", 1, 0.1);
     *Список=ЕщеОдна.ВСписок;
     @Элемент,Индекс++ Список:
           Print("Элемент["+Индекс.AsString+"]="+Элемент._1);
     .
}
?>;
ваываыаыв
0
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
22.09.2015, 14:45 32
Вот еще какую штуку я придумал, не знаю как оно будет вписываться в твой язык, смотри есть проблема - метод / функция должны возвращать набор данных допустим - int,string,bool, есть несколько решений этой проблемы:
Первый это создать под эти типы данных отдельный класс - громоздко, отдельный класс под пару переменных (свойств) что то внутри подсказывает что это не правильно.
Второй вариант из C#, там есть такая штука - Tuple ( http://msdn.microsoft.com/ru-ru/library/system.tuple(v=vs.110).aspx ) решает от части проблему, но все же не то.
Третий вариант который предлагает в будущем C# - http://habrahabr.ru/post/256825/ не знаю что сказать, как бы это не превратило код в не пойми что.

я вижу такой решение проблемы, нам нужен контейнер (специальный объект, ну или как в некоторых языках анонимный объект, без методов и конструкторов) для хранения данных, в C# мы можем создавать события, нам надо сначала объявить делегат, а потом под этот делегат объявить событие:

C#
1
2
3
delegate void DelegateToEvent(int rhs); 
 
public static event DelegateToEvent Alarm;
вот примерно по тому же принципу сделать, мы объявляем контейнер с данными так же как и делегат:

C#
1
2
public container MyContainer = { Name: "Vova", Age: 20, IsActive: true };
// со свойствами которые будут заданы по умолчанию
это будет означать что мы можем создавать контейнеры (объекты) с следующеми параметрами, ну а потом когда нам надо возвратить набор данных мы просто пишем:
C#
1
2
3
4
5
6
MyContainer a = new MyContainer { Name: "Zorro", Age: 500, IsActive: false };
// или можно убрать допустим IsActive и оно будет задано из свойств по умолчанию
 
MyContainer b = new MyContainer {}; // все параметры по умолчанию
 
return a;
какая то такая хрень.
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
24.09.2015, 07:58  [ТС] 33
Все это есть.
И анонимные типы и генераторы.
PHP
1
2
3
4
5
*lList=Box(1, "2", 3.0).ToList;
lList+=Box(2, "3", 4.0);
*lList2=?Box(Name: "Zorro", Age: 500, IsActive: false).ToList;
lList2+=?Box(Name: "Zorro2", Age: 5002, IsActive: false);
);
Но все это нужно по библиотекам собрать, но синтаксис уже есть и работает.

Добавлено через 10 часов 15 минут
Цитата Сообщение от vic_one Посмотреть сообщение
lList2+=?Box(Name: "Zorro2", Age: 5002, IsActive: false);
должно выглядеть:
PHP
1
lList2+=lList2.NewItem?Set(Name: "Zorro2", Age: 5002, IsActive: false);
Добавлено через 5 минут
или
PHP
1
lList2+=lList2.NewItem.SetName "Zorro2" .SetAge 5002 .SetIsActive false;
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
26.09.2015, 09:58  [ТС] 34
Вот конкретная реализация:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
?Транслятор Box("comp.exe box.vsc");
?Транслятор Set("comp.exe set.vsc");
 
_Counter Print(_String) <- _ОтобразитьСтроку;
_String ToString(_Text) <- _ВСтрокуТекст;
_String ToString(_Counter) <- _СчетчикВСтроку;
 
Program Prog(): // начало исполнения
    *true=1;
    *false=0;
 
    *lB=?Box(Name: ToString"Zorro2", Age: 5002, IsActive: false, Box: ?Box(Name: ToString"Zorro2", Age: 5002, IsActive: false));
    If lB.IsActive==false:
        *=lB.?Set(Name: ToString"Привет мир!!!", IsActive: true, Box.IsActive: true);
        Print(__inString(lB)+"\n");
    .
 
    End 0; // возврат кода завершения
.
0
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
26.09.2015, 13:07 35
vic_one, зная C++ на начальном уровне, C# более менее, а так же PHP и JS на нормально уровне (по крайне мере PHP), я вот не понимаю что там написано в этом коде.
Зачем такое делать?
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
26.09.2015, 14:46  [ТС] 36
Цитата Сообщение от VLK Посмотреть сообщение
зная C++ на начальном уровне, C# более менее, а так же PHP и JS на нормально уровне (по крайне мере PHP), я вот не понимаю что там написано в этом коде.
Зачем такое делать?
Что не понятно?
Будьте откровенны до конца.
0
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
26.09.2015, 14:55 37
Цитата Сообщение от vic_one Посмотреть сообщение
Что не понятно?
Будьте откровенны до конца.
ну можно сказать все, я же не буду выделять все строчки по отдельности и писать что вот эта.

PS кстати я смотрел язык Rust, там как раз новомодный укороченный синтаксис, так вот там все понятно, в отличии от этого.
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
26.09.2015, 15:15  [ТС] 38
Цитата Сообщение от VLK Посмотреть сообщение
ну можно сказать все, я же не буду выделять все строчки по отдельности и писать что вот эта.
многие не будут. но я именно вас не понял опять. если хочется вам написать собственное мнение - это хорошо. Повлияет ли, что ваш пассаж будет понят и одобрен - "50/50"
0
vic_one
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 56
14.10.2015, 16:36  [ТС] 39
Все пользуются шаблоном "опционально"?
Применяя последние технологии в ЯП - такие как анонимные интерфейсы и встраивание интерфейса в существующие типы. Получил самый легковесный шаблон "опционально" - без обертования:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function GetIOptT1(_Counter val):
    *lRes=IOpt(New::T1(val));
    If val%2:
        =lRes;
    .
    =lRes.Error(777);
.
 
Function Get2IOptT1(_Counter val):
    *lRes=IOpt(GetIOptT1(val));
    *lInnerType=lRes.InnerType;
    lRes._lInnerType_:
// тут полезный код
    .
    Else:
        =lRes.Error(999);
    .
    =lRes;
.
0
castorsky
1973 / 1076 / 87
Регистрация: 29.11.2013
Сообщений: 3,354
17.10.2015, 21:04 40
Цитата Сообщение от vic_one Посмотреть сообщение
Все пользуются шаблоном "опционально"?
Конечно не все, если я не ошибаюсь такое понятие как "шаблон" есть только в c++. Т.е. тот кто имеет счастье не писать на этом языке конечно не пользуется шаблонами вовсе. Это по сути костыль, добавляющий в язык абстракцию полиморфизма времени компиляции по той причине что таких абстракций изначально не предусмотрено. Если я правильно понял что Ваши шаблоны чем-то повторяют суть плюсовых шаблонов.
0
17.10.2015, 21:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2015, 21:04

С какого языка стоит начать обучение? С языка программирования Pascal?
Здравствуйте. Хотелось бы больше знать о компьютерной безопасности, в...

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

Выбор языка программирования для разработки среды программирования
Возникла мысль о создании ЯПа. Ныне популярные ЯПы не универсальны, либо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru