1. Куча / Говнокод #23281

    0

    1. 1
    Псст. А где здесь говнокод "подопьём и разговариваем про всякое"? Я, признаться, совсем одичал за последние полгода.

    Запостил: bakagaijin, 19 Августа 2017

    Комментарии (40) RSS

    • Типа оффтоп тред или что?
      Ответить
    • ты хотел сказать подпил?
      Ответить
      • Распил
        Ответить
        • Ну вот, распи́ли, теперь можно и поговорить про всякое.
          Ответить
          • Начинай
            Ответить
            • Я медленно имплементирую твой интерфейс...
              Ответить
              • Интерфейсы не нужны. Нужно просто писать код.
                Ответить
                • На паскале
                  Ответить
                  • На ассемблере
                    Ответить
                    • Всё бы тебе mov rax, rbx
                      Нет бы как нормальные люди, на пхп писать
                      Ответить
                      • mov($rax, $rbx);
                        Ответить
                        • At&t, фу блядь, фу нахуй
                          Ответить
                          • Увидел непонятное
                            [@]
                            Нареки его «At&t»
                            Ответить
                          • $ у констант, а тут регистры (%). Не AT&T это.

                            Вообще в PHP можно дефайны делать, так что можно писать
                            mov(RAX, RBX);
                            Ответить
                            • Плюс за первую часть.

                              Про вторую часть: нельзя. Это не сишный дефайн. У PHP нет препроцессора.

                              Во-первых, в PHP define записывает в константу текущее значение правой части. Т. е. если даже написать
                              define('RBX', &$x);
                              а потом изменить значение $x, то значение RBX не изменится.

                              Во-вторых, изменять значения констант нельзя. Т. е. mov в принципе нельзя реализовать (если не ковыряться в ядре PHP).

                              *****

                              Тем не менее, есть идея, как реализовать такой синтаксис: завести глобальный массив под регистры.
                              $Registers = array(
                              'RAX' => 0,
                              'RBX' => 0,
                              ...
                              );

                              Далее вставить банальные определения:
                              define('RAX', 'RAX');

                              И тогда реализация mov будет совсем простой:
                              function mov($dest, $src) {
                                $Registers[$dest] = $Registers[$src];
                              }
                              Ответить
                              • > значения констант нельзя

                                Я и не думал их менять, подразумевал именно

                                > завести глобальный массив под регистры

                                Мы же передаём в mov имя регистра, имена mov не изменяет.
                                Ответить
                                • Кстати, у PHP была ненужная фишка: если константа не объявлена, подразумевается, что её значение совпадает с именем (при этом выдаётся ворнинг). Т. е. когда впервые обращаюсь к константе RAX, подразумевается define('RAX', 'RAX');

                                  Из PHP эту ненужную фишку собираются убрать:
                                  https://wiki.php.net/rfc/deprecate-bareword-strings

                                  Сколько же говнокода придётся исправлять, если разработчики PHP наконец-то вытряхнут скелет из шкафа.
                                  Ответить
                                  • # собираются убрать

                                    Батенька, говнокод никто даже не будет запускать на ваших модных "PHP 7"
                                    Ответить
                                    • Это точно. Говорят, Битрикс положил большой и толстый агрегат на совместимость с PHP новее 5.3, потому что тупо некому исправлять такое количество модулей.
                                      Ответить
                                • Ещё идея: можно реализовать и косвенную адресацию. Начиная с PHP 5.4 массивы можно оформлять квадратными скобками. Значит, допустим такой синтаксис:
                                  mov([RAX], RBX);
                                  mov(RAX, [RBX]);

                                  А внутри функции аргументы можно проверять с помощью is_array.

                                  Ещё можно задефайнить регистры как числовые константы. Тогда можно будет использовать синтаксис «база+смещение»:
                                  mov(AX, [BP+SI]);

                                  Только надо задать значения побольше, чтобы суммы не пересекались.

                                  Можно ли безопасно реализовать SIB (scale-index-base), я пока не думал. Тут и с постоянным смещением (вроде mov(RAX, [RBX+8])) можно налететь на неприятности.
                                  Ответить
                                  • # Только надо задать значения побольше, чтобы суммы не пересекались.

                                    А ты попробуй переопределить оператор сложения
                                    Ответить
                                    • Оказывается, можно:
                                      http://pecl.php.net/package/operator

                                      Но только для классов, а правая часть define поддерживает только скалярные типы и строки. Так что тогда придётся писать так:
                                      mov($rax, [$rbx + 8]);
                                      Ответить
                      • > rax, rbx
                        Возможно, вы имели в виду «ax, bx»?
                        Ответить
    • похоже, ТС конкретно в запое

      а как ты провёл выходной, %username%?
      Ответить
    • тс, если кто не следил, в конце сентября прошлого года получил на руки три вещи:
      1) дочку
      2) жену, которая родила дочку
      3) ПИЗДЕЦ ПИЗДЕЦ ПИЗДЕЦ

      Вот, через без малого год, я пытаюсь вернуться. Аск ми, ну вот это всё.
      Ответить
      • И зачем нахуя тебе это?
        Ответить
      • У пользователей гк есть личная жизнь, охуеть
        Ответить
        • Обнимание с дакимакурой под японские порномультики это тоже личная жизнь, cykablyad!
          Ответить
          • У меня нет денег на дакимакуру
            Ответить
            • Купи обычную подушку и маркером нарисуй на ней тян.
              Ответить
              • У меня нет денег на подушку с маркером и рисовать я не умею
                Ответить
                • Подушка у тебя по-любому есть. А раз учишься, то и ручка должна быть. Рисунок перенесешь с экрана по клеточкам, на это особого скилла не нужно.
                  Ответить
                • Купи найди на помойке рулон поролона и обклей распечатанными на чёрно-белом принтере листочками с изображением тян.
                  Ответить
                  • Тогда получится вайфу моего друга, а я не хочу
                    Ответить
      • Почему меня должны волновать твои биомусорные достижения? Засунь свою дочку себе в жопу.
        Ответить
    • -- конкретизируйте запрос --
      Ответить
      • нахуя нужна т.н. "личная жизнь" (семья, дети, вот вся эта хуета) ?
        Ответить
    • Я, gost, находясь в здравом уме и твёрдой памяти, торжественно нарекаю говнокод номер 23281 оффтоп-тредом.
      Ответить

    Добавить комментарий