Няшная / Говнокод #20049 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
<?php include_once "stdio.h"; ?>

int main()
{
    <?php
        for($i = 0; $i < 20; $i++)
            echo 'printf("%d\n", '.$i.');';
    ?>
}

You can use PHP as a C preprocessor. The advantages are:

very similiar syntax, so syntax highlighting works.
<? and ?> are not used in standard C (with non-standard C, the only thing that gets broken is old GCC extension operator that returns min/max)
it's rich in libraries.
it's turing complete.
usage of macros is very explicit. (compared to sneaky C preprocessor macros)

For serious use though, making PHP print the #line directives is needed for debugging preprocessed code.


http://stackoverflow.com/questions/396644/replacements-for-the-c-preprocessor/16256052#16256052
ящитаю это гениально

Запостил: CHayT CHayT, (Updated )

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

  • И вообще, внешние препроцессоры это хуита, надо чтоб гомоиконность!
    Ответить
    • а Алан Тьюринг и Фредди Меркьюри -- гомоиконы или нет?
      ими можно препроцессить сишку?
      Ответить
        • ну спасибо
          теперь даже проверка тьюринг-полноты будет звучать неоднозначно
          "тьюринг-полная вечеринка"
          Ответить
            • боюсь, если я хоть раз представлю, что это значит, то придётся уходить из IT
              Ответить
              • > придётся уходить из IT
                Тогда подумай ещё о преждевременной оптимизации, double-ended queue и проблеме останова...
                Ответить
  • Я бы переписал так:
    <?php include_once "stdio.h"; ?>
    
    int main()
    {
        <?php for($i = 0; $i < 20; $i++) { ?>
        printf("%d\n", <?=$i?>);
        <?php } ?>
    }
    Ответить
  • Для полноты картины нужен препроцессор Python на PHP.
    Ответить
  • теперь и в си можно посчитать факториал на этапе компиляции
    Ответить
      • Факториал сложнее. Там придётся придумать длинную арифметику.
        Ответить
        • предлагаю несвежую идею: использовать вместо неё аксиомы Пеано в явном виде
          Ответить
  • define(`loop', `ifelse(`$1', 0,, `loop(decr($1))
        printf("%d\n", $1);')')dnl
    int main()
    {
    loop(20)
    }

    Угадайте препроцессор по кавычкам.
    Ответить
    • Судя по торчащим в разные стороны волоскам, это эм-четыре.
      Ответить
      • Так точно.

        В эм-четыре цикл нужно каждый раз изобретать заново. В "PHP" есть готовые циклы.

        Решение: переходите на "PHP"!
        Ответить
          • Sendmail не нужен. Он написан пидорасом. Переходите на Postfix или Exim.
            Ответить
            • Императивное программирование не нужен
              Он придуман пидарасом
              Ответить
              • Нецелесообразно™ использовать устаревший тормозной Sendmail, когда есть более эффективные средства.
                Ответить
                • На самом деле есть два повода использовать Sendmail.

                  1. У тебя 15 лет опыта работы с Sendmail
                  2. Ты выдумал новую схему адресации (например "domain::==user_name") и хочешь чтобы MTA его использовал

                  других поводов нет, конечно)
                  Ответить
                  • Ух, ты! А для него можно придумать схему "Куда: domain Кому: user_name"? Ну чтобы совсем было похоже на почтовый конверт?
                    Ответить
                    • Я думаю что да.
                      "Ruleset 3 is responsible for converting an address in an arbitrary format into a common format that sendmail will then process. The output format expected is the familiar looking local-part@host-domain-spec."

                      Сами рулы записываются в формате типа "R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3"

                      То-есть можно выдумать любой формат, и любое действие.
                      Именно потому Sendmailовые конфиги такие пиздецовые: когда пилили sendmail, SMTP вовсе не был стандартом де-факто.
                      Был и UUCP и Berknet и еще 20 доморощенных говнопротоколов, причем кого-то нужно было слать через IP, кого-то через dial up, кого-то вообще складывать в папочку.
                      Ответить
                      • То есть если бы Интернет не стал фактическим монополистом, то эта возможность была бы востребована?
                        Ответить
                        • Да, возможно что и так.
                          Но со временем все равно список систем бы утрясся, и их можно было бы захардкодить в MTA. А в 70х каждый выдумывал свой протокол.
                          Ответить
                  • > На самом деле есть два повода использовать Sendmail.
                    > 1. У тебя 15 лет опыта работы с Sendmail

                    в своей жизни я знал ровно одного человека кто умел конфигурировать sendmail (и я говорю про настоящий sendmail.cf, а не детский сад с пачкой m4 скриптов) - и он был очень большим сторонником postfix.
                    Ответить
                    • Я тоже умел, пока читал книжку Orielly.:) Потом быстро забыл.

                      На самом деле не нужно писать .cf напрямую. Другой вопрос что и m4 весьма дерьмов. Как минимум он императивен.

                      keyvalue файлы постфикса в тысячу раз проще и приятнее, и в 99.9991% случаев функционала постфикса достаточно
                      Ответить
                      • m4 не совсем императивен (см. способ создания цикла через макрос ifelse и рекурсию). Он даже на классические ЯП не похож, ибо построен по принципу «найти и заменить».
                        Ответить
                        • В общем, меня заклинило. Вроде и «вызов» макросов происходит, как в императивных языках, но при этом классических средств управления нет.
                          Ответить
              • >Императивное программирование не нужен
                >Он придуман пидарасом
                Плохого же ты мнения о Бауэре с Бэкусом.
                Ответить
    • > Угадайте препроцессор по кавычкам.

      ц препроц не достаточно убогий - давайте его на м4 заменим!
      Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8