1. JavaScript / Говнокод #27556

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    function foo(arg: any) {
        if (typeof arg === "string") {
            // We know this is a string now.
            print(<string>arg);
        }
    }
    
    function main() {
        foo("Hello");
        foo(1);    
    
        print("done.");
    }

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

    Запостил: ASD_77, 11 Августа 2021

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

    • и дампик https://pastebin.com/cCHjPgk6
      Ответить
    • результат работы

      C:\temp>C:\dev\TypeScriptCompiler\__build\tsc\bin\tsc.exe --emit=jit C:\temp\1.ts 
      Hello
      done.
      Ответить
    • А что такое <string>? Каст? Но зачем, мы же и так убедились, что там строка.
      Ответить
      • ну логично.. можно сделать тайный каст. но пока так
        Ответить
        • не можно, а нужно сделать safe cast, TS же так умеет
          Ответить
          • это TS ему похрен - жабаскрипт все сожрет
            Ответить
      • ну а если сделать так
        if (typeof arg === "str" +  "ing") {


        откудава я знаю что там стринг?
        Ответить
        • Твой компилятор не умеет два литерала склеить?:)

          Ну просто явный каст это же ужс
          Ответить
          • А неявный каст по какому-то условию - это не ужас?
            Ответить
            • Ну это safe cast такой
              Считай это не просто условием, а такой вот идиомой.
              Ответить
          • ширше думай.. a если будет f() + "ing" ?
            Ответить
            • Тогда проверки не будет, увы
              Ответить
            • Есть type guards в тсе
              Ответить
            • Если мы вывели тип для f() и там получился string, то не вижу проблемы...

              Да и один хер конкатенация чего-то со строкой всегда строка.
              Ответить
              • не тип, а значение

                ты не понял его видимо
                if (typeof arg === (sosat() + ebat())) {
                        // We know this is a хуйзнаетчто now
                        print(<string>arg);
                    }
                Ответить
                • Тип возвращаемого значения является частью типа функции.

                  З.Ы. А, поняла о чём ты, вдруг f() возвращает не "str".
                  Ответить
                  • обновил сообщение, проверь
                    Ответить
                    • Ну да, если там не константа, то облом.

                      Но с другой стороны, если мы докажем, что sosat() + ebat() всегда возвращает "string", то всё будет ок. Но TS не Coq чтобы такие пруфы писать, конечно.
                      Ответить
    • для любителей говнеца... мне имплементировать такой код в нативе?

      type Shape =
          | { kind: "circle", radius: number }
          | { kind: "square", sideLength: number };
      
      function area(shape: Shape): number {
          const isCircle = shape.kind === "circle";
          if (isCircle) {
              // We know we have a circle here!
              return Math.PI * shape.radius ** 2;
          }
          else {
              // We know we're left with a square here!
              return shape.sideLength ** 2;
          }
      }
      Ответить
    • > print(<string>arg);

      Теперь понятно как на свет рождаются недотупизированные говноязыки...

      Царь был прав. LLVM зло, порождающее гроздья скриптухи.
      Ответить
      • В TS всё нормально же
        Ответить
        • За исключением того, что это надстройка над JS.
          Ответить
          • С типизацией у TS всё хорошо же, я об этом.
            Безопасные касты там есть.
            Ответить
        • > TS

          Ты опять хочешь стриггерить ДжоДжочку?
          Ответить
          • Я не виноват, что небинарные гомогеи зашкварили все буквы
            Ответить
        • > if (typeof arg === "string") {
          > print(<string>arg);
          > }

          Это нормально?

          Даже в майкомирке могут нормально:
          https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-7.0/pattern-matching
          Ответить
          • Я думаю да, если каст убрать.

            Мы сделали рантайм проверку, теперь внутри этого блока мы в компайлтайме знаем тип и можем его юзать.

            Это можно даже обобщить на какие-то произвольные предикаты.
            Ответить
            • >Это можно даже обобщить на какие-то произвольные предикаты.
              function isMakaka(obezjana:Any) obezjana is Makaka {
                ///
              }
              Ответить
            • это супер - квантовая физика отдыхает :)
              Ответить
          • Это говно ASD просто недоделал пока, а не тайпскрипт.
            В тайпскрипте было бы так
            if (typeof arg === "string") {
               console.log(arg.indexOf('q')); //тут компилятор знает, что это строка
            } else if (typeof arg === "number") {
               console.log(4 * arg); //тут он знает, что это number
            }
            Ответить
          • компайлер легко может этот код сделать просто он не будет работать если "string" заменить на "var_s" ... вообще это оптимизатор может легко прохавать и убрать херню.
            Ответить
    • То ли дело "D"
      import std.stdio;
      import std.traits;
      
      void foo(T)(T arg)
      {
        if (isSomeString!T) {
          writeln(arg);
        }
      }
      
      void main()
      {
        foo("Hello");
        foo(1);
        writeln("done");
      }


      https://wandbox.org/permlink/mcdl44HFj3knVSzT
      Ответить
      • Да и «Nim» не отстаёт:
        import typetraits
        
        proc kok[T](arg: T) = 
          if (arg.type.name == "string"): 
            echo arg 
        
        kok("hellow")
        kok(1)
        kok("done")


        https://play.nim-lang.org/#ix=3vHu
        Ответить
        • как ним чистит память?
          Ответить
          • Есть GC, есть RC, есть RC с GC, чтобы циклические дрочки ловить и есть -gc:none, чтобы программировать МИКРОКОНТРОЛЛЕР и всякую питушню перфомансную. В общем всё супер классно: можно писать и как на плюсах, и как на скриптушне, и как на перфомансной скриптушне.
            Ответить
      • А в D есть смарт касты?
        Ответить
        • Не знаю что такое "смарт касты", но RTTI там есть. Какую-то хуйню с типами можно и чисто в компилтайме вполне наметушить
          Ответить
          • > Смарт касты

            Представь, что у тебя есть функция, принимающая "string".
            Я могу написать

            if (something instanceof String) {
                functionThatAcceptsString(something);
              }
            
            if (something instanceof Int) {
                functionThatAcceptsInt(something);
              }


            то есть явно кастить не нужно: компилятор сам приводит тип
            Ответить
            • > if (something instanceof Int) {
              > functionThatAcceptsInt(something);

              Т.е. something это некая строка, и эта хрень проверяет, можно ли something распарсить как Int? И тогда эту хуйню как Int передают в такую-то функцию? Да, такую хуйню определенно можно наметушить через mixin-ы, хотя может быть и более простой способ.
              Ответить
              • нет, something это указатель на какой-то объект, и проверяется, что это указатель на int
                знание о типе объекта (RTTI) есть в рантайме конечно.
                Ответить
                • Тип something на этапе компиляции известен или нет? Если известен, это банально решается.
                  https://wandbox.org/permlink/vLXXX7XcedqkS2zF (по сути это как крестопарашный шаблон)

                  Если неизвестен, это тоже решается, но это уже надо дрочиться с тем, как там этот тип в рантайме разковыривать и как его автокастить.
                  Ответить
                  • Тип становится известен потому что я его проверил.

                    Пример из TS
                    if (typeof foo === "string") { //это волшебная конструкция, компилятор её понимает
                     foo // тут компилятор знает, что foo это строка
                    }
                    Ответить
                    • Да, такую хуйню точно можно сделать метушней внутри миксина. Но это будет малость неудобно, да и фича какая-то не шибко нужная
                      Ответить
                      • А сколько будет объект минус объект?
                        Ответить
                      • > да и фича какая-то не шибко нужная
                        Ну... Практически во всех современных языках есть. А уж для паттерн-нятчинга эта фича вообще обязательня.
                        sealed interface Expr
                        
                        class Value(val x: Int): Expr
                        class Add(val left: Expr, val right: Expr): Expr
                        
                        fun eval(e: Expr): Int =
                            when(e) {
                                is Value -> e.x
                                is Add -> eval(e.left) + eval(e.right)
                            }
                        
                        fun main(args: Array<String>) {
                            println(eval(Value(16)))  // 16
                            println(eval(
                                Add(
                                    Add(Value(15), Value(25)),
                                    Value(2)
                                )
                            ))  // 42
                        }
                        Ответить
                    • Довольно нужная чтобы два раза не писать одно и тоже как в джаве
                      if (petuh instanceof String) {
                        ((String)petuh).toUpperCase();
                      }
                      Ответить
                      • кстати, шарпейная ide с включённым nullable умеет понимать, что внутри ифа с проверкой на нулл требовать дополнительного анвраппа не нужно
                        Ответить
                      • Это - малозначительная хуйня, которая нахуй не нужна. Можно эту парашу так реализовать кстати:
                        if (petuh instanceof String) {
                        #define petuh ((String)petuh)
                        
                          petuh.toUpperCase();
                        
                        #undef petuh
                        }
                        Ответить
                        • Это очень значительная хуйня, которая очень нужна. Особенно в тех языках, где большинство говна передается по ссылке, которую нужно кастить.

                          Твой define ничем не лучше ручкого каста, даже больше на одну строчку
                          Ответить
                          • Не нужна. Объясни мне, нахуя она мне в контроллерах
                            Ответить
                            • ну вот пишешь под контроллер на тайпскрипте
                              https://www.infoq.com/news/2019/09/static-typescript-msft-paper/

                              дальше продолжать?
                              Ответить
                              • >ну вот пишешь под контроллер на тайпскрипте

                                Нахуя? Ты мне конкретные кейсы покажи, чтоб я пожалел что этой фичи нет. А не то, что мелкомягкие что-то там высрали
                                Ответить
                                • Я тебе уже привел конкретные кейсы, я не знаю как еще объяснить

                                  Без смарткастов код может выглядеть так (пример на жабе, но не суть)
                                  String title = "";
                                  if (obj instance Button) {
                                    title = ((Button)obj).getLabel();
                                  }
                                  if (obj instance Slider) {
                                    title = ((Slider)obj).getPosition();
                                  }
                                  if (obj instance String) {
                                    title = (String)obj;
                                  }
                                  if (obj instance Socket) {
                                    title = ((Socket)obj).getSocketName();
                                  }


                                  Теперь тоже самое со смарт кастами

                                  String title = "";
                                  if (obj instance Button) {
                                    title = obj.getLabel();
                                  }
                                  if (obj instance Slider) {
                                    title = obj.getPosition();
                                  }
                                  if (obj instance String) {
                                    title = obj;
                                  }
                                  if (obj instance Socket) {
                                    title = obj.getSocketName();
                                  }


                                  Видишь разницу?
                                  Ответить
                                  • Какое еще нахуй "instance"? У меня нет никаких "instance", понимаешь? Я могу структуру сделать, а в структуре у меня может быть юнион на всякую хуйню, и какой-то элемент этой структуры будет говорить, интерпретируем мы этот юнион как такую хуйню, или как такую хуйню, или еще какую-то хуйню, ОК, допустим.Проблема в том, что

                                    1) Такой код в контроллерах не встречается почти никогда. Зачем мне передавать или ту или ту хуйню куда-то там? Я отлично знаю, что куда зачем я передаю.

                                    2) Если и встречается, то руками прописать касты это фигня, потому что такого кода будет МАЛО.

                                    3) Если его вдруг будет МНОГО, можно это дело банально препроцессить, т.е. например за-shadow-ить переменную новой переменной с тем же именем внутри скоупа этого if, которой будет присвоен каст этой хуйни с нужным юнионом, и всё блядь
                                    Ответить
                                    • Хорошо, я понял: safe cast -- ненужная хуйня, потому что она не нужна в коде на "си" под контроллеры.

                                      (хотя я вполне могу представить себе такой код)
                                      if (sock->type == AF_INET) {
                                        ((struct sockaddr_in*)sock)->...
                                      }


                                      Осталось узнать зачем мне нужны контроллеры.
                                      У меня вот ни одного нету
                                      Ответить
                                      • > Осталось узнать зачем мне нужны контроллеры.
                                        > У меня вот ни одного нету

                                        Фитнес-трекеры или смарт-часы у тебя есть какие-нибудь?
                                        Ответить
                                        • У меня ничего нету, кстати)
                                          Ответить
                                          • Но такая хуйня много у кого есть. Можешь посмотреть по знакомым айтишникам. А там как раз те самые контроллеры.
                                            Ответить
                                            • я купил несколько лет назад смартвотчи от гнусмаса

                                              начал с ними бегать

                                              пришлось сдать обратно, потому что они теряли gps в чистом поле и дистанцию засчитывали в двойном объёме

                                              это те контроллеры или более лучшие?
                                              Ответить
                                              • Если это часы с Tizen то это не те контроллеры, с которыми я имею дело. В моих контроллерах нет никакого MMU и нет никакого Linux на борту, и поэтому они энергоэффективнее.

                                                А потеря GPS в чистом поле может быть как программным, так и аппаратным просчетом, я их прошивки не реверсил.
                                                Ответить
                                                • приведи пример умных часов без "Linux" на борту
                                                  Ответить
                                                  • Apple watch?
                                                    Ответить
                                                  • > приведи пример умных часов без "Linux" на борту

                                                    Если надо чтоб "без \"Linux\"" то очевидно что можешь взять "Apple Watch"

                                                    А вообще, что есть "умные часы" и чем они отличаются от "фитнес трекера"? Фитнес-трекеров без Linux более чем дофига. Часы с Pebble OS были например (Pebble OS это модифицированная версия FreeRTOS). В носимой хуйне от Fitbit например какая-то Fitbit OS.
                                                    Ответить
                                                    • > что есть "умные часы" и чем они отличаются от "фитнес трекера"?

                                                      - всем? просто они оказались никому нахуй не нужны и маркетологи срочно их перепрофилировали в "фитнес-трекеры с выебонами"
                                                      Ответить
                                                      • В этом фитнес-треккере нету никаких контроллеров

                                                        https://tinyurl.com/3tanbhz4
                                                        Ответить
                                                        • не открывается
                                                          Ответить
                                                          • Яндекс в Украине забанен
                                                            Ответить
                                                          • https://i0.wp.com/sektascience.com/wp-content/uploads/2021/07/scale_1200.jpg?resize=475%2C380&ssl=1
                                                            Ответить
                                                            • педометер?

                                                              это что-то для осетинских врачей
                                                              Ответить
                                                              • Как в том анекдоте

                                                                Ты зачем детского врача избил?

                                                                Ну я нему сына привел, и говорю: "ты доктор?", а он говорит: "я педиатр".

                                                                Я говорю: "что??"

                                                                А он: "я педиатр-гомеопат, показывайте ребенка"
                                                                Ответить
                                                        • Думала, по ссылке https://www.youtube.com/watch?v=A0314QOklz8
                                                          Ответить
                                          • > Осталось узнать зачем мне нужны контроллеры.
                                            > У меня вот ни одного нету

                                            Ну и у тебя наверняка есть какой-то контроллер в стиральной машине например. Или в кондиционере. Или в посудомоечной машине. Или в микроволновке.

                                            У тебя есть что-то из этого?
                                            Ответить
                                            • У меня очень древняя стиралка и такая же древняя микроволновка (им лет по семнадцать), а посудомойка и вовсе сломалась)

                                              Вот куплю новую, и там, вероятно будет контроллер
                                              Ответить
                                              • а что девушки говорят, когда приходят к тебе в гости?
                                                Ответить
                                                • Они приходят постирать, посуду помыть, или еду разогреть?
                                                  Ответить
                                                  • ты кто?
                                                    Ответить
                                                    • Человек.
                                                      Ответить
                                                      • а я у гиббона спрашивал, чего ты встреваешь?
                                                        Ответить
                                                        • Ну как, узнал ответ от гиббона?
                                                          Ответить
                                                          • - Я так раньше никогда не делала. Мне понравилось. А тебее? - сказала она после того, как я влил в неё свой заряд и, уставший, уселся прямо на ковролин на полу кабинета.
                                                            Ответить
                                              • кстати, вопрос без подвоха

                                                а пластик в такой старой технике не вреден для здоровья?
                                                Ответить
                                                • Да вроде нет. Там внутри СВЧ особо и пластика нет
                                                  Ответить
                                              • > У меня очень древняя стиралка и такая же древняя микроволновка (им лет по семнадцать)

                                                Даже там наверняка есть контроллеры. Они есть даже в не сильно древних ЭЛТ телевизорах, управляемых через ИК-пульт.
                                                Ответить
                                                • О, у меня точно есть контроллер в мониторе, даже в древнем ЭЛТ был, потому что он мультисинк
                                                  Ответить
                                      • > Хорошо, я понял: safe cast -- ненужная хуйня, потому что она не нужна в коде на "си" под контроллеры.

                                        А еще и потому, что легко накостыливается препроцессингом. А еще и потому, что для "safe cast" нужен RTTI о котором знает некий рантайм языка, а это уже анскилл.
                                        Ответить
                                        • >А еще и потому, что легко накостыливается препроцессингом.
                                          в джаве нет препроцессинга

                                          > RTTI о котором знает некий рантайм языка, а это уже анскилл.
                                          невозможно выпилить RTTI из джавы
                                          Ответить
                                          • > в джаве нет препроцессинга

                                            В т.ч. поэтому жаба говно

                                            > невозможно выпилить RTTI из джавы

                                            В т.ч. поэтому жаба говно
                                            Ответить
                                            • > В т.ч. поэтому жаба говно
                                              Ты же сам не любил препроцессинг без доступа к AST, или я путаю?

                                              > В т.ч. поэтому жаба говно
                                              Ну тут ничего не поделаешь: так она устроена
                                              Ответить
                                              • > Ты же сам не любил препроцессинг без доступа к AST, или я путаю?

                                                Без препроцессинга и без доступа к AST - однозначно хуже, чем с препроцессингом и без доступа к AST.
                                                Ответить
                                                • Это правда

                                                  Как и то, что поддержка чего либо часто встречающегося в языке лучше, чем кастомный напирдолинг этого препроцессором
                                                  Ответить
                                                  • > Как и то, что поддержка чего либо часто встречающегося в языке лучше, чем кастомный напирдолинг этого препроцессором

                                                    А вот с этим можно и поспорить. Все фичи в язык все равно не запихнуть, и поэтому лучше делать более общие мета-механизмы(речь не о тупом препроцессоре из Си), на которых эти фичи можно достраивать.

                                                    Вот например что можно в "D" делать: https://forum.dlang.org/thread/[email protected]
                                                    Ответить
                                                    • Если что-то не сделать частью языка, то каждый реализует это по своему, и потом будет десять несовместимых между собой способов
                                                      Ответить
                                                      • > Если что-то не сделать частью языка, то каждый реализует это по своему, и потом будет десять несовместимых между собой способов

                                                        Эту хуйню уже обсуждали, моё мнение можно прочитать в https://govnokod.ru/27340#comment621664

                                                        Не вижу смысла повторяться.
                                                        Ответить
                                                        • > Не вижу смысла повторяться

                                                          На этом говнокод держится!
                                                          Ответить
                                        • А что Вам больше всего нравится в работе?
                                          Как типично проявляется творческий процесс?
                                          Ответить
                                    • https://www.meme-arsenal.com/memes/ce98362999f5e15987bb80aa7ab15936.jpg
                                      Ответить
                                    • > Какое еще нахуй "instance"? У меня нет никаких "instance", понимаешь?
                                      > Я могу структуру сделать, а в структуре у меня может быть юнион на всякую хуйню

                                      Какое столкновение двух культур )))

                                      Впрочем у него даже на жабе это не скомпилится из-за ряда ошибок :)
                                      Ответить
                                  • > Каких ошибок?
                                    Во-первых instanceof

                                    Компилябельнее будет.
                                    if (obj instanceof Button button) {
                                      title = button.getLabel();
                                    }
                                    
                                    if (obj instanceof Slider slider) {
                                      position = slider.getPosition();
                                    }

                                    А во-вторых это всё последствия наследушной дрисни.
                                    Ответить
                                    • > if (obj instanceof Button button) {
                                      Это какой-то свежачок

                                      >последствия наследушной дрисни.

                                      Так я и не спорю. Я и с тем согласен, что в сишке это нахуй не нужно.

                                      Просто всем остоебенили цепочки инстансофоф в жабах, так что смарткаст это хорошо
                                      Ответить
                                      • > > if (obj instanceof Button button) {
                                        > Это какой-то свежачок

                                        Я не знаю как по-другому заставить это скомпилиться.
                                        obj вряд ли сожет магически поменять тип по ходу метода.
                                        Ответить
                                        • Я приводил пример того, как могла бы работать safe cast.

                                          В котлине, например, можно именно так
                                          if (foo is String) {
                                            // тут foo строка
                                          }


                                          и в TS тоже
                                          if (typeof foo === "string") {
                                            // тут foo строка
                                          }
                                          Ответить
                                          • > Я приводил пример того, как могла бы работать safe cast.

                                            А я привёл реальный пример :)

                                            Object obj1 = "1";
                                            if (obj1 instanceof String str) {
                                                System.out.printf("String: %s\n", str);
                                            } else {
                                                System.out.printf("Not a string\n");
                                            }
                                            
                                            Object obj2 = 1;
                                            if (obj2 instanceof Integer i) {
                                                System.out.printf("Integer: %s\n", i);
                                            } else {
                                                System.out.printf("Not an Integer\n");
                                            }

                                            Компилять в последних jdk.
                                            Ответить
                                            • Я не умею в современную жабу, у нас вообще 11-я.
                                              А в какой момент а жабе завезли safe cast? в 15-й?

                                              И ты кстати не ответил, чего ты сейчас вместо жабы делаешь?
                                              Ответить
                                            • Будем честны, Java - говно и не нужна. Не трогайте её лучше, уже ничего не исправить.
                                              Ответить
                                              • > Java - говно и не нужна

                                                Я бы выразился аккуратнее: Областей, в которых Java является удачным решением, на самом деле гораздо меньше, чем принято считать;) может быть их и вовсе нет
                                                Ответить
                                            • опять годноту у С# а украли
                                              Ответить
                                              • А не говноту, случайно?
                                                Ответить
                                                • все приветствуется если 1) надо меньше писать буковок 2) это красиво
                                                  Ответить
                              • Ну и мне совершенно очевидно, что GC-нутое говно с ФП-питушней под эмбеддед подходит достаточно хуево. Они в контроллеры свой говношарп еще впихнуть хотели, но закономерно лососнули тунцов.
                                Ответить
                                • >Ну и мне совершенно очевидно, что GC-нутое говно с ФП-питушней под эмбеддед подходит достаточно хуево.

                                  А вот в это я охотно верю.

                                  Возможно по этому safe cast завезли в Kotlin, а не в си
                                  Ответить
                                  • его не завзли в си только потому что он был придуман еще когда не было программистов или их обьем работы был минимален
                                    Ответить
                                    • Потому что в Си эта поебень нахуй не нужна.
                                      Ответить
                                    • В "си" трудно было бы завезти safe cast, потому что там нет оператора "instanceof" и "typeid".

                                      Оно там реализуется вручную через какое-то отдельное поле
                                      Ответить
                                      • Рассмотрим этот говнопример
                                        Object obj1 = "1";
                                        if (obj1 instanceof String str) {
                                            System.out.printf("String: %s\n", str);
                                        } else {
                                            System.out.printf("Not a string\n");
                                        }
                                        
                                        Object obj2 = 1;
                                        if (obj2 instanceof Integer i) {
                                            System.out.printf("Integer: %s\n", i);
                                        } else {
                                            System.out.printf("Not an Integer\n");
                                        }


                                        Перепишем его на Си. https://wandbox.org/permlink/2bwulZWGLGvBRvVx

                                        Проблемы?
                                        Ответить
                                        • а на ассемблере напишешь?
                                          Ответить
                                          • Написать-то смогу, если препроцессор ассемблера достаточно мощный. Думаю, FASM это вполне позволит сделать.

                                            Но бесплатно я такой хуйней заниматься естественно не буду.
                                            Ответить
                                            • >Но бесплатно я такой хуйней заниматься естественно не буду

                                              странно, я думал тебе делать нехуй
                                              Ответить
                                              • > странно, я думал тебе делать нехуй

                                                Чтобы эту хуйню сделать на асме, мне надо будет дохуя потратить времени на вникание во всякую хуйню, а "как это сделать через сишный препроцессор" мне сразу было более-менее очевидно
                                                Ответить
                                        • Я вас конечно поддержал в #27559.

                                          Но всё-таки не нужно портировать скриптуху 1-в-1 и уподобляться в мыслях своих джавашкам: начинать хранить инфу о типах в рантайме. Зачем? Зачем?

                                          Если мы знаем тип на этапе конпеляции, то можно там же проставить статические диспатчи.

                                          Соответственно уродливая псевдоrtti жавашня struct Object вообще не нужна.
                                          На этом выезжают крестошаблоны.

                                          PS Минус не мой.
                                          Ответить
                                          • > Если мы знаем тип на этапе конпеляции, то можно там же проставить статические диспатчи.
                                            >
                                            > Соответственно уродливая псевдоrtti жавашня struct Object вообще не нужна.
                                            > На этом выезжают крестошаблоны.

                                            Тогда на такой хуйне не сделать какой-нибудь говнопарсер питушни. Разве что компилтайм-парсер можно сделать. А крестошаблоны - говно ансикльное, ибо только в компилтайме отработать могут.

                                            И для реализации компилтайм говнопарсера для PCRE надо кодогенерить такую вот ебучую дрисню:
                                            https://github.com/hanickadot/compile-time-regular-expressions/blob/57d50773f7a9ef42667c8464bccf686699b47387/include/ctre/pcre.hpp
                                            Ответить
                                            • 95% использований кастов и instanceof исходят от
                                              а) анскильности кодера
                                              б) ограниченности языка, который не может пронести инфу о типе через цепочку методов

                                              Любимое развлечение жавухов (и скриптухов в целом): напихать питушни в женерик контейнер, педерать куда-то далеко, а потом руками доставать говно из типа и диспатчить его.

                                              Альтернатива: оопушня и полиморфизм. С таблицами виртуальных питухов и просадкой пирфоманса.

                                              Возьмем в качестве люстрации классический printf:
                                              void printf(String format, Object... varargs)
                                              
                                              printf("%s %d","str", 42)


                                              Уверен что в его реализации полно instanceof.

                                              Но эти проверки на типы нужны только потому что компилятор внутри printf не может понять что нулевой элемент строка, а первый число. Отсюда необходимость в хранении этой инфы в рантайме.

                                              Чем лучше в языке типизация, тем меньше нужно такой скучной блевотины.

                                              Чем хуже — тем больше её нужно. Так например в js хороший тон всяких апи брутфорсить тип каждого аргумента: что это строка, массив, число или объект.

                                              Если типизация будет идеальной инфа о типе в рантайме будет не нужна и мы получим... Сишку с её zero cost и голыми данными.

                                              > Разве что компилтайм-парсер можно сделать
                                              Компайл-тайм это ведь хорошо.
                                              std::is_base_of хорошая весчь, как и прочие type_traits.

                                              Правда в Сишке проблема базового типа снята, т.к. система типов одноуровневая, без наследования.
                                              Ответить
                                              • >Альтернатива: оопушня и полиморфизм.

                                                Маттерн патчинг заебись же, как в котлине
                                                Ответить
                                        • > uint8_t Obj_t;

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

                                          Если ты считаешь что это хорошо -- писать вручную с ноля одно и тоже каждый раз -- то мне трудно будет объяснить, почему это плохо
                                          Ответить
                                          • > Проблемы в том, что ты будешь каждый раз писать это вручную с ноля. Для каждого проекта. Для каждой структуры.

                                            Зато у меня нет намертво встроенного говноRTTI который хер знает как работает, и хер знает какой там оверхед.
                                            Ответить
                                            • Любая абстракция со словом "Runtime" обычно не zero cost.

                                              Ничего не поделаешь
                                              Ответить
                          • > Твой define ничем не лучше ручкого каста, даже больше на одну строчку

                            Этот "#define" может автогенериться в скоупе этого if
                            Т.е. грубо говоря "if (petuh instanceof String) {" трансформируется в
                            if (petuh instanceof String) {
                            #define petuh ((String)petuh)


                            и закрывающая скобка "}"
                            трансформируется в
                            #undef petuh
                            }
                            Ответить
                        • о.. хорошая идея ... буду знать :)
                          Ответить
                    • > // тут компилятор знает, что foo это строка

                      Хорошо, что в «TS» нету goto и что typeof и оператор сравнения нельзя перегрузить.
                      Ответить
      • я себе глаза вилкой выковырял после просмотра такого синтаксиса.
        Ответить
        • А от сравнений через "===" ты глаза выковырять не хочешь? Или от каста через какие-то блядь угловые скобочки <string> ?
          Ответить
          • к "===" я уже привык. а <string> скоро упроститься
            Ответить
            • > к "===" я уже привык
              Ну и к тому синтаксису привык бы.

              К любому говну можно привыкнуть. Программисты на «пхп» подтвердят.
              Ответить
    • APPLYING FOR: PROJECT ENGINEER, MAINTENANCE ENGINEER, QA/QC ENGINEER, DESIGN ENGINEER



      SHAIKH
      Email : [email protected], [email protected]

      Respected Sir,

      Career Statement:

      Extensive Project Engineer, Maintenance Engineer, QA/QC Engineer, Design Engineer with knowledge of handling projects. Seeking a responsible position as a engineer with a view to Utilize my professional experience in a renowned organization

      Summary of Qualification:

      · I have huge years of work experience in UAE, Saudi Arabia, Kuwait & Qatar.
      · Ability to identify Objective and scope of the project as well as project segment
      · Ability to work in a fast-paced environment
      · Comprehensive knowledge of advanced engineering concepts, calculating and complete surveying project
      · Coordinate with team to check the ongoing project status and development
      · Excellent communication & leadership skills
      · Excellent management skills and remarkable ability to contribute towards team performance
      · Resourceful team player and keen attention to detail
      · Skilled at adopting modern technologies
      · Skilled in the methods and strategies of collecting and analyzing information and data required

      Email : [email protected], [email protected]
      Joining period : Immediately.


      Your's


      Shaikh.
      Ответить
    • Заслуживают внимания также "навозные ванны". Вот как описывает способ приготовления таких ванн один из орловских сотрудников, при простуде. "На полу, в избе ставят большую кадушку, сыплют туда овсяной мякины, лошадиного помета, соли, иногда еще и коновал дает какого-нибудь снадобья. Потом кипятят воду, льют ее в кадушку и накрывают веретьем, чтобы все это распарилось. Когда вода мало-мальски остынет, больного сажают в кадушку, накрывают веретьем, свитами и т. п., оставляя незакрытою одну голову и держать так часа 3—4. Вынув из кадушки, больного кладут на печку и накрывают дерюгой, чтобы не остыл, и дают выпить стакан водки, настоянной на стручках". Подобным же образом приготовляется в Орловской губернии навозная ванна для детей.
      Ответить
      • 3-4 не охуеешь парится?
        Ответить
      • Сколько терминов, даже не все из них до конца понятны. Что-то вроде диалога геймеров или школьников с дноклами.
        Ответить
      • > Мне вообще кажется, что какашки, умеют думать, у них есть свои семьи, города, чувства, не смывайте их в унитаз, лучше приютите у себя, говорите с ними, ласкайте их.... А вчера в ванной, мне преснился чудный сон, как будто я нырнул в море, и оно прератилось в говно, рыбы, водоросли, медузы, все из говна, даже небо, даже Аллах.
        Ответить

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