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

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

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

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

Я сейчас делаю новый язык программирования, называется 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.05.2017, 16:30
Ответы с готовыми решениями:

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

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

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

83
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
06.07.2017, 00:04  [ТС]
Студворк — интернет-сервис помощи студентам
Теперь SPL годится для создания самостоятельных UWP приложений благодаря SPL SDK. Эти приложения можно при желании загружать в Microsoft Store.
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
13.07.2017, 10:30  [ТС]
SPL теперь имеет в своем арсенале объекты интерфейса. С точки зрения синтаксиса, это просто интерактивные группы.

Пример программы, которая создает на экране кнопку. При нажатии на кнопку программа выводит на экран текст, написанный на кнопке:
C#
1
2
3
4
5
6
7
b = #.button
#.show(b)
>
  ? #.act(b)
    #.output(b.text)
  .
<
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
26.07.2017, 12:09  [ТС]
Приложение "SPL" из стадии закрытой беты перешло в стадию открытого бета-тестирования и теперь доступно всем желающим. Подробности на сайте http://kibernetik.pro/spl/
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
27.07.2017, 17:14
Чем-то похоже на tcl (который сделан уже много лет назад).
Я правильно понял. что Smart Basic пользуется определённой популярностью? Форум достаточно большой.
Я тоже делаю свой язык программирования, ищу, кого привлечь в свой проект. Хотя понятно, что авторы своих языков - это те, кого уговорить на такое сотрудничество удастся в самую последнюю очередь

Добавлено через 1 час 12 минут
Я бы советовал использовать больше всяких смайликов, если речь идёт о языке для мобильных устройств. Задействуйте любые значки, к-рые удобно ввести с виртуальной клавиатуры устройства - так текст будет компактнее.
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
27.07.2017, 17:20  [ТС]
Цитата Сообщение от budden Посмотреть сообщение
Чем-то похоже на tcl (который сделан уже много лет назад).
Я правильно понял. что Smart Basic пользуется определённой популярностью? Форум достаточно большой.
Я тоже делаю свой язык программирования, ищу, кого привлечь в свой проект. Хотя понятно, что авторы своих языков - это те, кого уговорить на такое сотрудничество удастся в самую последнюю очередь
Да, smart BASIC - это мой язык программирования, который я сделал для iOS лет 5 назад. Поскольку программы, написанные на smart BASIC, могут быть опубликованы в App Store как самостоятельные приложения, то у smart BASIC довольно много пользователей.
Я не совсем понимаю, о каком привлечении в свой проект вы говорите, но в любом случае это правильно - опубликовать о своем проекте информацию и сказать о том, какое участие вы ожидаете от тех, кто заинтересовался вашим проектом.
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
27.07.2017, 18:00
Вы можете найти по моему профилю, но в целом я даже не буду к вам обращаться с таким предложением, и не буду тут занимать место своей рекламой. То, что вы делаете, у вас получается лучше, чем у меня получается то, что я делаю, желаю дальнейших успехов
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
27.07.2017, 19:55  [ТС]
Цитата Сообщение от budden Посмотреть сообщение
Вы можете найти по моему профилю, но в целом я даже не буду к вам обращаться с таким предложением, и не буду тут занимать место своей рекламой. То, что вы делаете, у вас получается лучше, чем у меня получается то, что я делаю, желаю дальнейших успехов
Спасибо!
Для разработчиков языков, мне кажется, интересным и плодотворным может быть такое участие, как сравнение кодов на разных языках одной и той же задачи. Лично мне это всегда дает много пищи для размышления. То есть если вам будет интересно сравнение своего языка с моим, то можете предлагать мне такое "соревнование кодов" - какую-нибудь микро-задачу или просто образец синтаксиса, и свой код для реализации этого. Я приведу пример этого кода на моем языке - и в таком сравнении можно будет отлаживать синтаксис и другие конструкции языка.
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
27.07.2017, 22:54
Вряд ли в данном случае имеет смысл. Слишком разные цели создания языков. И кроме того, есть какой-нибудь rosetta code.
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
02.08.2017, 11:38  [ТС]
Цитата Сообщение от budden Посмотреть сообщение
Я бы советовал использовать больше всяких смайликов, если речь идёт о языке для мобильных устройств. Задействуйте любые значки, к-рые удобно ввести с виртуальной клавиатуры устройства - так текст будет компактнее.
На счет смайликов я не совсем понял. Может быть вы сможете показать на примере как это может выглядеть?
Да, значки - это верно. Но тут важно не перегнуть палку - я стараюсь, чтобы SPL не превратился в криптографическую запись в погоне за компактностью.

В качестве примера приведу форму записи, которую я недавно добавил для простых условий (когда нужно выполнить всего одно действие при соблюдения условия). Хотя в общем виде в SPL условие записывается так (пример: если a=0, то выполнить функцию f()):

Objective-C
1
2
3
? a=0
  f()
.
сейчас можно записать его проще:

Objective-C
1
? a=0, f()
Надо отметить, что при желании в SPL можно писать максимально сжато:

Objective-C
1
?a=0,f()
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
02.08.2017, 12:48
Для этого надо знать, что там есть на клавиатуре. посмотрел на свой андроид - ничего особого нет, значков примерно столько же, сколько на компьютерной клавиатуре. Может быть, имело бы смысл заменять некоторые слова на экране значками, например, вместо output рисовать какую-нибудь стрелочку из юникода.
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
02.08.2017, 13:21  [ТС]
Цитата Сообщение от budden Посмотреть сообщение
Для этого надо знать, что там есть на клавиатуре. посмотрел на свой андроид - ничего особого нет, значков примерно столько же, сколько на компьютерной клавиатуре. Может быть, имело бы смысл заменять некоторые слова на экране значками, например, вместо output рисовать какую-нибудь стрелочку из юникода.
Понятно. Спасибо за совет.
Отмечу, что в SPL любую функцию легко скопировать, например

пч = #.output

чтобы дальше уже писать

пч("Мой текст")
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
06.08.2017, 12:40  [ТС]
Программа перевода римских цифр в арабские:

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
roman = #.input("Введите римское число:")
 
text = #.split(#.upper(roman))
numbers = [["I","V","X","L","C","D","M"],[1,5,10,50,100,500,1000]]
dict = #.dict(numbers)
value,prev = 0
> i, #.size(text,1)..1, -1
  v,pv = dict[text[i]]
  ? v<prev, v = -v
  value += v
  prev = pv
<
 
#.output("Арабское число: ",value)
Добавлено через 10 часов 33 минуты
Другая версия программы перевода римских чисел в арабские. Она выглядит попроще и работает немного по-другому.

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
r = #.input("Введите римское число:")
 
n = [1,5,10,50,100,500,1000]
a,m = 0
> i, #.size(r)..1, -1
  v,c = n[#.pos("IVXLCDM",#.mid(#.upper(r),i))]
  ? v<m, v = -v
  ? c>m, m = c
  a += v
<
 
#.output("Арабское число: ",a)
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
09.08.2017, 04:31  [ТС]
Пример работы SPL со сложными Unicode строками:
(первая строка кода отображается некорректно, поэтому ниже привожу ее еще раз отдельно)
t = ["J̲o̲s̲é̲","møøse","𝔘𝔫𝔦𝔠𝔬𝔡𝔢"]

Objective-C
1
2
3
4
5
6
7
8
9
10
t = ["J̲o̲s̲é̲","møøse","

		
		
		
		
		
		
		
		
		
		

		
			
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
13.08.2017, 16:09  [ТС]
Анимация полиспирали:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
width,height = #.scrsize()
#.angle(#.degrees)
#.scroff()
incr = 0
>
  incr = (incr+0.05)%360
  x = width/2
  y = height/2
  length = 5
  angle = incr
  #.scrclear()
  #.drawline(x,y,x,y)
  > i, 1..150
    x += length*#.cos(angle)
    y += length*#.sin(angle)
    #.drawcolor(#.hsv2rgb(angle,1,1):3)
    #.drawline(x,y)
    length += 3
    angle = (angle+incr)%360
  <
  #.scr()
<
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
14.08.2017, 14:55  [ТС]
Вращение графики:

Objective-C
1
2
3
4
5
> a, 1..12
  #.drawline(220,200,300,200)
  #.drawtext(310,185,"The text")
  #.drawrotate(200,200,#.pi/6)
<
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
16.08.2017, 17:03  [ТС]
Классическая задача - треугольник Флойда:

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
floyd(5)
floyd(14)
 
floyd(n)=
  k = 0
  > r, 1..n
    s = ""
    > j, 1..r
      k += 1
      f = ">"+#.upper(#.log10((n-1)*n/2+j+1)+1)+">"
      s += #.str(k,f)
    <
    #.output(s)
  <
.
Результат работы:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  1
  2  3
  4  5  6
  7  8  9 10
 11 12 13 14 15
  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
0
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
19.08.2017, 16:49  [ТС]
Анимация кривой дракона:
Objective-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
31
32
33
34
35
36
37
38
levels = 16
level = 0
step = 1
>
  draw(level)
  level += step
  ? level>levels
    step = -1
    level += step*2
  .
  ? level=0, step = 1
  #.delay(1)
<
 
draw(level)=
  mx,my = #.scrsize()
  fs = #.min(mx,my)/2
  r = fs/2^((level-1)/2)
  x = mx/2+fs*#.sqrt(2)/2
  y = my/2+fs/4
  a = #.pi/4*(level-2)
  #.scroff()
  #.scrclear()
  #.drawline(x,y,x,y)
  ss = 2^level-1
  > i, 0..ss
    ? #.and(#.and(i,-i)*2,i)
      a += #.pi/2
    !
      a -= #.pi/2
    .
    x += r*#.cos(a)
    y += r*#.sin(a)
    #.drawcolor(#.hsv2rgb(i/(ss+1)*360,1,1):3)
    #.drawline(x,y)
  <
  #.scr()
.


1
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
19.08.2017, 23:26  [ТС]
Пример создания массива массивов в SPL.
В данном примере сначала создаются массивы A, B и C.
Потом из этих массивов создается массив X и печатается его содержимое.

Objective-C
1
2
3
4
5
6
7
8
9
10
11
a = [10]
b = [2,"Текст"]
c = [8.5,"Строка",3]
 
x = [a,b,c]
 
> i, 1..#.size(x,1)
  > j, 1..#.size(x[i],1)
    #.output("x[",i,"]","[",j,"]=", x[i][j])
  <
<
Содержимое консоли:

Objective-C
1
2
3
4
5
6
x[1][1]=10
x[2][1]=2
x[2][2]=Текст
x[3][1]=8.5
x[3][2]=Строка
x[3][3]=3
1
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
10.09.2017, 02:29  [ТС]
Пример универсальности переменных в SPL:

Objective-C
1
2
3
4
n = 1/3
#.output("n=",n)
n = 2^1000
#.output("n=",n)
Результат:

Objective-C
1
2
n=0.333333333333333
n=10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
1
 Аватар для Mr_K
11 / 11 / 0
Регистрация: 19.03.2016
Сообщений: 64
13.09.2017, 01:30  [ТС]
Папоротник Барнсли:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
w,h = #.scrsize()
x,y = 0
>
  r = #.rnd(100)
  ? r<85, x,y = f2(x,y)
  ? r!<85 & r<92, x,y = f3(x,y)
  ? r!<92 & r<99, x,y = f4(x,y)
  ? r!<99, x,y = f1(y)
  #.drawpoint(x/10*w+w/2,h-y/10*h,0,0.5,0,0.1)
<
f1(y) <= 0, 0.16*y
f2(x,y) <= 0.85*x+0.04*y, -0.04*x+0.85*y+1.6
f3(x,y) <= 0.2*x-0.26*y, 0.23*x+0.22*y+1.6
f4(x,y) <= -0.15*x+0.28*y, 0.26*x+0.24*y+0.44
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.09.2017, 01:30

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru