testicula, это к terminaLtor и Сварт?
![]()
Ко всем
Что вы куǷите?
testicula пишет:Цыц. Известно то много лет, да не молодым любителям яблочек
Да и не всем любителям пингвинов, которые кричат "у нас все сперли пипитарщики" ))
Да и любителям лысины балмера и цветных витражей.
Внезапно известно многа лет...
Цыц. Известно то много лет, да не молодым любителям яблочек
Ну, в общем, https://nnm.ru/blogs/gaalnixrlz/kompyute … ya-vremya/.
Давим стройматериал.
Lord_Evil пишет:но чет тоже взгруснулось..
Ага, молодой ведь еще был...
Сварт написал в блоге Карманова:
А вот и конкретный пациент (взято сегодня с одного форума):
https://radikal.ua/data/upload/ba193/491 … 974aec.png
https://radikal.ua/data/upload/0fccf/69f … 20225a.png
https://radikal.ua/data/upload/05615/ba1 … b5682d.png
Дааа.. тяжёлый случай.
mav, его рабы точно ща не хилую боль ниже поясницы испытывют. И теперь уже по двум событиям сразу..
Я его хоть и не любил никогда, но чет тоже взгруснулось.. Но не конец света, да..
Интересно, что запоют когда Гейтс присоединится к Стиву в подземной парилке...
Babusha пишет:Секундочку, оператор continue переходит к следующей итерации или продолжает выполнение текущей?
Да, именно так. Он используется внутри операторных скобок.
Вообще-то Babusha спросил что делает оператор "continue". То что он находится внутри "операторных скобок", по моему, очевидно
А "continue" да, переходит к следующей итерации, а если точнее то к точке где происходит "i++". (затем просиходит проверка "i < 10" и исполняется "тело" цикла.
Попробуй протрассировать этот цикл в студии нажимая F11.
testicula, спасибо
.
А в шарпике есть оператор next в циклах?
А нафиг он тут?
for (int i=0; i<10; i++) {
if (i == 4)
continue;
Console.WriteLine(i);
if (i == 8)
break;
}
Это видимо такое альтернативное соболезнование, да???
Нет. Моё соболезнование было:
Безусловно, жаль его, по человечески. Тем более что умер он не лёгкой смертью (рак, пересадка печени, никому не желаю такого...).
Человек этот безусловно заслуживает уважение, как очень способный менеджер, и просто сильный по жизни человек.
И ты можешь сколько угодно исходить желчью по этому поводу
И с чего ты взял что я исхожу жёлчью?
Babusha молодец, кстати. Хороший кодер
Вечная ему память!!!
Ну насчёт вечности это ты загнул. Не стоит устраивать гиперболы. Умер человек ставший частью истории, это факт.
Добавлено спустя 04 мин 44 с:
Обидно то, что смерть человека тут же была "оценена" фондовыми биржами. Блин, куда катится мир, человек умер, а кто-то подсчитывает от этого прибыль. Противно.
Думаю, это почти норма для гомо сапиенс: победители, побеждённые, мародёры...
Просто не все впали в депрессию от факта его смерти. Некоторые решили поиметь с этого профит. Ну да ему-то уже пофиг.
Да не название переменных, название языка . Думая Brain-ня, потому-что основан на бреинфаке и няшен, хотя не очень нравится.
Соглашусь с LordEvil. Для поднятия твоего ЧСВ, а также исходя из капитанской логики, назови его BBF (BabushaBrainFuck).
Добавлено спустя 01 мин 29 с:
Ой, точно, это же получается что на моем няшном языке теоретически можно реализовать алгоритм любой сложности .
Так точно, Кэп! Любой няшности.
Моё предложение написать на нём движок NewSLOR остаётся в силе.
testicula пишет:Ну Бабуша же делает интерпретатор конкретноно диалекта брэйнфака, а не "алгоритм любой сложности".
А что - брейнфак не имеет всех этих логических конструкций?
Естественно имеет, раз он Turing Complete
Ну и что?
А какое придумать название?
Ну, по смыслу же. Ты же пишешь, не я
https://en.wikipedia.org/wiki/Brainfuck
Character Meaning
> increment the data pointer (to point to the next cell to the right).
< decrement the data pointer (to point to the next cell to the left).
+ increment (increase by one) the byte at the data pointer.
- decrement (decrease by one) the byte at the data pointer.
. output a character, the ASCII value of which being the byte at the data pointer.
, accept one byte of input, storing its value in the byte at the data pointer.
[ if the byte at the data pointer is zero, then instead of moving the instruction pointer forward to the next command, jump it forward to the command after the matching ] command*.
] if the byte at the data pointer is nonzero, then instead of moving the instruction pointer forward to the next command, jump it back to the command after the matching [ command*.
Вот по meaning, и сокращай. Напр: [+] -- OP_PLUS, [-] -- OP_MINUS, [<] -- DEC_DP, етц.
Земля ему пухом. Хороший человек ушел. Жаль...
Безусловно, жаль его, по человечески. Тем более что умер он не лёгкой смертью (рак, пересадка печени, никому не желаю такого...).
Человек этот безусловно заслуживает уважение, как очень способный менеджер, и просто сильный по жизни человек.
Насчёт же того что он "хороший" - не уверен. Я с ним лично не знаком. Насколько я знаю, благотворительностью и человечностью он особо не страдал.
Насколько я помню курс информатики, необходимыми и достаточными конструкциями для разработки алгоритма любой сложности являются:
Ну Бабуша же делает интерпретатор конкретноно диалекта брэйнфака, а не "алгоритм любой сложности".
Теоретическое обоснование "минимума требуемых конструкция (ты видимо имел в виду "операций") для реализации "любого алгоритма", в данном случае, как минимум - не к месту, как максимум - смешно
Добавлено спустя 03 мин 35 с:
Уговорил , все переписал, хотя
case 0x1: // + increment
мне нравится меньше, ну ладно.
Дык мне тоже не нравится:
Просто вместо твоего изначального Dictionary (который тут мало подходит), можно использовать:
enum Opcodes
{
OP_ADD,
OP_SHIFT,
...
}
и затем ...
switch (cmd) {
case OP_SHIFT:
acc <<= vm.stack.pop();
break;
}
Шустро, и даже понятнее чем с Dictionary.
Как тебе?
Добавлено спустя 44 мин:
testicula пишет:
Ты жертвуешь производительностью на количество_поддерживаемых_команд * каждый оборот твоего симулятора. Это как минимум увеличивает временную сложность твоего алгоритма с O(N) до O(N*M), где N-количество исполненных опкодов, а M-количество самих опкодов.
Уговорил , все переписал, хотя
Кстати, https://stackoverflow.com/questions/4490 … 8060#48060. Тебе может быть интересно.
нормальные люди
Ой, я прекрасно про нее знаю, а if я использовал, потому-что в самом начале подумал что могут понадобится более сложные конструкции сравнения, где switch`а будет мало.
Не понадобятся. Я гарантирую это
Я лично не хочу жертвовать производительностью (причем в ~20 жалких итераций) и терять красивый и понятный код.
Ты жертвуешь производительностью на количество_поддерживаемых_команд * каждый оборот твоего симулятора. Это как минимум увеличивает временную сложность твоего алгоритма с O(N) до O(N*M), где N-количество исполненных опкодов, а M-количество самих опкодов.
То есть, простым языком, с твоим подходом (if, помноженный на лукапы в Dictionary), твой эмулятор будет "тормозить" всё больше с увеличением количества поддерживаемых команд.
Тогда как вариант со свитчем, с очень высокой вероятностью, протранслируется JIT-ом в "JMP [EBX*4]", что не меняет скорость твоего эмулятора с увеличением количества поддерживаемых опкодов. (я не беру в расчёт проблемы с кэшем, ибо, особенно учитывая C# и его JIT -- уже намного более труднопредсказуемо).
Если не веришь, тебе может быть интересно взглянуть на MSIL disassembly твоего кода, и кода со свитчом. Почувствуйте разницу
В любом случае, успеха в обучении. Ты на правильном пути!
https://github.com/Babusha/Brainfuck
Критика кода приветствуется
Гениальный код!
Только, пожалуйста, в "if (command == ByteCodeCommand["["])":
Во первых - существует конструкция switch() в языке.
Во вторых - каждое обращение к ByteCodeCommand[] - это поиск в хэше по ключу-строке. Это есть медленно (особенно учитывая количество этих вызовов в цикле симулятора).
Лучше использовать в таких случаях сразу константу и оператор switch():
static const int CMD_LEFT_SQ_BRACE = 0x0A;
...
switch (cmd) {
...
case CMD_LEFT_SQ_BRACE:
.... // emulate the command.
break;
А так, всё нормально
Браво!
Тайный хранитель пишет:Раз уж создаёшь, то можно компилятор выложить? Исходники?
Без проблем, выложу на гитхаб.
И нам расскажи.
Добавлено спустя 02 мин 16 с:
Тайный хранитель пишет:Раз уж создаёшь, то можно компилятор выложить? Исходники?
Без проблем, выложу на гитхаб.
Даёшь следующий движок SLOR-а написанный на брэйнфаке Babush-и!
То один пишет о неадекватности модератора, то другой плачется в общественную жилетку и сотрясает кулачками с криками "Доколе!?"
Ну дык цикл же:
while SLOR.is_alive() {
forum.throw_in(shit);
self.butthurt();
hands.wave();
forum.curse(moderators);
}
Вечный кайф
Может проведем голосование, кого устраивает слор в нынешнем виде
И, параллельно, кто считает wr224 адекватным человеком
Babusha пишет:MOP3E, но в приципе никто не мешает написать супер-пупер ассемблер с блекджеком и шлюхами с няшным и понятным синтаксисом.
Зачем? У ассемблера осталась очень узкая ниша - драйвера под винды и программирование всяких микропроцессорных систем, для которых нет нормальных ЯП.
Драйвер под винды на асме.... Извини но бугага