LINUX.ORG.RU

Qod. Опубликовал исходники компилятора, над которым работаю

 , qod, ,


4

5

Финально определился с названием языка, подчистил разные хвосты и написал README. Теперь наконец-то можно посмотреть на нечто большее, чем просто фрагменты кода в постах на форуме: https://github.com/wandrien/qod/

Драфты по дизайну языка пока еще не готовы. Если перед НГ завала работы не будет, то может выложу их в течение пары недель. Черновики пишу на русском, осилить всё чётко сформулировать на английском в разумные сроки я точно не смогу. На русском-то не всегда получается.

Надеюсь, что после публикации материалов по языку, мне щедро насыпят в панамку как конструктивной, так и не очень, критики.

А пока можно посмотреть на сам код вживую.

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

То, что её обычно реализуют через if — ничего хорошего в этом нет.

так классический if и есть операция с предикатом с необязательным else. это потом его расширили на форму if elsif elsif else… что есть просто синт. сахар к классической.

то есть в си, у которого классическая форма (см вики) if - как раз и реализует ваш when, как частный случай.

просто вандриен, будучи увлечен if elsif…end, изобрел when, как вариант классики, дабы иметь возможность краткой записи.

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

А операция умножения — частный случай операции сложения, которая, в свою очередь, частный случай операции succ. Так до мышей машины Тьюринга и дойдём.

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

Особенно на фоне намного более спорного select case case case вместо привычного if elif elif elif

я ж сию конструкцию уже упоминал стопицот раз примерно, и так не понял зачем она вообще, если есть if elif

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

в твоем брейнфаке «try catch» будет?

Знать базу надо. Любая тьюринг-полная система эквивалентна любой другой тьюринг-полной системе.

try catch

Синтаксический сахар же, ненужно.

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

Выполнение операции с предикатом — совершенно логичная, удобная и естественная операция, и вовсе не тождественна if. То, что её обычно реализуют через if — ничего хорошего в этом нет.

удобная и естественная. но еще удобней и естественней форма в которой и на невыполнение предиката есть вариант исполнения. то есть классический if.

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

Это Хохлов придумал. Я попробовал, понравилось.

Некросивое, несимметричное:

if foo() then
  x = 0;
elif bar() then
  x = y + 1;
elif baz() then
  x = y - 1;
end

Кросивое, симметричное:

select
case foo():
  x = 0;
case bar():
  x = y + 1;
case baz():
  x = y - 1;
end
wandrien ★★
() автор топика
Ответ на: комментарий от wandrien

просто убери then. это давно уж в пытоне сделали. и будет

if foo():  x = 0;
elif bar(): x = y + 1;
elif baz():  x = y - 1;
end

убери все эти do, of, then.. короче если блок можно открыть через : - то это и использовать

struct A :
  int _x;
end
alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 3)
Ответ на: комментарий от alysnix

но еще удобней и естественней форма в которой и на невыполнение предиката есть вариант исполнения. то есть классический if.

Нет. Удобнее как раз, когда при невыполнении предиката осуществляется переход к следующей операции.

Что же так от when корежит? Не пойму. Ну а хотя бы assert идиосинкразию не вызывает?

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

А при чем тут then, если речь про разницу if/elif. Ты совсем не схватываешь на лету.

Для локальности изменений в гит select лучше:

-if foo() then
+if foo2() then
+  stop();
+elif foo() then
   x = 0;
 elif bar() then

vs

 select
+case foo2():
+  stop();
 case foo():
   x = 0;
wandrien ★★
() автор топика
Ответ на: комментарий от wandrien

Для локальности изменений в гит select лучше:

причем тут гит? они идут пакетом у тебя???…

зы: слушь, гит без тебя разберется со своими локальностями, мамой клянусь.

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

Ты совсем не схватываешь на лету.

если честно я не настолько психиатр, чтобы усмотреть гит за твоим мегаязыком. так и надо было предупреждать, а то прям «как из душа окатило».

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

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

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

и это задача гита - компактифицировать данные или изобретать эффективные внутренние представления.

Ты опять не схватываешь.

Речь шла про:

  • Конфликты при слияниях.
  • Удобство чтения диффов.

Как там гит хранит данные, по барабану чуть больше, чем всем.

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

для себя часто использовал

Да, тоже так иногда пишу.

А если приходится генерировать ветки препроцессором на сях, то это вообще единственный вариант.

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

это ты не схватываешь - а если у тебя гит заберут, половина языка на вынос, в мусорном мешке?

ты реально считаешь, что язык должен быть заточен под левую тулзу, которая помрет в любой момент?

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

убери все эти do, of, then.. короче если блок можно открыть через : - то это и использовать

Точняк. Если можно писать в машкодах, то это и использовать.

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

ты реально считаешь, что язык должен быть заточен под левую тулзу, которая помрет в любой момент?

Концепция построчного сравнения изменений в текстовых файлах помрёт в любой момент. Ну буквально дышит на ладан.

Я дико веселюсь с этого обсуждения.

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

При чём отдельно еще забавно вот что.

Я мимоходом упомянул, что синтаксис select лучше подходит для локализации изменений в патчах. Собеседник на это пишет: «ты реально считаешь, что язык должен быть заточен под левую тулзу».

То есть отрыв от реального предмета разговора – очень велик. У собеседника какие-то свои мухи в голове летают, и он с ними ведёт диалог.

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

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

«зачем ты перенес строку! появились же две измененные строки! теперь невозможно сделать мердж! это невозможно уже читать! верни все на место!» - это у вас так в конторе работают? мама дорогая…

зы: полжизни мерджили и диффы смотрели вообще не обращая внимания на эту чепуху. а это оказывается настолько принципиально, что даже в язык должно быть введено.

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

Диалог какой-то такой:

- Зачем Б, если есть А.
- Б выглядит симметричнее, а еще имеет вот такое практическое преимущество.
- *возмущательные возгласы*

Реально, я вот чо-то перечитал ветку, и мне стало интересно.

На вопрос о том, чем хорош select, я ответил. Собеседник топит за elif. А аргументы какие-то были за elif? Получается, что ведь не было.

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

Я мимоходом упомянул, что синтаксис select лучше подходит для локализации изменений в патчах.

ты сначала доживи до патчей на своем языке. я вот гарантирую, что он так и не догнав паскаль, умрет свой смертью.

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

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

Я настаиваю, что чего? Ты снова не схватываешь, похоже.

«зачем ты перенес строку! появились же две измененные строки! теперь невозможно сделать мердж! это невозможно уже читать! верни все на место!» - это у вас так в конторе работают? мама дорогая…

Может, глицина?

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

лучше скажи, зачем тебе повышенная «локальность патчей». там кто-то тебя нелокально все время патчит, жить мешает?

может на государственном или мировом уровне встал вопрос о нелокальности патчей? откуда это все взялось хоть?

в чем причина затруднений и каков масштаб ущерба в долларах от «нелокальных патчей»?

я столько грибов не ем, чтобы врубиться.

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

А аргументы какие-то были за elif? Получается, что ведь не было.

аргументы простые - не множить сущности без необходимости, и если смысл одной конструкции в точности равен другой, то одна из них лишняя.

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

Gentlemen, your conversation makes interesting listening.

Ты так прикольно сливаешься каждый раз))

Какое-то перманентное полыхание, периодически выдаваемое за конструктивную критику с наилучшими пожеланиями.

И это человек, у которого «этих языков как мух» (или как там было).

То when не тот, то грамматики нет, то гит, то elif.

Странно это, и очень похоже на ревность и зависть к языку, который работает, в отличие от «мух».

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

То when не тот, то грамматики нет, то гит, то elif.

я ж сказал, что без грамматики и обсуждать нечего. откуда я знаю, есть у него elif или нет? по исходникам это смотреть что-ли? мне казалось, что что-то есть… он говорит - нет. ну нет и нет. зато есть мега select, тогда пусть или трусы оденет или крестик снимет. если есть select - зачем if.

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

Про то, что EBNF надо в первую очередь формализовать — это справедливо. Хотя бы в двух словах, пусть не EBNF — как минимум лексемы и ключевые слова перечислить — даже в исходниках лексера копаться удовольствие так себе, тем более, что он на несколько модулей разбит.

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

Прикольно (нет), что как только выкладываешь исходный код в открытый доступ, то сразу становишься что-то должен каким-то людям, которых знать не знаешь.

Это не так работает, ребята.

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

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

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

Уважение это характеристика, возникающая по факту отношения с чем-либо/кем-либо.

Публикация на исходников на гитхабе не формирует мои отношения с читателями кода. Поэтому выкладывать исходники «с уважением» или «без уважения» я не могу. Это не релевантно.

А вот если они захотят мне что-то написать. то инициатива исходит от них. Им и решать, с уважением они это делают или нет. В меру своей воспитанности.

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