Форум программистов, компьютерный форум, киберфорум
Другие языки программирования
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/292: Рейтинг темы: голосов - 292, средняя оценка - 4.55
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
1

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

24.03.2015, 08:17. Показов 55892. Ответов 80

Author24 — интернет-сервис помощи студентам
Создаю язык программирования для 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2015, 08:17
Ответы с готовыми решениями:

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

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

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

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

80
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
02.08.2015, 14:15  [ТС] 21
Author24 — интернет-сервис помощи студентам
Теперь можно использовать {}
Fortran
1
2
3
4
Function List__Add(List__ rval_ret L, Type1 rval_ret R):{
            L+=R;
            Return L;
        }
0
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
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
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
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
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
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
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
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
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
16.09.2015, 22:40 26
Можно вопрос, этот язык он будет кого заменять, РНР? ну в смысле что на нем в основном планируется программировать?
0
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
17.09.2015, 09:46  [ТС] 27
VLK, Можно вопрос, этот язык он будет кого заменять, РНР?
да - есть
PHP
1
2
3
4
5
6
7
sdfsdfs
<?; 
If a==1:{
    Print "Привет мир!!!"
}
?>;
ваываыаыв
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.09.2015, 15:15 28
а в чем юмор, в чем его преимущество перед допустим тем же РНР?
0
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
17.09.2015, 19:20  [ТС] 29
Цитата Сообщение от VLK Посмотреть сообщение
а в чем юмор, в чем его преимущество перед допустим тем же РНР?
Строгая типизация переменных и компиляция в машинный код.
Много фичей для возможности "пережить" строгую типизацию.
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.09.2015, 20:07 30
Цитата Сообщение от vic_one Посмотреть сообщение
Много фичей для возможности "пережить" строгую типизацию.
а что за фичи? можно пример.

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

т.к. учить 2 языка это накладно, а тут всего один, это бы имело успех.
0
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
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
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
22.09.2015, 14:45 32
Вот еще какую штуку я придумал, не знаю как оно будет вписываться в твой язык, смотри есть проблема - метод / функция должны возвращать набор данных допустим - int,string,bool, есть несколько решений этой проблемы:
Первый это создать под эти типы данных отдельный класс - громоздко, отдельный класс под пару переменных (свойств) что то внутри подсказывает что это не правильно.
Второй вариант из C#, там есть такая штука - Tuple ( http://msdn.microsoft.com/ru-r... .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
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
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
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
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
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
26.09.2015, 13:07 35
vic_one, зная C++ на начальном уровне, C# более менее, а так же PHP и JS на нормально уровне (по крайне мере PHP), я вот не понимаю что там написано в этом коде.
Зачем такое делать?
0
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
26.09.2015, 14:46  [ТС] 36
Цитата Сообщение от VLK Посмотреть сообщение
зная C++ на начальном уровне, C# более менее, а так же PHP и JS на нормально уровне (по крайне мере PHP), я вот не понимаю что там написано в этом коде.
Зачем такое делать?
Что не понятно?
Будьте откровенны до конца.
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
26.09.2015, 14:55 37
Цитата Сообщение от vic_one Посмотреть сообщение
Что не понятно?
Будьте откровенны до конца.
ну можно сказать все, я же не буду выделять все строчки по отдельности и писать что вот эта.

PS кстати я смотрел язык Rust, там как раз новомодный укороченный синтаксис, так вот там все понятно, в отличии от этого.
0
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
26.09.2015, 15:15  [ТС] 38
Цитата Сообщение от VLK Посмотреть сообщение
ну можно сказать все, я же не буду выделять все строчки по отдельности и писать что вот эта.
многие не будут. но я именно вас не понял опять. если хочется вам написать собственное мнение - это хорошо. Повлияет ли, что ваш пассаж будет понят и одобрен - "50/50"
0
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
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
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
17.10.2015, 21:04 40
Цитата Сообщение от vic_one Посмотреть сообщение
Все пользуются шаблоном "опционально"?
Конечно не все, если я не ошибаюсь такое понятие как "шаблон" есть только в c++. Т.е. тот кто имеет счастье не писать на этом языке конечно не пользуется шаблонами вовсе. Это по сути костыль, добавляющий в язык абстракцию полиморфизма времени компиляции по той причине что таких абстракций изначально не предусмотрено. Если я правильно понял что Ваши шаблоны чем-то повторяют суть плюсовых шаблонов.
0
17.10.2015, 21:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2015, 21:04
Помогаю со студенческими работами здесь

Google выпустил первую версию своего языка программирования Go
Cостоялся официальный релиз первой стабильной версии экспериментального открытого языка...

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru