LINUX.ORG.RU

кодица получила название «Яр», исходники опубликованы

 ,


3

1

В свое время вроде бы monk вызывался поучаствовать в запиле языка.

О боги, ниспошлите мне новый тег «яр», пожалуйста!

Сайт тоже слегка переехал. https://bitbucket.org/budden/yar

Но чтобы особо не расслабляться, есть вопрос. В лиспе есть префикс «def» и префикс «make-». Например, есть defpackage (объявить пакет) и make-package (создать пакет). Первый из них является декларацией, а второй - командой.

Яр является наследником лиспа, но мне не удалось нормально перевести приставку «def». Лучшее, на что меня хватило - это «объ_». Только что я понял, что функция будет писаться как «объ_функции» и это, конечно, ужас.

Что делать? Может быть, сделать по умолчанию язык декларативным, т.е., «библиотека», «класс» и «функция» на самом деле будет означать «объявить библиотеку», «объявить класс» и «объявить функцию», а приставку сделать для императивных конструкций? «создать_класс», «создать_пакет» и т.п. ?

Жду мнения полиголтов.

★★★★★

Последнее исправление: den73 (всего исправлений: 1)

Это от безделья.

tommy ★★★★★
()
Ответ на: комментарий от den73

пусть_функция? Несерьёзно как-то. К тому же в математике «пусть» подразумевает ограниченную во времени область видимости, а декларации defpackage и defun глобальны.

пусть Борщ это пакет

пусть Факториал это функция(х) = ...
  где х это Целое
korvin_ ★★★★★
()
Ответ на: комментарий от anTaRes
переменная годы время
дать время = джва
ждать(время)
redgremlin ★★★★★
()
Ответ на: комментарий от korvin_

Не, «собрать» — это «build», а «make» — это, скорее, «создать».

to build - строить to make - делать to create - создать to assemble - собрать

anonymous
()
Ответ на: комментарий от kep

Кодица - это Украинская фамилия, с которой язык никак не связан. Хотя внутренне мне больше подходит кодица. Но для молодого организма в условиях жёсткой конкуренции ярое название просто необходимо.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

Кодица - это Украинская фамилия

Украинской, эта фамилия была бы в случае «кодиця» (рус. кодыця), а так это просто аллюзия на тему «глаголица/кириллица», это первое, что приходит на ум.

kep
()

У тебя по ссылке написано:

Данная версия работает только под Windows.

Это такая злая ирония?

Вместо объ можно писать опр_, например. «Объ» вообще не понятно как читать.

hotpil ★★★★
()
Ответ на: комментарий от kep

Возможно, Молдавская, и Кодицэ, а не кодица. Не суть. Яр принят по ряду причин, менять не буду.

den73 ★★★★★
() автор топика
Ответ на: комментарий от int13h

блядѣ.

это какой-то хитрый вариант звательного падежа?

lazyklimm ★★★★★
()
Ответ на: комментарий от korvin_

создавай@чисти

создавай@собирай

создавай@устанавливай

lazyklimm ★★★★★
()

Короче говоря, язык становится декларативным.

Не будет «объ_функция» или «объ_библиотека», а будет «функция»(или сокращение) и «библиотека», что будет подразумевать «объявление библиотеки».

Это некая потеря, поскольку в Емаксе есть магия, связанная с поиском префикса def в toplevel формах. На этой же основе сейчас в clcon реализован быстрогрязный вывод списка определений файлов. Эту магию придётся усложнить. Ну и пофиг.

Код у меня делится на два вида с разными расширениями файлов - обычный и скриптовый. В обычном коде подразумеваются, в основном декларации, в скриптовом - в основном, команды. Придётся, видимо, ввести в обычном коде какую-то конструкцию для toplevel команд.

Благодарность antares0 и znenyegvkby за раскрытие значения слова Яр.

Ставлю галочку.

den73 ★★★★★
() автор топика

Кодица - хорошее название, не надо менять.

У вас есть проект-побратим: Даниллица, от местного полиглота.

pacify ★★★★★
()

Пример кода на ночь, чтоб лучше спалось. Это я слёту пытаюсь перевести кусок транслятора Яра на Яр.

фун рОбъ_классаПолеАтрибутыИКонец (тОбъ_классаПоле - Объ_классаПоле)
  // в лиспе это было 
  // (defmacro with-must ((format &rest args) &body body)
  С_Обяз(
    "Ошибка при разборе доп. атрибутов поля %C" 
    // опираемся на круглые скобки для продолжения списка аргументов
    ,тОбъ_классаПоле.Имя.Текст)
  // это when, а как лучше перевести? Только не "когда", это маразм
  если_только хватьЕслиКл(символ(","),тОбъ_классаПоле.Зпт) то
    цикл_навсегда/*разбор_списка_атр*/ // loop
      пусть Атрибут - Объ_классаПолеАтрибут = рОбъ_клссаПолеАтрибут(тОбъ_классаПоле)
      Обяз ( //сейчас будет немеряно длинное булево выражение
        хватьЕслиКл(символ(","),Атрибут.Конец)
        или
        (хватьЕслиКл(символ(";"),тОбъ_классаПоле.Конец)
         и
         состопп //progn
           _з конс:робратить тОбъ_классаПоле.ДрАтрибуты
           вернуть_из рОбъ_классаПолеАтрибутыИКонец да
         кн)
      )
    кн/*разбор_списка_атр*/   
  кн //если_только
рОбъ_классаПолеАтрибутыИКонец/
// я вчера писал о двух закрывающих слешах, но можно и один разрешить

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)

то же без комментариев:

фун рОбъ_классаПолеАтрибутыИКонец (тОбъ_классаПоле - Объ_классаПоле)
  С_Обяз(
    "Ошибка при разборе доп. атрибутов поля %C" 
    ,тОбъ_классаПоле.Имя.Текст)
  если_только хватьЕслиКл(символ(","),тОбъ_классаПоле.Зпт) то
    цикл_навсегда
      пусть Атрибут - Объ_классаПолеАтрибут = рОбъ_клссаПолеАтриу тОбъ_классаПоле
      Обяз ( 
        хватьЕслиКл(символ(","),Атрибут.Конец)
        или
        (хватьЕслиКл(символ(";"),тОбъ_классаПоле.Конец)
         и
         состопп 
           _з конс:робратить тОбъ_классаПоле.ДрАтрибуты
           вернуть_из рОбъ_классаПолеАтрибутыИКонец да
         кн)
      )
    кн
  кн 
кн

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

то же с умеренным синт. сахаром для «символ»

фун рОбъ_классаПолеАтрибутыИКонец (тОбъ_классаПоле - Объ_классаПоле) - да_нет
  С_Обяз(
    "Ошибка при разборе доп. атрибутов поля %C" 
    ,тОбъ_классаПоле.Имя.Текст)
  если_только хватьЕслиКл(с{,},тОбъ_классаПоле.Зпт) то
    цикл_навсегда
      пусть Атрибут - Объ_классаПолеАтрибут = рОбъ_клссаПолеАтриубут(тОбъ_классаПоле)
      Обяз ( 
        хватьЕслиКл(с{,},Атрибут.Конец)
        или
        (хватьЕслиКл(с{;},тОбъ_классаПоле.Конец)
         и
         состопп 
           _з конс:робратить тОбъ_классаПоле.ДрАтрибуты
           вернуть_из рОбъ_классаПолеАтрибутыИКонец да
         кн)
      )
    кн
  кн 
кн

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)

а вот как оно выглядит сейчас на лиспе. Только это мой собственный лисп, с еретической таблицей чтения. Он грубо попирает всё святое.

(defun рОбъ_классаПолеАтрибутыИКонец (тОбъ_классаПоле)
 (with-must ("Ошибка при разборе дополнительных атрибутов поля ~S" тОбъ_классаПоле^Имя^TEXT)
   (when (catchIfCl '|,| тОбъ_классаПоле^Зпт)
     (loop 
       (:lett Атрибут Объ_классаПолеАтрибут (рОбъ_классаПолеАтрибут тОбъ_классаПоле))
       (must 
        (or
         (catchIfCl '|,| Атрибут^Конец)
         (and 
          (catchIfCl '|;|
                     тОбъ_классаПоле^Конец)
          (progn
            (_f nreverse тОбъ_классаПоле^ДрАтрибуты)
            (return-from рОбъ_классаПолеАтрибутыИКонец t)
            ) ; progn
          ) ;and
         ) ;or
        ) ;must
       ) ;loop
     ) ;when
  )
)

den73 ★★★★★
() автор топика

И, кстати, ждем ИзбуКодицу как аналог импортного GitLab! :)

Deleted
()
Ответ на: комментарий от Deleted

Неа, не придумал. Я ещё и синтаксис до конца не придумал. Но будет довольно жёстко со стилем, примерно как в golang, по причине использования переносов строки в качестве разделителя.

В этом куске кода есть проблема. Оказывается, приоритеты операций - это не всегда хорошо. Код на лиспе, где идут вложенные and и or, читается сверху вниз. А код на Яре, где скобки могут быть убраны из-за приоритета «и» над «или», уже не будет читаться. Я-то скобки поставил, но не каждый это сделает. Вот вам первое правило: делайте, чтобы код читался слева направо, сверху вниз. Не злоупотребляйте правилами приоритетов.

den73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.