Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/180: Рейтинг темы: голосов - 180, средняя оценка - 4.64
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209

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

24.01.2016, 21:58. Показов 39335. Ответов 488
Метки нет (Все метки)

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

Основные достоинства:
- можно переопределять функции и классы на ходу
- при этом компиляция в нативный код (не байт-код, не JIT)
- удобный синтаксис
- совместно разрабатывается язык, IDE, система сборки и инструменты для рефакторинга

Сайт

Загрузка транслятора (Windows) с частью исходных текстов. Полные исходные тексты пока не открываю - рано ещё. Также потребуется загрузить среду разработки (инструкции на сайте).

Пример программы (работающий)

Хочу получить от вас обратную связь вот по этим трём документам:
библиотеки

модули

пространства-имён

Которые я всё время переписываю и вроде бы они наконец стали на что-то похожи. Или я просто ещё не заметил какие-то очередные проблемы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.01.2016, 21:58
Ответы с готовыми решениями:

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

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

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

488
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
12.08.2016, 20:55  [ТС]
Эту новость уже давно пора обновить.
Язык получил название "Яр", исходные тексты полностью открыты и распространяются под пермиссивной лицензией (грубо говоря, можно делать с ними что хочешь), сайт теперь находится тут, есть возможность установить под Windows и Linux. За последнее время темпы работы над проектом сильно снизились, но работа продолжается. Сейчас в основном занимаемся раскраской исходного текста в редакторе. Сразу вслед за этим начнём переделывать лексер и парсер на новый синтаксис.
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
26.10.2016, 20:32  [ТС]
Раскраску сделали, а вот создание нового синтаксиса ужасно затягивается... Вот пример из Rosetta Code. Возможно, в реальности будет выкинута половина "фич".
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
о.функ Спираль (Строк,Колонок)
  -- массив (Строк,Колонок) кнм
док "переведено с http://rosettacode.org/wiki/Spiral_matrix#Common_Lisp"
тело
  цикл
    для пСпираль -- 
       массив (Строк,Колонок) кнм
      сначала 
       н.массив н.список(Строк,Колонок) начальный-элемент ничё кнм
    кнд
    для DX -- целое сначала 0 
    для DY -- целое сначала 0 
    для X сначала 0 // надоело типы писать, можно и не писать. Тогда динамическая типизация
    для Y сначала 0 кн. для I сначала 0 затем (: I + 1 :) //кн. - имитация конца строки
    если (: I == N :) то
      э.функ.вернуть пСпираль
    кне 
    записать пСпираль[ X Y ] = I
    пусть NX = X + DX кн. пусть NY = Y + DY 
    /// Условие в 'если' должно помещаться на одной строке
    если 
    |   (: -1 < NX и NX < Колонок :) /* эти скобки - скорее для читателя */
    | и (: -1 < NY и NX < Строк :) и пСпираль[ NY NX ] == ничё
    |то
      записать X = NX кн. записать Y = NY 
    иначе 
      вызвать-макрос-лиспа lisp;cl:psetf DX (: 0 - DY :) DY DX кнв
      записать X = X + DX кн. записать Y = Y + DY
    кне
  кнц
кнф
Добавлено через 4 минуты
Просьба к власть имущим: переименуйте, пожалуйста, тему в 'Язык программирования "Яр"'
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
26.10.2016, 21:39
budden, ты в этих кнм-кнд-кне-кнц-кнф не путаешься?
1
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
26.10.2016, 22:13  [ТС]
На данном этапе я путаюсь в каждом слове, иду править стандарт и потом всё переписываю. Но мне казалось, что как раз идея с кн<что-то> - кристально ясная.

Вот тот же код на лиспе:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun spiral (rows columns)
  (do ((N (* rows columns))
       (spiral (make-array (list rows columns) :initial-element nil))
       (dx 1) (dy 0) (x 0) (y 0)
       (i 0 (1+ i)))
      ((= i N) spiral)
    (setf (aref spiral y x) i)
    (let ((nx (+ x dx)) (ny (+ y dy)))
      (cond
       ((and (< -1 nx columns)
             (< -1 ny rows)
             (null (aref spiral ny nx)))
        (setf x nx
              y ny))
       (t (psetf dx (- dy)
                 dy dx)
          (setf x (+ x dx)
                y (+ y dy)))))))
Добавлено через 3 минуты
Попробуй сказать без IDE, чему соответствует каждая из 7 закрывающих скобок в конце. А у меня кн"е" - соответствует концу "если", кнф - концу "функции" и так далее, по первой букве открывающей конструкции. Кто молодец? - Я молодец! (С)

Единственная путаница может возникнуть с о.функ, потому что можно подумать, что должно быть кно. Но в этом случае о (определить) - это ...мммм... менее информативное слово, чем ф (функция). Хотя... ещё не поздно и это поменять.
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
28.10.2016, 17:07  [ТС]
"чо", правда, через "о" имеется в словаре "Даля" как региональное слово. Ничё - это разговорное слово, хотя ранее было региональным, судя по вот этой ссылке. Для такого часто употребимого понятия "ничего" слишком многословно, и пустот разных бывает много, может и "ничего" пригодится.

А где кнт --- конец тела?
Исключение из правил. Я бы и само "тело" убрал, но не смог придумать, как.

Сообщение от budden
о (определить)
Я думал о --- объект, например.
Табличка однобуквенных сокращений - здесь:
https://bbcdn.githack.com/budd... а.html#a22

Неизбежно много слов начинаются с одних и тех же букв. Но сокращать понятия как-то надо. Пользователи Си привыкают, что & - это ссылка, а * - это указатель, хотя это вообще ни с чем не ассоциируется. Значков слишком мало, поэтому я задействовал буквы.

"если" однозначно, поэтому "к.если" не имеет никакого смысла, потому что если однозначно.
А функция - понятие многозначеное. Это может быть определение функции, объявление функционального типа, обращение к указателю на функцию.

У цикла не понятно, где кончаются счётчики и начинается собственно тело цикла.
Это калька с iterate, только без скобок. Там тоже нет явной границы.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
28.10.2016, 19:20
Цитата Сообщение от budden Посмотреть сообщение
Это калька с iterate, только без скобок. Там тоже нет явной границы.
Ага, но это не оправдание.
1
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
28.10.2016, 22:05  [ТС]
Так её отсутствие - это фича:
Lisp
1
2
3
4
5
6
(iter
  (for i from 1 to 10)
  (print i)
  (for j = i) 
  (collect (+ j i))
  (while (< j 3)))
Можно инициализировать переменную не только в начале. А особенно удобно разместить while не в начале.
Хотя конечно можно спорить на тему нужности продвинутых циклов. Без них всё то же самое вполне можно написать.
И возможно, они в итоге не останутся.
0
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
 Аватар для magirus
28049 / 15785 / 983
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
28.10.2016, 22:12
а кому он нужен, твой язык? этим вопросом не задавался?
3
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
29.10.2016, 01:13  [ТС]
А ты сам как думаешь? Задавался или нет?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
31.10.2016, 08:46
Цитата Сообщение от budden Посмотреть сообщение
Хотя конечно можно спорить на тему нужности продвинутых циклов.
Да дело-то не в продвинутости, а в структурированности кода. Слабоструктурированный код, а ля loop или iter сложнее читать и анализировать, как какой-нибудь старый basic с повсеместным GOTO.

Вот в твоём примере j будет итерироваться параллельно с i или как во вложенном цикле (т.е. на каждую итерацию i)?
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
31.10.2016, 22:57  [ТС]
Параллельно, к этому легко привыкнуть. Вложенный цикл порождается только новым словом "цикл" (iter). Другое дело, нужно ли это на самом деле в Яре, тем более, в первой версии. Изначальная идея Яра - взять лисп, сделать синтаксис типа Бейсика с типизацией, убрать лишние вложенности. Область видимости переменной из let - от места определения вниз до конца блока, в который она вложена - это прекрасно работает и код становится приятнее (мне), хотя нормальный лиспер не одобрит это. Но почему-то оказывается очень сложно реализовать этот простой набор требований, чтобы сошлись все концы с концами.

Моё личное впечатление от iterate - несколько переусложнено, но в целом близко к оптимуму. Я бы выкинул initially и finally. loop - это просто плохой дизайн от blub-программистов, которые не поняли фишку лиспа.

Если у тебя есть идеи, как сделать простой, но годный цикл - делись. Буду рад твоему участию в разработке спецификации языка.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
02.11.2016, 08:24
Цитата Сообщение от budden Посмотреть сообщение
Если у тебя есть идеи, как сделать простой, но годный цикл - делись. Буду рад твоему участию в разработке спецификации языка.
Простой и вполне годный

Единственное, что там не очень нравится --- наличие многочисленных for/fold for/list for/vector for/hash и т.д. для свёртки вместо какого-то одного обобщённого и расширяемого механизма. Точнее, собственно вариант for/fold является общим случаем, но нет удобных агрегаторов to-list to-vector to-hash (и механизмов их создания) и т.д. по аналогии с конструкторами последовательностей in-list in-vector in-hash...
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
02.11.2016, 18:50  [ТС]
Не, это не на мой вкус. Как-то ни в простоту, ни в фичастость. Например, в CL я вот как могу:
Code
1
2
3
4
(loop :for i from 1 to 10
              :when (oddp i) :collect i into a
              :when (evenp i) :collect i into b
              :finally (return (list a b)))
Собираю сразу в два списка, причём не обязательно порождать значение на каждой итерации. Всеразличные фильтры очень удобно так писать. В racket тоже есть #:when, но он более ограничен - почему-то я могу писать его только в начале тела. И собрать два значения за одну итерацию я тоже не могу.

Я правильно понял, что #:when создаёт неявный вложенный цикл? Это мне совсем не нравится. Кроме того, сама идея того, что #:when дублирует обычный when, добавляет сложности в язык. В iterate используется вместо этого обычный #:when. Просто - это в Си, где три совершенно тривиальных оператора цикла.

Простой реализацию из racket сложно назвать. 20 моих экранов, при этом несколько классов циклов. Простая реализация - это в Си, там всего лишь три конструкции, не считая goto.

Моя точка зрения на простоту такова: должны быть определяемы отдельные "коллекторы", как вот это
https://common-lisp.net/projec... cting.html

Также должны определяться итераторы, например, "идти по списку".

Коллекторы и итераторы должны работать не только внутри цикла, но и отдельно, например, коллектор:
Code
1
2
3
4
5
со-сборщиком-в-список С //реализация в виде макроса
// или так, по С++-ному: пусть С = н.сборщик-в-список() 
С.Собрать(1)
С.Собрать(2)
печатать С.Список()
а вот применение в цикле:
Code
1
2
3
4
5
пусть С = сборщик-в-список
цикл 
  для И от 1 до 10
  С.Собрать(И)
кнц
Конечно, получается слегка многословно, зато ортогональность
Вот такую бы реализацию где-нибудь надыбать...
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
05.11.2016, 03:03
Вставлю свои 5 копеек.. Бегло взглянул на пример, прежде всего как практик.
Мне время от времени приходится разрабатывать программы фактически на русском языке.
И люто, бешено бесит необходимость переключать регистр для ввода квадратных и фигурных скобок.
Фигурные скобки, я смотрю, вы заменили на диграммы, а вот квадратные остались, а их тоже нет в стандартной русской раскладке..
2
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
 Аватар для magirus
28049 / 15785 / 983
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
05.11.2016, 04:22
Цитата Сообщение от budden Посмотреть сообщение
Задавался или нет?
видимо нет.
зачем нужен язык без среды разработки, средств компиляции и прочего?
просто чтоб был?
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
05.11.2016, 15:49  [ТС]
Цитата Сообщение от Black Fregat Посмотреть сообщение
И люто, бешено бесит необходимость переключать регистр для ввода квадратных и фигурных скобок.
Фигурные скобки, я смотрю, вы заменили на диграммы, а вот квадратные остались, а их тоже нет в стандартной русской раскладке..
Со скобками в Русской раскладке совсем туго. Поскольку текст в основном читается, а не пишется, пришлось пожертвовать удобством ради читаемости. Я пользуюсь раскладкой Чистова, и вам рекомендую. Там значки вводятся с правым альтом. Есть и другие раскладки с поддержкой квадратных скобок, даже для Linux. Есть традиции, которым очень тяжело бросить вызов. Например, индексацию массивов без квадратных скобок как сделать?

Добавлено через 5 минут
Среда разработки есть (показана лишь малая часть возможностей).
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
07.11.2016, 09:03
Цитата Сообщение от budden Посмотреть сообщение
Например, индексацию массивов без квадратных скобок как сделать?
Code
1
массив.индекс
например.
1
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
07.11.2016, 11:18  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
Сообщение от budden
Например, индексацию массивов без квадратных скобок как сделать?
Код
массив.индекс
Можно, но это нетрадиционно и будут свои проблемы. Например, будет проблема написать "массив.длина". Если индекс является результатом вызова функции, то придётся писать массив.(вызов()).
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
27.07.2017, 14:42  [ТС]
Ну, проект движется вперёд, хотя гораздо медленнее. Работающий на сегодня пример выглядит вот как:
1C
1
2
3
4
5
опр функ Ж1(А -- целое,ключи,Б = 1) тело
  А - Б
кно
 
л-печать(Ж1(3,Б = 2))
Здесь в синтаксисе функции использованы именованные аргументы, которые называются ключами по традиции лиспа. Начинаю думать о стандартной библиотеке. Поскольку язык русскоязычный, кажется естественным задействовать для строк соглашения из 1С.

Конкатенация строк будет не плюсом, а другим значком.

В связи с этим вопросы:

Хорошо ли работать со строками в 1С?
Если нет, в каком языке лучше всего?
Кто-нибудь в курсе о возможных проблемах с использованием API? Не нарушает ли это права 1С?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.07.2017, 14:42
Помогаю со студенческими работами здесь

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

Язык программирования GRASS
У кого-нибуть есть информация по этому языку программирования? Поисковые системы выдают информацию что что это какой-то бейсико-подобный...

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

Язык программирования simit
Стоит ли начинать учить не так давно разработанный язык simit? Есть ли для него уже среды программирования и какие-нибудь учебные...

Определить язык программирования
:umnik: #!/usr/bin/env python # -*- coding: utf-8 -*- def Cord ( char ) : num = ord(char) if num &lt; 32 : ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru