Представлен минималистичный язык для рисования состоящий всего из 5 команд

Разработчик Сюсэм Пал (Susam Pal) представил CFR[] - минималистичный язык для рисования, состоящий всего из 5 команд:

Демо https://susam.net/cfr.html#0
Демо https://susam.net/cfr.html#0

CFR[] вдохновлён образовательным языком программирования Logo и эзотерическим языком программирования P′′. Вдохновлённый Logo, CFR[] имеет виртуальное перо, которое передвигается по графическому холсту и оставляет след. P′′ же вдохновил на весьма ограниченный набор команд. CFR[] намеренно создан так, чтобы на нём было трудно писать и читать.

Попробовать порисовать можно по ссылке https://susam.net/cfr.html.

Исходный код открыт и доступен на GitHub - https://github.com/susam/cfr.

@ris58h
22.10.2023 12:47 UTC
Первоисточник

Комментарии

@0xC0CAC01A
22.10.2023 09:26 UTC
+16

Замечательная новость, достойная современного Хабра!

@YMA
22.10.2023 09:32 UTC
+5

/пишу, в чем не согласен/ Эзотерика в программировании - это интересно, и чем упоротее, тем лучше. Мозги надо периодически взбивать, как подушку ;)

не гадю ;)

В связи с чем-то плюсик стоит, не помню уже...

22.10.2023 09:35 UTC
+12

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

22.10.2023 13:23 UTC
+9

эзотерика - это классно, но когда она не столь примитивная

Красота в глазах смотрящего, как и крутость. Мне идея понравилась.

Offtopic:

На HN в комментариях люди делятся тем, что получилось нарисовать. На Хабре - пишут КГ/АМ. Интересное отличие в менталитете.

@ris58h
22.10.2023 09:34 UTC
+1

Жаль, что вы не потрудились раскрыть свою мысль.

22.10.2023 09:46 UTC
+10

Эзотерика интересна когда она раскрыта. Пример расписан и объяснён. В чем фишка показаны.

А не просто "вот еще один недоязык по фану".

22.10.2023 10:59 UTC
-3

Пожалуйста, привидите пример раскрытия в этом конкретном случае.

Набор команд и принцип работы обозначены. Пример работы приведён. Это - новость, а не статья-разбор.

22.10.2023 11:18 UTC
+17

Что такое "блок"? Почему n вложенных друг в друга блоков дают прямоугольник именно таких размеров?

Как именно работает смена цвета?

Хочется раскрытия этих тем прямо в статье, иначе статья преаращается в одну ссылку на документацию.

22.10.2023 13:13 UTC
+2

Хочется раскрытия этих тем прямо в статье

Так это не статья, а новость. Обозначены основные моменты.

@Vindicar
22.10.2023 09:52 UTC
+5

Ну т.е. параметризации вообще никакой? Чтобы нарисовать (аппроксимировать) две окружности разного размера, нужн описать две разные программы? Как-то грустно.

@ris58h
22.10.2023 11:06 UTC
-4

Вы правы. Язык минималистичный (читай ограниченный). Интересно, как бы вы добавили параметризацию?

22.10.2023 11:16 UTC
+1

Ну два параметра у нас всё же есть - масштаб одного шага вперёд и начальная ориентация пера. Но сейчас они привязаны ко всей программе, а точнее - к интепретатору языка.
Если бы можно было выполнить часть программы, задавая по разному эти два значения, было интересно. И если с начальным углов поворота проблем нет, так как можно просто вставить нужные инструкции поворота перед "вызовом подпрограммы", то с масштабом ничего не поделать.

@PuerteMuerte
22.10.2023 11:46 UTC
+8

Что-то до боли знакомое, хотя и чутка упрощённое

https://en.wikipedia.org/wiki/Turtle_graphics

@ris58h
22.10.2023 13:15 UTC
+1

Так автор и говорит о том, что вдохновлялся языком Logo.

@aol-nnov
22.10.2023 15:10 UTC
0

Точно-точно! Всё это уж было в симпсонах~ черепашке из комплекта учебных миров (кумир )))

@Vcoderlab
22.10.2023 12:27 UTC
+4

MoveTo(x, y)
LineTo(x, y, color)

Две команды.

@sena
22.10.2023 12:38 UTC
+16

Pixel(x,y,color)

всего одна

22.10.2023 12:53 UTC
+4

Слишком много параметров.

^  // инкрементируем цветовой код текущей ячейки сетки
+  // инкрементируем позицию текущей ячейки сетки
// rgb компоненты пикселя представлены тремя последовательными ячейками в сетке

22.10.2023 12:59 UTC
0

Тут проблема с длиной строки, если сетка неизвестного размера по горизонтали, то картинка не воспроизведётся. Нужна третья команда. Либо перевод строки, либо задать длину строки либо что-то ещё...

22.10.2023 13:10 UTC
0

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

22.10.2023 13:17 UTC
+3

Фиксированная сетка это плохо. Секция заголовка решает проблему, но это уже не так изящно, к сожалению. Проще тогда задать длину строки и всё

Я предлагаю такое решение - инкрементация позиции в сетке происходит по спирали. Тогда размер сетки не важен.

6789

501

432

либо уголком

0136

247

58

9

22.10.2023 14:18 UTC
+3

Спиральная схема самая классная.Так рисунок в любой момент близок к квадратному, и сам способ веет эзотеричностью.

22.10.2023 13:51 UTC
+1

Если есть два смежных края, то можно идти по диагоналям на бесконечной сетке:

(0, 0)

(0, 1), (1, 0)

(0, 2), (1, 1), (2, 0)

и так далее.

22.10.2023 14:02 UTC
0

Да, я там выше предложил, по спирали и уголком...

22.10.2023 13:13 UTC
+1

RunJSCode(code).

1 команда, 1 параметр + сделать можно много чего.

22.10.2023 13:24 UTC
0

RunJSCode

eval же.

@dr_mouse
22.10.2023 15:31 UTC
0

Напоминает «черепашку» для 6-7 классов :) поднять перо/опустить перо :) там тоже сокращения и ограничения

@ris58h
22.10.2023 15:36 UTC
+1

Язык Logo, которым вдохнавлялся автор - это оно и есть.

@lorc
22.10.2023 21:53 UTC
+5

Так он даже не Тьюринг-полный. В отличии от P'', кстати. Язык, в котором нет условного выполнения кода - это и не язык программирования, в принципе.

С таким подходом, языком можно назвать и RLE, например. Или даже BMP - там вообще одна "команда" - "задать цвет пикселя в текущей точке и передвинуть виртуальный курсор на следующую".

@ris58h
23.10.2023 07:21 UTC
0

Ваше утверждение верно, но CFR[] назван не языком программирования, а языком для рисования.

@HuRN
23.10.2023 07:18 UTC
0

Э. Они изобрели brainfuck? Который в силу тьюринг-полноты может всё, но реально используют его (в силу сложности, поскольку ассемблер по сравнению с ним - просто Copilot) именно для такого вот рисования.

@bolk
03.11.2023 14:14 UTC
0

Нет. BF выводит символы, этот язык — точки разных цветов. Конечно, либо ячейки BF, либо его символы можно интерпретировать как точки, но никто этого не делают, никто не использует его для такого вот рисования.

@iamkisly
23.10.2023 08:40 UTC
-4

Мои руководители могут уложиться в одну команду сделать заебись

@orefkov
25.10.2023 05:43 UTC
0

Эх, помню на Yamaha MSX в Бейсике команда DRAW была, примерно с таким же синтаксисом. Конец 80ых прошлого века.

@bolk
03.11.2023 13:48 UTC
0

RR[FCCF[CCC]]FFCCF[CCC][FCCFF[CCC]]FF[FRR]CCF[CCC][FCCFF[CCC]]FCCFF[CCC][FCCF[CCC]][F[RRR]][FFCCF[CCC]][FCCFF[CCC]]FCCF[CCC][FRR]CCF[CCC][FCCFF[CCC]]FCCFF[CCC][FCCF[CCC]][F[RRR]]CCF[CCC]FCCF[[CCC]FFCCF][CCC]FFCCF[CCC]FFF