Бывает ли программный код без операторов ветвления (совсем) может известны какие то программы. Циклы можно, но без ветвления (if). Вопрос конечно теоретический но мне всегда было интересно.

  • cocucka
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Циклы можно, но без ветвления (if).

    Гхм, циклы без ветвления (проверки условия) в студию.

    • HolgerOP
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      да не я имел ввиду код без if циклы то другое.

      • cocucka
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

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

  • MrSugoma
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Хеллоуворлд — да. Программы — нет.

  • JamesHolden
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    1 Ассемблер ARM, можно писать без прямого ветвления, за счет суффиксов добавляемых к инструкциям. Эти суффиксы заставляют инструкции выполняться только при опрелеленных условиях.

    2

    while (a>b) {
      a = a*b;
      break;
    }
    

    Вместо

    if (a>b) {
      a = a*b;
    }
    

    И вперед.

    • cocucka
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Но ТС не в курсе, что этот код в результате исполняет абсолютно идентичные команды.

      int test(int a, int b){
          while (a>b) {
          a = a*b;
          break;
          }
          return a;
      }
      
      int test2(int a, int b){
          if (a>b) {
          a = a*b;
          }
          return a;
      }
      
      test(int, int):
              push    rbp
              mov     rbp, rsp
              mov     DWORD PTR [rbp-4], edi
              mov     DWORD PTR [rbp-8], esi
              nop
              mov     eax, DWORD PTR [rbp-4]
              cmp     eax, DWORD PTR [rbp-8]
              jle     .L3
              mov     eax, DWORD PTR [rbp-4]
              imul    eax, DWORD PTR [rbp-8]
              mov     DWORD PTR [rbp-4], eax
              nop
      .L3:
              mov     eax, DWORD PTR [rbp-4]
              pop     rbp
              ret
      test2(int, int):
              push    rbp
              mov     rbp, rsp
              mov     DWORD PTR [rbp-4], edi
              mov     DWORD PTR [rbp-8], esi
              mov     eax, DWORD PTR [rbp-4]
              cmp     eax, DWORD PTR [rbp-8]
              jle     .L7
              mov     eax, DWORD PTR [rbp-4]
              imul    eax, DWORD PTR [rbp-8]
              mov     DWORD PTR [rbp-4], eax
      .L7:
              mov     eax, DWORD PTR [rbp-4]
              pop     rbp
              ret
      
      • JamesHolden
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        Ессесно. А ещё спрашивают, зачем надо учить ассемблер.

      • JamesHolden
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        Вот, @Holger, тут ветвление компилятор реализовал через прыжок jle на метку, а в ARM ассемблере прыжка бы не требовалось, там просто суффиксом саму операцию a*b сделали бы условно выполняющейся.

      • JamesHolden
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        Человек четко написал - циклы можно, if нельзя. Конец цитаты.

        Вопросы какие

        • MrSugoma
          link
          fedilink
          arrow-up
          0
          ·
          1 year ago

          Человек четко написал - циклы можно, if нельзя. Конец цитаты.

          Это другое, это надо понимать.

      • HolgerOP
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        это цикл с условием. как в питухоне например while true это бесконечный будет цикл

        • MrSugoma
          link
          fedilink
          arrow-up
          0
          ·
          1 year ago

          Так тут все равно есть условие.

        • JamesHolden
          link
          fedilink
          arrow-up
          0
          ·
          1 year ago

          Любой цикл имеет условие by design, если это не в ассемблере.

          • HolgerOP
            link
            fedilink
            arrow-up
            0
            ·
            1 year ago

            Ну в одном из языков есть такой цикл повторить n раз без всяких while

          • HolgerOP
            link
            fedilink
            arrow-up
            0
            ·
            1 year ago

            Ну в одном из языков есть такой цикл повторить n раз без всяких while

            • JamesHolden
              link
              fedilink
              arrow-up
              0
              ·
              1 year ago

              Ты почитай букварь какой, в самом то деле.

              Повторить n раз - это цикл for, есть в любом языке, даже в нативном коде. И “повторить n раз” это УСЛОВИЕ, прикинь.

              У вас что там, информатики в школе не было

              • HolgerOP
                link
                fedilink
                arrow-up
                0
                ·
                1 year ago

                в том языке помнится нет for а какого хрена надо еще лишние переменные задействовать для цикла?

                • rezedent12
                  link
                  fedilink
                  arrow-up
                  0
                  ·
                  1 year ago

                  В машинном коде, если это конечно не какой то экзотический процессор, нет for, do, loop и прочей заloop. В нём есть только if и jmp.

                  Что бы ты не написал осмысленного (имеющего практический смысл) на языке высокого уровня, компилятор сгенерирует код с условными переходами.

              • HolgerOP
                link
                fedilink
                arrow-up
                0
                ·
                1 year ago

                Циклы for хороши для перебора значений массива. А в остальном… [code=python] a = [9, 20, 4] for x in a: print (x) [/code]

                как то так

          • cocucka
            link
            fedilink
            arrow-up
            0
            ·
            1 year ago

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

            • Harald
              link
              fedilink
              arrow-up
              0
              ·
              1 year ago

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

  • HolgerOP
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Хорошо, но допустим вариант программулины которая делает запись в системный реестр винды. Вот ей то нахрена ветвления?

    • cocucka
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Всмысле нахрена? Типа перед записью наличие узла, в который ты пишешь проверять не надо?

      • HolgerOP
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        Так он по любому есть. И потом не будет записи нужной будет ошибка и вот и ее не надо обрабатывать.

      • MrSugoma
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        Да, не надо, я в своем коде особо проверок не делаю.

    • rezedent12
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Хорошо, но допустим вариант программулины которая делает запись в системный реестр винды. Вот ей то нахрена ветвления?

      Догадываешься ли ты, что вызываемая для этой цели функция содержит операторы ветвления?

      • HolgerOP
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        какие такие нужны операторы ветвления если надо получить текущую дату или unixtime?

        • rezedent12
          link
          fedilink
          arrow-up
          0
          ·
          1 year ago

          какие такие нужны операторы ветвления если надо получить текущую дату или unixtime?

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

  • HolgerOP
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Или программулина выводящая дату или количество прожитых дней врядли ветвления тут нужны.

  • Nice
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Для GPU пишут так чтоб не было ветвлений, из-за особенностей исполнения SIMT. Гуглится по словам “simt wavefront”.
    Ну еще при Data-oriented design.