Форум программистов, компьютерный форум, киберфорум
Другие языки программирования
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
1

Новый язык программирования SPL

20.05.2017, 16:30. Показов 7309. Ответов 83
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

Я сейчас делаю новый язык программирования, называется SPL (Simple Programming Language).
Это высокоуровневый интерпретируемый язык, который реализован в виде UWP приложения для Windows 10.
Основное ядро языка уже готово. Желающие протестировать, поделиться своими соображениями и пожеланиями - добро пожаловать!

Для тех, кто знает английский язык - у меня уже написана книга про SPL, подробно описывающая структуру языка и снабженная примерами. На русский я ее еще не перевел, потому что пока это рабочий документ, книга постоянно дорабатывается и обновляется. А на английском она потому, что с английского языка ее потом будет проще перевести на русский, чем с русского на английский.

Также я готов обсуждать и отвечать на вопросы здесь, на форуме.

Вкратце о языке. Он не содержит ключевых слов и очень лаконичен в своей записи. В SPL все переменные имеют автоматический тип, все массивы - динамические гетерогенные. Из любого места можно пользоваться локальными переменными любой функции.

#.output("Hello, world!")

Печатает текст "Hello, world!". Символ "#" показывает, что функция принадлежит группе системных функций. Приведенная ниже программа печатает то же самое:

текст="Hello, world!"
печать=#.output
печать(текст)

Это пример условия, в котором если "a" больше 5, то в "b" заносится 1, иначе в "b" заносится 0:

? a>5
b=1
!
b=0
.

Это пример перехода на метку, где "->" это команда перехода, а метка указывается после символа ":":

-> метка
:метка

или так:

->1
:1

Это пример цикла, который печатает цифры от 1 до 10:

a=0
> a<10
a+=1
#.output(a)
<

Это пример определения и использования функции пользователя "diag". Программа в результате печатает число 5 (диагональ катетов длиной 3 и 4):

diag(x,y)<=#.sqrt(x^2+y^2)
#.output(diag(3,4))

Вот более сложный пример определения и рекурсивного вызова функции "f", которая рассчитывает факториал числа. Программа в результате печатает число 120 (факториал числа 5):

f(k)=
?k=1;<=1;.
<=k*f(k-1)
.
#.output(f(5))

В SPL очень много особенностей, некоторые из которых вы не найдете в других языках программирования.
Поскольку SPL я делаю в виде UWP приложения, то программа работает на любом типе устройства под управлением Windows 10, а программы пользователя автоматически синхронизируются между вашими устройствами. Программа пока в самом начале развития, в стадии альфа-версии. Но там уже работает редактор кода и есть что тестировать в самом языке.

Если кто-нибудь захочет принять участие в бета-тестировании и поближе ознакомиться с SPL - пишите, я поделюсь линком для установки из магазина Microsoft Store.

Спасибо за внимание!

Добавлено через 50 минут
Линк на мою книгу по SPL (англ. яз.): http://kibernetik.pro/forum/vi... =71&t=1717
Текст постоянно дописывается и переписывается, пока язык в процессе разработки.
Все, что описано в книге, уже сделано и работает в альфа-версии. Все примеры программ - рабочие.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2017, 16:30
Ответы с готовыми решениями:

Новый язык программирования
я изобрел самый лучший язык программирования и самый простой program SAMPLE func main #x,y,z;...

Новый язык программирования LUX
*** Новый язык программирования LUX - особенности программирования. Язык программирования...

Язык программирования Яр
Разрабатываю полностью русскоязычный язык программирования для профессионального применения (не...

Язык программирования РС/Б
На страничке http://www.rs-b.nm.ru можно скачить компилятор (написаный полностью на асм), примеры,...

83
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
21.05.2017, 19:01  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
А сколько пользователей Windows 10 на смартфонах и компьютерах? А Golang, Python, C#, Си работают везде.
Я вроде нигде не писал, что стремлюсь создать самую распространенную в мире реализацию языка.

Я писал, что я не знаю такого приложения по программированию, которое бы одинаково легко работало и на компьютере, и на планшете, и на смартфоне. Поэтому я и делаю SPL - он одинаково просто и удобно работает на любом устройстве. Ну а поскольку пока существует только одна операционная система, которая это позволяет - то SPL пишется под нее. Сколько у Windows 10 пользователей меня вообще-то мало волнует, потому что мне вполне достаточно одного такого пользователя - меня - чтобы сделать эту программу. Если это окажется еще кому-то полезным - замечательно, для того и пост на этом форуме. Если же нет - то кто мешает просто пройти мимо и пользоваться тем, что вы перечислили?

Теперь вернемся к тому, что вы написали: С# работает везде. У меня на смартфоне он не работает. Я же пишу приложение для программирования, которое работает на любом устройстве.

Более того, SPL позволит публиковать программы, написанные на SPL, в магазине Microsoft как самостоятельные приложения. Это тоже довольно важный момент.
0
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
24.05.2017, 23:43  [ТС] 22
Это ссылка на документацию к языку SPL на русском языке.
Документированы те возможности языка, которые уже реализованы в приложении. Документация пополняется по мере добавления новых функций.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
25.05.2017, 18:45 23
Цитата Сообщение от Mr_K Посмотреть сообщение
Это ссылка на документацию к языку SPL на русском языке.

Не по теме:

Там пустая страница с надписью «Руководство по SPL». Значит ли это, что

Цитата Сообщение от Mr_K Посмотреть сообщение
Документированы те возможности языка, которые уже реализованы в приложении.
никаких вохможностей пока нет?



А-а-а, меню сверху… Как-то не интуитивно, может, лучше расположить всё на одной странице? Так искать по тексту удобней. А в начало поместить оглавление с перемоткой на нужный раздел.

Добавлено через 8 минут
Объекты сохраняются в стеке с помощью команды <=, а извлекаются из стека во время его использования.

a=s
b=s
Окей, а как мне присвоить переменной сам стэк? С функциями это возможно:
p=#.output
А со стеком? Как передать стек в качестве аргумента функции?
0
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
25.05.2017, 23:58  [ТС] 24
Просто это документация из приложения, а там это меню сверху хорошо видно.
Сразу при первом открытии Справки никакая конкретно страница не открывается, потому что это будет либо дублирование того же меню сверху, или скорее всего ненужная пользователю информация, поскольку неясно за чем именно зашел пользователь.

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

Добавлено через 13 минут
В качестве примера передачи стека в функцию, вот пример программы, которая описывает функцию, заносит в стек пару чисел и печатает результат работы этой функции при передаче в нее линка на стек - число "3":

f(x)<=x+x
s<=1;s<=2
#.output(f(~s))

Добавлено через 4 часа 7 минут
В качестве примера привожу сравнение одного и того же кода на языке D, взятого из книги Андрея Александреску, и на языке SPL.
В варианте кода на SPL я максимально сохранил стиль и орфографию оригинала, чтобы сравнение было наиболее адекватным.

На языке D:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
import std.stdio;
void main()
{
   immutable inchesPerFoot = 12;
   immutable cmPerInch = 2.54;
   foreach (feet; 5 7)
   {
      foreach (inches; 0 inchesPerFoot)
      {
         writeln(feet, "'" inches, "''\t" (feet * inchesPerFoot + inches) * cmPerInch);
      }
   }
}
На языке SPL:
C++
1
2
3
4
5
6
7
8
9
10
11
inchesPerFoot = 12
cmPerInch = 2.54
feet = 5
> feet < 7
  inches = 0
  > inches < inchesPerFoot
    #.output(feet, "'", inches, "''", #.tab, (feet * inchesPerFoot + inches) * cmPerInch)
    inches += 1
  <
  feet += 1
<
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
27.05.2017, 18:07 25
Mr_K, в Ваш адрес было высказано много критики... По собственному опыту знаю - это не очень приятно. Тем не менее, рекомендую не обижаться, проанализировать то, что Вам написали, отбросить несущественное и сделать нужные выводы. И - главное - не бросайте проект, работайте!
1
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
29.05.2017, 22:12  [ТС] 26
Я добавил новый вид цикла, и с учетом этого последнее сравнение будет выглядеть так:

D:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
import std.stdio;
void main()
{
  immutable inchesPerFoot = 12;
  immutable cmPerInch = 2.54;
  foreach (feet; 5 7)
  {
    foreach (inches; 0 inchesPerFoot)
    {
      writeln(feet, "'" inches, "''\t" (feet * inchesPerFoot + inches) * cmPerInch);
    }
  }
}
SPL:
C#
1
2
3
4
5
6
7
inchesPerFoot = 12
cmPerInch = 2.54
> feet, 5..6
  > inches, 0..inchesPerFoot - 1
    #.output(feet, "'", inches, "''", #.tab, (feet * inchesPerFoot + inches) * cmPerInch)
  <
<
Добавлено через 19 часов 11 минут
В SPL появились словари.
Вот выдержка из документации:

Если в качестве индекса одномерного массива используется текст, то такой массив работает как словарь.
C#
1
2
d["ключ1"]=12
d["ключ2"]="Текстовое значение"
Если обратиться к словарю по числовому индексу, то будет возвращено значение ключа для этой словарной записи. В следующем примере будет напечатан текст "ключ1 ключ2".
C#
1
2
3
d["ключ1"]=12
d["ключ2"]="Текстовое значение"
#.output(d[1]," ",d[2])
Добавлено через 23 минуты
В SPL объект может быть чем угодно - числом, текстом, функцией и т.д., поэтому если в объект еще ничего не занесли, то там ничего и нет. Это может быть правильно с точки зрения работы программы, но все же не очень удобно. Например в этом случае программа
C#
1
a+=1
даст ошибку, потому что 1 добавляется к тому, чего еще нет.

Поэтому я сделал в SPL неявную инициализацию объекта. Это значит, что если исходя из контекста выражения можно понять, какой тип требуется от еще пока неопределенного объекта, то этот объект автоопределяется до 0 если это число или до "" если это текст.
Таким образом, в приведенном выше примере программа не даст ошибки, определит объект "а" как число и в результате "а" станет 1.
А следующая программа напечатает "2:0"
C#
1
2
a=b+2
#.output(a,":",b)
Добавлено через 24 минуты
Для сравнения
C#
1
2
a=b+"Текст"
#.output(a,":",b)
напечатает "Текст:"

Добавлено через 14 часов 3 минуты
Линк на книгу в первом посте больше не действителен. Это теперь не актуально, потому что вся документация уже систематизирована и есть на русском языке (линк указан в теме выше).

Добавлено через 17 часов 21 минуту
На данный момент набор функций позволил написать программу подсчета и отображения самых часто встречаемых слов в Гамлете Шекспира.

Текст программы на SPL:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
text=#.readtext("hamlet.txt")
words = #.split(text, " ", ".", ",", ";", "'", "!", "?", "-", "(", ")", "[", "]", #.crlf, #.quot)
> i, 1..#.size(words)
  >> words[i] = ""
  dict[#.lower(words[i])] += 1
  total += 1
<
#.sortval(dict)
#.reverse(dict)
#.output(total, " слов; ", #.size(dict), " уникальных слов")
> i, 1..20
  key = dict[i]
  #.output(i, " : ", key, " = ", dict[key])
<
И результат работы:

32885 слов; 4634 уникальных слов
1 : the = 1091
2 : and = 969
3 : to = 767
4 : of = 675
5 : i = 633
6 : a = 571
7 : you = 558
8 : my = 520
9 : in = 451
10 : it = 421
11 : that = 405
12 : is = 363
13 : ham = 358
14 : not = 315
15 : d = 305
16 : his = 304
17 : this = 299
18 : with = 277
19 : but = 274
20 : for = 252
0
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
01.06.2017, 05:14  [ТС] 27
Я звел блог о программировании на SPL.
0
4393 / 2243 / 252
Регистрация: 28.10.2011
Сообщений: 8,574
Записей в блоге: 6
05.06.2017, 00:11 28
Цитата Сообщение от Mr_K Посмотреть сообщение
SPL делается для Windows 10, поскольку это единственная система, которая работает на всех типах устройств - от компьютера до смартфона.
На смартфонах обычно андроид...
SPL будет работать под управлением андроида?

Цитата Сообщение от Mr_K Посмотреть сообщение
Это очень продвинутая и при этом простая версия языка, причем программу, написанную на smart BASIC, можно даже опубликовать в App Store и она будет работать как самостоятельное iOS приложение. Но для Windows я такого приложения не знаю.
Для мобильных платформ есть B4A, для компа PureBasic и другие диалекты.

Цитата Сообщение от Mr_K Посмотреть сообщение
Я же пишу приложение для программирования, которое работает на любом устройстве.
Тогда и на нулевой малине должно работать. Только для нее нет Windows 10...

Цитата Сообщение от Mr_K Посмотреть сообщение
Более того, SPL позволит публиковать программы, написанные на SPL, в магазине Microsoft как самостоятельные приложения.
Каким методом? Сшиванием интерпретатора и кода программы? Или предполагается полноценная компиляция?

Добавлено через 15 секунд
Цитата Сообщение от Mr_K Посмотреть сообщение
SPL делается для Windows 10, поскольку это единственная система, которая работает на всех типах устройств - от компьютера до смартфона.
На смартфонах обычно андроид...
SPL будет работать под управлением андроида?

Цитата Сообщение от Mr_K Посмотреть сообщение
Это очень продвинутая и при этом простая версия языка, причем программу, написанную на smart BASIC, можно даже опубликовать в App Store и она будет работать как самостоятельное iOS приложение. Но для Windows я такого приложения не знаю.
Для мобильных платформ есть B4A, для компа PureBasic и другие диалекты.

Цитата Сообщение от Mr_K Посмотреть сообщение
Я же пишу приложение для программирования, которое работает на любом устройстве.
Тогда и на нулевой малине должно работать. Только для нее нет Windows 10...

Цитата Сообщение от Mr_K Посмотреть сообщение
Более того, SPL позволит публиковать программы, написанные на SPL, в магазине Microsoft как самостоятельные приложения.
Каким методом? Сшиванием интерпретатора и кода программы? Или предполагается полноценная компиляция?
0
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
05.06.2017, 08:23 29
Цитата Сообщение от Mr_K Посмотреть сообщение
На данный момент набор функций позволил написать программу подсчета и отображения самых часто встречаемых слов в Гамлете Шекспира.
Время исполнения каково?
0
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
05.06.2017, 17:00  [ТС] 30
Цитата Сообщение от locm Посмотреть сообщение
SPL будет работать под управлением андроида?

Каким методом? Сшиванием интерпретатора и кода программы? Или предполагается полноценная компиляция?
Нет, пока планируется только для Windows 10.

СДК, представляющий собой работающий интерпретатор, в который копируются файлы SPL.

Добавлено через 1 минуту
Цитата Сообщение от vic_one Посмотреть сообщение
Время исполнения каково?
На моем ноутбуке 7-летней давности время работы программы 0.4 секунды.
0
4393 / 2243 / 252
Регистрация: 28.10.2011
Сообщений: 8,574
Записей в блоге: 6
05.06.2017, 17:02 31
Цитата Сообщение от Mr_K Посмотреть сообщение
СДК, представляющий собой работающий интерпретатор, в который копируются файлы SPL.
Т. е. защиты исходника никакой? Любой сможет вытащить исходник программы?
Скорость интерпретации надеюсь на приличном уровне?
Заложена ли в интерпретатор поддержка многопоточности в программе?

Цитата Сообщение от Mr_K Посмотреть сообщение
Нет, пока планируется только для Windows 10.
Тогда на большинстве смартфонов, планшетов и т. д. работать не будет.
0
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
05.06.2017, 17:20  [ТС] 32
Цитата Сообщение от locm Посмотреть сообщение
Т. е. защиты исходника никакой? Любой сможет вытащить исходник программы?
Скорость интерпретации надеюсь на приличном уровне?
Заложена ли в интерпретатор поддержка многопоточности в программе?
Тогда на большинстве смартфонов, планшетов и т. д. работать не будет.
В СДК будет загружаться не исходник, а бинарный промежуточный код. Вытащить оттуда исходник не получится.
Тут сказать сложно, разве что сравнивать с какими-нибудь другими интерпретаторами.
Насчет многопоточности пока вопрос открытый. Возможно в перспективе многопоточность будет, я это держу в уме.
На моем смартфоне работает А за "большинством" я, как уже говорил, не гонюсь. Меня больше волнует универсальность платформы в принципе, чем у кого сейчас сколько андроидов.
0
4393 / 2243 / 252
Регистрация: 28.10.2011
Сообщений: 8,574
Записей в блоге: 6
05.06.2017, 19:07 33
Цитата Сообщение от Mr_K Посмотреть сообщение
Насчет многопоточности пока вопрос открытый. Возможно в перспективе многопоточность будет, я это держу в уме.
Нужно предусмотреть ее поддержку, потому что потом придется много чего переделывать.

Цитата Сообщение от Mr_K Посмотреть сообщение
Меня больше волнует универсальность платформы в принципе, чем у кого сейчас сколько андроидов.
Если приложение работает на 1% смартфонов, то про универсальность лучше промолчать.
0
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
05.06.2017, 19:17  [ТС] 34
Цитата Сообщение от locm Посмотреть сообщение
Если приложение работает на 1% смартфонов, то про универсальность лучше промолчать.
Универсальность - это не мое личное определение. Это определение Microsoft. Поэтому советы подобного рода оставьте для них.
К тому же под универсальностью понимается не только поддержка смартфонов, но и устройств 2-в-1, которые пока есть только на Windows 10. А это на сегодняшний день перспективный рынок.
0
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
05.06.2017, 20:28 35
Mr_K, Где качнуть твой компилятор или что там у тебя есть?
0
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
05.06.2017, 20:45  [ТС] 36
Цитата Сообщение от vic_one Посмотреть сообщение
Mr_K, Где качнуть твой компилятор или что там у тебя есть?
"Что там у меня есть"? Для вас у меня ничего нет.
Тестеров я выбираю.
0
47 / 7 / 0
Регистрация: 20.03.2015
Сообщений: 59
05.06.2017, 20:47 37
Mr_K, понятно - ничё у тебя нет. Я вот не стесняюсь и отдал компилятор на растерзание. http://www.vlang.ru/files/test20170525.zip
0
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
06.06.2017, 00:11  [ТС] 38
Пример функции, считающей факториал:
C#
1
2
3
4
5
6
f(n)=
  ? n!>1
    <=1
  .
  <= n * f(n-1)
.
или в более компактной записи
C#
1
2
3
4
f(n)=
?n!>1;<=1;.
<=n*f(n-1)
.
Для любителей кодирования на русском языке, эта программа печатает "120"
C#
1
2
3
4
5
6
7
8
печать=#.output
фактор(н)=
  ? н!>1
    <=1
  .
  <= н * фактор(н-1)
.
печать(фактор(5))
Добавлено через 56 минут
Хотя и так все понятно, но не удержался

印=#.output
阶乘(号)=
? 号!>1;<=1;.
<= 号 * 阶乘(号-1)
.
印(阶乘(5))

Поскольку все языковые замены встроенных системных функций можно сделать в отдельном файле и потом просто включать в любую программу с помощью команды $, то например при таком содержимом файла с именем 中文:
印=#.output

текст программы будет выглядеть так:

$中文
阶乘(号)=
? 号!>1;<=1;.
<= 号 * 阶乘(号-1)
.
印(阶乘(5))
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
06.06.2017, 08:49 39
Цитата Сообщение от Mr_K Посмотреть сообщение
Это определение Microsoft
Microsoft понятия не имеет, что такое универсальность.

Цитата Сообщение от Mr_K Посмотреть сообщение
но и устройств 2-в-1
Это что за устройства?
0
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
07.06.2017, 01:58  [ТС] 40
Пример работы графических функций.
Эта программа рисует график в виде случайной линии:
C#
1
2
3
4
5
6
7
8
9
y = 200
'рисуем ось
#.drawline(500,y,0,y)
'рисуем график
#.drawcolor(0,0,1)
> x, 1..500
  y += #.rnd(10) - 4.5
  #.drawline(x,y)
<
Новый язык программирования SPL
0
07.06.2017, 01:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2017, 01:58
Помогаю со студенческими работами здесь

Язык программирования Pike
Пайк (англ. Pike — «щука») — динамический интерпретируемый объектно-ориентированный язык...

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

Icon язык программирования
кто знает, где скачать учебник по icon на русском?

Что за язык программирования?
что за язык программирования &gt; restart:with(networks): &gt; new(G):V:=$1..14:addvertex(,G): ...


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

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