LINUX.ORG.RU

Кисий язык

 


1

3

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

Доброе слово про раст

Кто не читал, лучше почитать по ссылке, там общая идея и идеология. Потому что «кисий язык» это не язык программирования. Ну просто названия другого не придумал, а звучит красиво.

Собственно, есть ряд орг.вопросов, которые возможно помогут решить силы добра на ЛОРе.

Отдельно обращусь к растаманам. я хоть и ругался с вами, но я ругался потому, что мне не нравится то КАК вы решаете проблему и ноете на С++, как будто он является воодушевленным существом типа люфицера. Это тупо, поэтому я вас ругал разными словами. Но само стремление решать проблему похвально. Мне ваше мнение, как ни странно, интересно. Возможно, в итоге вы возьмете мои наработки с сделаете Rust++ который реально убьёт С++.

1) в КЯ предусмотрены переменные как в верилоге:

int a = 5;
int b = 4;
always int c = a + b; //c = 5+4 = 9
a = 2; //c = 2+4 = 6

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

Однако, вопрос есть такой: мы можем добавить режим «функционального программирования»:

var foo = {
   код с returnами; в целом это как лямбда, только без аргументов
}
Годна ли идея? Погодите отвечать на этот вопрос, его надо понять в сумме и только если вы тред по ссылке выше читали.

2) 2 разных thisа. Есть this - это класс, к которому применен оператор прямо вот сейчас. а есть например that: это контекст. мы исходим из того, что описывать поведение сложных finite state machine будем в виде отдельных сценариев, которые потом машина сама соптимизирует. так вот каждый сценарий - он как класс. и в нем есть «параметры»:

int calculate(int a, int b) {
   parameter int k;
   return a*k+b;
}
....
case A {
   int k = 2;
   int x = calculcate(3,4);
}
...
case B {
   int k = 2;
   int lol = calculcate(6,8);
}
parameter присасываются к переменным в текущем контексте. Этакая лямбда-наоборот. Возможно я не прав, но вдруг это хорошая идея?

3) Улучшители конкструкций if-elif-else-for-while.

Исходный пример:

bool predicate = ....
while(predicate) {
   stmt1;

   stmt2;

   stmt3;

}
С использованием always можно сделать predicate автовычисляемым. Удобно чтоб не забыть где-то что-то. Но я предлагаю ширше использовать это слово:
bool predicate = ....
always while(predicate) {
   stmt1;
   ####if (!predicate) break;
   stmt2;
   ####if (!predicate) break;
   stmt3;
   ####if (!predicate) break;
}
код после #### - вставляется «автоматически», то есть его не надо писать. он как бы всегда есть.

Годна ли идея?

4) блоки кода можно не только «оборачивать» в {} как в С и С++, но и называть:

for(int x in (0,5)) {//не спрашивайте почему это похоже на питон
    step сделать_раз {
     ....
    }
    step сделать_два {
     ....
    }
    step сделать_три {
     ....
    }
}

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

Годно ли? Добавить ли что-то?

5) Finite-state machines и короутины. В принципе это одно и то же.

Тут на самом деле вопрос как записывать. Еще вмешивается нюанс реализации. Дело в том, что в итоге код будет генериться «жуткий»: в каждом потоке будет что-то типа futexа, маски прерываний, маски разрешения прерываний, и времени максимальной обработки. не спрашивайте зачем такое - когда пишешь гуй, который должен рендерить и паралелльно что-то считать сложное и исходник для сложного могут при этом редактировать - вот так и приходится. код IDE придется с C++ еще переписать потом на кисий язык.

Так вот, при чем тут корутины? А при том, что у вас будет 1 главный поток и N вспомогательных, и туда будут сигналиться все эвенты как прерывания. код будет исполняться «блоками», в конце каждого блока будет проверяться равенство маски «отсигналенных прерываний» маске «уже виденых». корутина в этот момент может unlikely(префикс 0x2E + jxx) уступить место другой или вообще умереть с исключением.

Вопрос, как это всё записывать? Пока идея такова:

case A(expression_which_can_be_cast_to_bool) {
   case A1(expression_which_can_be_cast_to_bool) {
   }
   case A2(expression_which_can_be_cast_to_bool) {
   }
   case LOLWAT(expression_which_can_be_cast_to_bool) {
   }
}
case B(expression_which_can_be_cast_to_bool) {
   ...
}
case C(expression_which_can_be_cast_to_bool) {
   ...
}
код вообще не знает когда его прервут, но он будет выполняться так, как будто его не прерывают. можно запретить «прерывания»(автоматически при вызове внешних функций). Собственно сюда и смотрят parameterы.

6) UB: UB разрешено, если оно не влияет на control flow. а именно: ряд операторов в выражениях могут быть неоптимизируемыми в определённых условиях.

int a = x < x+1; //UB
int a = x < x+1; //UB
if (a) ... //warning! 
if (x < x+1) ... //UB нет, "<" не оптимизируется

* * *

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

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

я посмотрел, и что имею сказать.

есть такое понятие как техническая эстетика.

в нашем конкретном случае - это возможность вводить данные наиболее удобным для программиста способом. в идеале - накладывать самые минимальные ограничения на способ ввода и понимать введенное разными способами. например когда ты планируешь как будешь делать - это может быть рисунок. когда ты реализуешь, то это текст, НО!

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

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

Дракон даже рядом не стоял. Я не пилю ещё один вид блоксхем. Я пилю удобный способ записи исходников. А их может быть удобно записывать в зависимости от компоненты одной программы на разных языках а иногда даже рисовать

ckotinko ☆☆☆
() автор топика

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

Лучше почитай Фаулера про рефакторинг.

От всего остального «сахара» также ни холодно - ни жарко. Всегда считал, что чем меньше, тем лучше.

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

Казалось бы простая идея видеть код как базу данных. Создать инструменты для выборок из этой БД и формирования из них разнообразных представлений.

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

Более того, джава разработчики отчасти имеют зачатки реализации такой идеи в своих современных IDE. Но остальным 25% разработчикам очень тяжело осознать эту идею работаю всю жизнь в текстовых редакторах на стероидах по типу Vi.

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

Казалось бы простая идея видеть код как базу данных. Создать инструменты для выборок из этой БД и формирования из них разнообразных представлений.

Но почему-то кое-кто путает это [...]

Ну, вы-то не путаете... ждем релиза.

джава разработчики отчасти имеют зачатки реализации такой идеи в своих современных IDE [...] работают всю жизнь в текстовых редакторах на стероидах по типу Vi

Я понимаю, что можно не ходить по ссылкам, но хоть на имя хоста можно посмотреть.

tailgunner ★★★★★
()

Г-ди, как же сильно сказывается на мозге разработка видеодрайверов. А вообще, какой-то балабол-модератор (Шаман, емнип), обещал ТСа забанить, но, вот, увы...

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

Я думаю не надо, я уже к его кукареканью про политику привык. А так он нормальный парень, ну немного головой ушибленный, но я б его не банил. Он как реликвия.

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

В общем парень неплохой, только ссытся и глухой. Как у нас в дурке говорят: вроде умный, но дурак (клинический).

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