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 нет, "<" не оптимизируется

* * *

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

☆☆☆

забыл совсем.

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

class Foo {
    float x0 = ...;
    float y0 = ...;
    float z0 = ...;

    vertex_shader A {
        //use x0, y0, z0
    }
    fragment_shader B1 {
       ...
    }
    fragment_shader B2 {
       ...
    }
    void paint1(...) {
        var prog = A + B1;
        prog(...);
    }
    void paint2(...) {
        var prog = A + B2;
        prog(...);
    }
}

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

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

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

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

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

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

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

Что насчёт спроектировать с нуля вычислительную систему

я эту штуку точу под проектирование ASICа. вообще-то. а заодно под оптимизацию готовых программ под этот очень специфический asic, который GPU но может как CPU

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

нет, если у тебя корутина, то у тебя параллельно есть два контекста

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

причем последние не в стеке лежат.

Да где бы не лежали, у этого места есть адрес.

стек вообще наследие тяжелых 80х.

А так же тяжелых 60-х и 70-х.

tailgunner ★★★★★
()

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

пропустил:

always: заставляет применять проверку на каждое утверждение в scope конструкции.

static: заставляет вычислить конструкцию один раз (аналог std::call_once)

parallel: конструкция может быть запаралелена и потенциально оттранслирована в opencl(одновременно может быть 2 варианта - на СPU для малых N и на GPU для больших)

pipelined: это пока в планах. для GPU фишка, я предлагал хз когда в AMD inventor's corner но бюрократы зарубили. ускорение ветвлений путем упаковки «ветвей» в группы с передачей параметров через LDS/GDS. реализуемо с HD5000, с HD7000 - на скалярном блоке.

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

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

как это бинарно сделать я знаю. на вход подается дополнительно карта remapа смещений. и блок знает куда перенацеливать свои обращения.

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

пусть у тебя есть класс «слушающий сокет». откуда ты знаешь куда писать адрес принятого коннекта?

Возвращать как результат.

как это бинарно сделать я знаю. на вход подается дополнительно карта remapа смещений. и блок знает куда перенацеливать свои обращения.

А указателей на функцию у тебя нет? Или любая функция с parameter автоматически становится замыканием?

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

вообще зачем я это творю.

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

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

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

А указателей на функцию у тебя нет? Или любая функция с parameter автоматически становится замыканием?

есть. но тут не замыкание, а скорее антизамыкание.

замыкание - это когда переменные всасываются в объект-функцию по месту её создания. то есть она запоминает их by_value

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

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

вообще зачем я это творю.

Чтобы локальные переменные было труднее переименовать?

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

Ух ты. Оно еще и должно проходить через несколько уровней вызовов? Интересно, как ты будешь реализовывать вызов по указателю (если он у тебя есть).

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

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

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

нет, кисий это потому что

а) язык от К155ЛА3 - я хотел изначально сделать игруху-симулятор спектрума

б) жена киса, хочется чтоб она могла кодать не убиваясь об всякие адские API. слово киса начинается на К. и вообще я кис люблю.

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

Почему я написал ДОБРОЕ СЛОВО ПРО РАСТ. Потому что идея impl X for Y она годна! Она охеренна.

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

локальные переменные было труднее переименовать

это мы предусмотрели:

{
    int whore;
    {
         alias bitch = whore;

    }
}

Оно еще и должно проходить через несколько уровней вызовов?

Если быть точным, алгоритм поиска таков:

слова parameter, always, const - это «модификаторы». они лишь говорят кодогенератору, как искать переменные.

если их нет, ищем в текущем scope, далее идем вверх до обнаружения callable object(это как дошли до объявления метода или функции) или typed object(это как если бы поднялись в объявление структуры или класса). при этом переменной неявно добавляются модификаторы «member» и «argument» соответсвенно.

всё что выше ищется в «контексте».

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

это мы предусмотрели:

Осталось только ответить - зачем это всё? Чтобы не добавлять параметр по всей цепочке вызываемых функций?

слова parameter, always, const - это «модификаторы». они лишь говорят кодогенератору, как искать переменные.

если их нет, ищем в текущем scope, далее идем вверх

А раздельную компиляцию ты как реализуешь? У тебя свой формат модулей или ты компилятор разбирает DWARF?

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

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

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

Функция с parameter - это обычное замыкание (нет, не «антизамыкание»). Выиграть за счет этого у i7? Ну-ну. А «в обычном десктопном софте» таких конструкций просто нет.

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

А раздельную компиляцию ты как реализуешь?

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

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

У тебя свой формат модулей

ELF, но наружу будет торчать только один символ. современный ABI в С и С++ это какая-то сатанинская жопа. он же реально создан чтоб страдать в 80х.

Плюс указатели. Вот например я придумал как сделать реально работающий GC. для этого каждый указатель есть пара {T * ptr, T** ptr2}

код работает от «точки» до «точки» и между ними можно приземлять указатель как ptr | (*ptr2). В оптимальном случае ptr2 = &ptr и кэш промаха не будет. в неоптимальном ptr = null, ptr2 = адрес в таблице.

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

Функция с parameter - это обычное замыкание

не-а. «обычное замыкание» создается на месте с параметрами.

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

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

По названию: это что-то кошачье? Кися, кисонька.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от ckotinko

А раздельную компиляцию ты как реализуешь?

её как таковой не требуется.

(голосом албанского бандита из Taken) «Удачи».

Вот например я придумал как сделать реально работающий GC. для этого каждый указатель есть пара {T * ptr, T** ptr2}

Мне кажется, это не ты придумал. Хотя, если указателей у тебя только 2 и ты обходишься без сканирования стека - может, и ты.

Лучше расскажи подробнее о стейт-машинах.

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

«обычное замыкание» создается на месте с параметрами.

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

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

Где и как оно создается - нерелевантно.

создается в libfoo.so, используется в libbar.so. причем libfoo - проприетарная. как тебе такой юзкейс?

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

создается в libfoo.so, используется в libbar.so. причем libfoo - проприетарная. как тебе такой юзкейс?

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

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

ничуть. для большинства юзкейсов с количеством параметров <16 это 32-64 лишних байта. через AVX2 подтягиваются в любом виде. без AVX2 надо просто чуть больше «подумать»

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

для большинства юзкейсов с количеством параметров <16 это 32-64 лишних байта

Как ты найдешь место (стековый кадр), из которого их надо взять?

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

нахера мне его искать? у меня контекст идет отдельной структурой. я ЗНАЮ в момент компиляции, какие параметры потребуются и даю их смещения. дальше их через gather_read собираем и работаем. через scather_write записываем на выходе.

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

я ЗНАЮ в момент компиляции, какие параметры потребуются и даю их смещения

Знаешь в момент компиляции проприетарной libfoo?

дальше их через gather_read собираем и работаем. через scather_write записываем на выходе.

А, конечно, gather_read и scatter_write... это решает все проблемы.

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

в libfoo я знаю какие нужны параметры и в каком порядке. в libbar я знаю где они лежат и в каком порядке их надо упомянуть при вызове. не вижу тут принципиальных проблем.

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

На ЛОРе уже намечается какая-то секта писателей эзотерических языков.

no-such-file ★★★★★
()

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

bigbit ★★★★★
()

Весенний годняк прилетел, приду домой - почитаю :)

yoghurt ★★★★★
()

Я так понимаю, в «железе» ты кое-что понимаешь. В проектировании ЯП, скажем так, чуть меньше. Не взлетит. Фичи не фичастые. Тот же always можно сделать на макрах или чём-то подобном.

for(int x in (0,5)) {//не спрашивайте почему это похоже на питон

Тащемта, это вылитый жабоскрипт.

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

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

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

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

Про рефал с суперкомпиляцией точно читали?

yoghurt ★★★★★
()

parameter присасываются к переменным в текущем контексте. Этакая лямбда-наоборот. Возможно я не прав, но вдруг это хорошая идея?

Ты изобрёл Dynamic scoping. Широко используется во всяких общелиспах, и в ракетке тоже вроде бы есть, про схему не уверен.

theNamelessOne ★★★★★
()

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

Приведенный ниже кусок к ФП имеет весьма посредственное отношение. В чем смысл? Чтобы вместо значения foo всегда вычислялся блок кода для текущего контекста?

2) 2 разных thisа. Есть this - это класс, к которому применен оператор прямо вот сейчас. а есть например that: это контекст.

Не очень понял, откуда that берется в приведенном примере, но контекстно-зависимое значение k эт очень неявно и главное зачем?

В Смолтоке, кстати, есть self (ака this), super (ака parent class), и thisContext. Последний служебный, но из него можно получать информацию о стеке вызовов. Построение логики на основе thisContext - в общем случае антипаттерн, применяют только гуру когда знают, что делают (когда речь идёт об отладке или расширении возможностей языка).

С использованием always можно сделать predicate автовычисляемым. Удобно чтоб не забыть где-то что-то. Но я предлагаю ширше использовать это слово:

См. работу монад в Haskell, Maybe как элементарный пример.

Общие комментарии:

1) Не очень понятно, как описанное тут соотносится с идеями из первого поста (с программой-которая-не-перекладывается-на-бумагу-и-анализируема-срезами)

2) То, что описано здесь, выглядит переусложненным. Слишком много частных вещей вносится в язык. Надо брить. Хорош тот язык, в котором подобные вещи легко «рассказываются», плох тот, в котором это вшито внутрь.

Хорошие примеры:

- тот же самый Smalltalk - построен на элементарнейшем базисе объект-сообщение, всё остальное - циклы, ветвления, наследование, etc - выражается через этот базис. Более того, классическим для Smalltalk подходом является image-based persistence - когда в дополнение к коду хранится весь стейт VM. Можно сохраниться посреди дебаггинга, выключить комп, спустя неделю (месяц, год, ...) включить и вернуться в то же место. ИМХО это наиболее близко к описанной концепции (код + стейт) из ныне живущих систем.

- Haskell - в базовый язык заложено само понятие монады, над которой уже строится самый разный control / computation flow (переопределением >>=). Те же самые FSM - почему бы их не строить из комбинаторов, а не из банальных свичей? Комбинаторами описываются достаточно сложные автоматы, где с обычными свичами засвичишься.

yoghurt ★★★★★
()

Ох уж эта весна, ну ничего... летом и ОС-строители подтянутся. Вы может вместе скооперируетесь? И Новый Язык напишите и Операционную Систему, сразу двух зайцев.

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

Рефал это что-то сильно другое.

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

Языки программирования пилят именно для удобства решения задач. ПХП например удобен для написания динамических веб страниц. Си делался для кодания на компе pdp-11

Но надо понимать что этот подход с языками - он из эпохи текстовых терминалов

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

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

[...]

Но надо понимать что этот подход с языками - он из эпохи текстовых терминалов

Поскольку нас могут читать дети, которые считают тебя специалистом в ЯП, вот мнение реального специалиста: https://graydon2.dreamwidth.org/193447.html; вот мнение еще одного: http://cdtdoug.blogspot.com.by/2009/12/multi-core-programming-paradigm-shift....

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

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

Тогда ещё раз советую посмотреть на современный Смолток :)

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

But text wins by a mile. Text is everything. My thoughts on this are quite absolute: text is the most powerful, useful, effective communication technology ever, period.

ялдь.

моя идея не в том, чтоб представить код каким-то ОДНИМ способом, а чтоб представить код множетсвом переключаемых способов(1) и одновременно позволить работать с кодом на нескольких разных уровнях детализации(2).

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

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

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

и еще кое что.

челы, на которых ты сослался ПРОТИВОПОСТАВЛЯЮТ графическое программирование текстовому. я этого не делаю. я хочу дополнить текстовое представление графическим, и сделать его динамическим - с отфильтровкой лишнего. feel the difference

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

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

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

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

челы, на которых ты сослался ПРОТИВОПОСТАВЛЯЮТ графическое программирование текстовому [...] я хочу дополнить текстовое представление графическим

Один из них говорит, что текст всегда «wins by a mile», второй говорит, что «when you have 500 things, graphical programming is completely unusable». Хотя, возможно, у тебя не 500 things, а всего 499.

feel the difference

Между «Text is everything» и «подход с языками - он из эпохи текстовых терминалов»? I feel.

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

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

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

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

when you have 500 things

when you have 500 things, стоит подумать над тем, чтоб оставить на экране только те things, которые тебе нужны в данный момент. вот именно это я и делаю.

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

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

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

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