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

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    // Making Wrong Code Look Wrong
    // by Joel Spolsky
    // https://www.joelonsoftware.com/2005/05/11/making-wrong-code-look-wrong/
    
    us = UsRequest("name")
    usName = us
    recordset("usName") = usName
    sName = SFromUs(recordset("usName"))
    WriteS sName

    В упомянутой роскомговном статье «Making Wrong Code Look Wrong» Спольски упоминает венгерскую нотацию, как способ to make wrong code look wrong.
    Я хотел бы обсудить ЯП, в котором поверх (допустим, динамической) системы типов есть некоторый набор правил, основанный на Apps Hungarian. У переменных и функций сравниваются префиксы, и язык не даёт тебе присвоить количество мух в переменную, которая хранит количество слонов, хотя и то и то — int. Если же ты знаешь, что делаешь, можно использовать функции вида <prefix>From<suffix> и <prefix>To<suffix>, причем во избежание бойлерплейта, можно положить все такие функции существующими и тривиальными (возвращающими входное значение), если не определено другое.

    Что хорошего и плохого было бы в таком языке? Дискасс.

    Запостил: vistefan, 11 Июля 2018

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

    • SEO: Making Wrong Code Look Wrong
      Ответить
    • Такое семантическое типизирование нужно далеко не всегда, я не думаю что всем понравится вот так автоматом его в язык
      Ответить
      • roskomgovno, ты с какого года на говнокоде?
        Ответить
        • а что?
          Ответить
          • Раньше чото не замечал флейма про асм. А теперь аж 3 человека минимум его обсуждают, не считая борманда (если, конечно, вы все не его файки).
            Ответить
            • Все — файки борманда.
              Ответить
              • Раньше самым активным на сайте был борманд, а теперь роскомговно. Совпадение?
                Ответить
                • Это не борманд. Это инкАнус.
                  Ответить
                  • инкАнус это guest8
                    Ответить
                    • Это нам известно. Но он вполне может сидеть и под тобой.
                      вообще-то я считал, что ты дефекате, но в последнее время отметаю эту версию. он слишком занятой человек, чтобы сидеть под файкой.

                      Ты либо инканус, либо пи. если вы с ним не одно лицо.

                      Бля, знешь, я бы пожалуй отсосал тебе. Ну, или вам обоим.
                      Ответить
                • Раньше президентом америки был Линкольн, а теперь — Трамп. Совпадение?
                  Ответить
                  • Хочешь сказать, что Трамп - файка Линкольна?
                    Ответить
                • Не стоит строить теории заговора. Просто мне хочется анимцо посмотреть, в круги поиграть, проц на верилоге доделать...

                  В итоге на гк я почти забил. Последнее время даже ленту комментов листаю по-диагонали.
                  Ответить
                  • Обратите внимание, на былое поведение данной учётки, и на то, как она стала себя вести, когда Стертор получил к ней доступ. Последний нейтральный говнокод с нее был почти полгода назад, затем стабильно попёрла гниль.
                    Ответить
      • roskomgovno, ты с какого года на говнокоде?
        Ответить
      • А мне нравится. Ещё в школе нас учили, что бывают размерные величины, которые измеряются в степенях метров, килограммов, секунд, амперов, ещё чего-нибудь и что единицы измерения нельзя путать, нельзя складывать метры с килограммами.

        А не понравится любителям слабой типизации, которые привыкли, что любая величина может неявно каститься к строке или к инту.
        Ответить
        • Да, примерно об этом я и говорю. Можно даже литералам на уровне синтаксиса заложить в язык суффиксы, чтобы обойтись без ООП, и при этом получить полиморфизм.

          Например,
          sFoo = SBar() + 10s;
          валидный код, а
          sFoo = 10;
          — невалидный, потому что непонятно: десять чего? Можно ещё предусмотреть возможность задавать особые правила и касты на основании суффиксов, например:

          km = 1000m
          h = 60min
          d = 24h
          y = 365d

          length(m, km)
          time(h, min, d, y)

          Задаешь такие правила в соответствии с задачей, и получаешь полиморфизм. Вовсюда, куда лезет время, влезут и минуты, и года. Я к чему клоню? Как вам в целом идея: динамический язык, в котором ты сам на ходу изобретаешь правила, которые проверяют код статически, и при этом не прибегаешь к ООП и типизации вообще, имея нахаляву полиморфизм и ворнинги с еррорами, которые появляются, когда ты делаешь что-то СЕМАНТИЧЕСКИ неправильное для задачи, а не просто пропустил запятую. Проблема, рассматриваемая в статье Спольски как раз в том, что валидный код порой таит в себе вёдра говна. Валидный код не значит корректную программу. Поэтому я и пытаюсь вынести на обсуждение способы на этапе компиляции или статической проверки обнаружения семантических ошибок.
          Ответить
      • > нужно далеко не всегда

        Безусловно, мы обсуждаем некий HQ9+, но всё же. Кроме того, можно ввести правило, по которому, например, с переменными и функциями без префиксов можно делать всё, что угодно.
        Ответить

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