Форум программистов, компьютерный форум, киберфорум
Наши страницы

Другие языки программирования

Войти
Регистрация
Восстановить пароль
 
 
budden
139 / 97 / 3
Регистрация: 16.08.2015
Сообщений: 179
#1

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

24.01.2016, 21:58. Просмотров 3132. Ответов 147
Метки нет (Все метки)

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

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

Сайт

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

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

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

модули

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

Которые я всё время переписываю и вроде бы они наконец стали на что-то похожи. Или я просто ещё не заметил какие-то очередные проблемы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2016, 21:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Язык программирования Яр (Программирование):

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

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

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

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

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

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

147
budden
139 / 97 / 3
Регистрация: 16.08.2015
Сообщений: 179
12.08.2016, 20:55  [ТС] #2
Эту новость уже давно пора обновить.
Язык получил название "Яр", исходные тексты полностью открыты и распространяются под пермиссивной лицензией (грубо говоря, можно делать с ними что хочешь), сайт теперь находится тут, есть возможность установить под Windows и Linux. За последнее время темпы работы над проектом сильно снизились, но работа продолжается. Сейчас в основном занимаемся раскраской исходного текста в редакторе. Сразу вслед за этим начнём переделывать лексер и парсер на новый синтаксис.
0
budden
139 / 97 / 3
Регистрация: 16.08.2015
Сообщений: 179
26.10.2016, 20:32  [ТС] #3
Раскраску сделали, а вот создание нового синтаксиса ужасно затягивается... Вот пример из 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
korvin_
1974 / 1459 / 228
Регистрация: 28.04.2012
Сообщений: 5,226
26.10.2016, 21:39 #4
budden, ты в этих кнм-кнд-кне-кнц-кнф не путаешься?
1
budden
139 / 97 / 3
Регистрация: 16.08.2015
Сообщений: 179
26.10.2016, 22:13  [ТС] #5
На данном этапе я путаюсь в каждом слове, иду править стандарт и потом всё переписываю. Но мне казалось, что как раз идея с кн<что-то> - кристально ясная.

Вот тот же код на лиспе:
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
budden
139 / 97 / 3
Регистрация: 16.08.2015
Сообщений: 179
28.10.2016, 17:07  [ТС] #6
"чо", правда, через "о" имеется в словаре "Даля" как региональное слово. Ничё - это разговорное слово, хотя ранее было региональным, судя по вот этой ссылке. Для такого часто употребимого понятия "ничего" слишком многословно, и пустот разных бывает много, может и "ничего" пригодится.

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

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

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

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

У цикла не понятно, где кончаются счётчики и начинается собственно тело цикла.
Это калька с iterate, только без скобок. Там тоже нет явной границы.
0
korvin_
1974 / 1459 / 228
Регистрация: 28.04.2012
Сообщений: 5,226
28.10.2016, 19:20 #7
Цитата Сообщение от budden Посмотреть сообщение
Это калька с iterate, только без скобок. Там тоже нет явной границы.
Ага, но это не оправдание.
0
budden
139 / 97 / 3
Регистрация: 16.08.2015
Сообщений: 179
28.10.2016, 22:05  [ТС] #8
Так её отсутствие - это фича:
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
magirus
Супер-модератор
Эксперт по компьютерным сетямЭксперт Windows
27150 / 15426 / 911
Регистрация: 15.09.2009
Сообщений: 67,190
Записей в блоге: 78
28.10.2016, 22:12 #9
а кому он нужен, твой язык? этим вопросом не задавался?
2
budden
139 / 97 / 3
Регистрация: 16.08.2015
Сообщений: 179
29.10.2016, 01:13  [ТС] #10
А ты сам как думаешь? Задавался или нет?
0
korvin_
1974 / 1459 / 228
Регистрация: 28.04.2012
Сообщений: 5,226
31.10.2016, 08:46 #11
Цитата Сообщение от budden Посмотреть сообщение
Хотя конечно можно спорить на тему нужности продвинутых циклов.
Да дело-то не в продвинутости, а в структурированности кода. Слабоструктурированный код, а ля loop или iter сложнее читать и анализировать, как какой-нибудь старый basic с повсеместным GOTO.

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

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

Если у тебя есть идеи, как сделать простой, но годный цикл - делись. Буду рад твоему участию в разработке спецификации языка.
0
korvin_
1974 / 1459 / 228
Регистрация: 28.04.2012
Сообщений: 5,226
02.11.2016, 08:24 #13
Цитата Сообщение от budden Посмотреть сообщение
Если у тебя есть идеи, как сделать простой, но годный цикл - делись. Буду рад твоему участию в разработке спецификации языка.
Простой и вполне годный

Единственное, что там не очень нравится --- наличие многочисленных for/fold for/list for/vector for/hash и т.д. для свёртки вместо какого-то одного обобщённого и расширяемого механизма. Точнее, собственно вариант for/fold является общим случаем, но нет удобных агрегаторов to-list to-vector to-hash (и механизмов их создания) и т.д. по аналогии с конструкторами последовательностей in-list in-vector in-hash...
0
budden
139 / 97 / 3
Регистрация: 16.08.2015
Сообщений: 179
02.11.2016, 18:50  [ТС] #14
Не, это не на мой вкус. Как-то ни в простоту, ни в фичастость. Например, в CL я вот как могу:
Код
(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/project/cl-utilities/doc/collecting.html

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

Коллекторы и итераторы должны работать не только внутри цикла, но и отдельно, например, коллектор:
Код
со-сборщиком-в-список С //реализация в виде макроса
// или так, по С++-ному: пусть С = н.сборщик-в-список() 
С.Собрать(1)
С.Собрать(2)
печатать С.Список()
а вот применение в цикле:
Код
пусть С = сборщик-в-список
цикл 
  для И от 1 до 10
  С.Собрать(И)
кнц
Конечно, получается слегка многословно, зато ортогональность
Вот такую бы реализацию где-нибудь надыбать...
0
Black Fregat
1396 / 1027 / 231
Регистрация: 31.05.2009
Сообщений: 4,281
05.11.2016, 03:03 #15
Вставлю свои 5 копеек.. Бегло взглянул на пример, прежде всего как практик.
Мне время от времени приходится разрабатывать программы фактически на русском языке.
И люто, бешено бесит необходимость переключать регистр для ввода квадратных и фигурных скобок.
Фигурные скобки, я смотрю, вы заменили на диграммы, а вот квадратные остались, а их тоже нет в стандартной русской раскладке..
1
05.11.2016, 03:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2016, 03:03
Привет! Вот еще темы с ответами:

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

Язык программирования Kotlin - Программирование
Достаточно интересный новый (2011г.) язык Kotlin, предлагающийся компанией JetBrains (как? вы не слышали про JetBrains?:p:rtfm:) на замену...

Что это за язык программирования - Программирование
Привет всем! Подскажите на каком языке программирования написана следующая прога: %clear %clc load god1999.txt; =size(god1999); ...

Новый язык программирования SPL - Программирование
Всем привет! Я сейчас делаю новый язык программирования, называется SPL (Simple Programming Language). Это высокоуровневый...


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

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

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