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

    +2

    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
    14. 14
    15. 15
    type int = 1;
    
    function main() {
        let result: [value: int, done: boolean];
    
        let v: int | undefined;
        v = 1;
    
        result = [v, false];
    
        print(result[0], result[1]);
    
        assert(result[0] == 1);
        assert(result[1] == false);
    }

    опа. новый говнокодец подоспел. а кто знает какая проблема решалась в данном коде?

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

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

    • дампик https://pastebin.com/1f2twzHX
      Ответить
    • и результат работы
      C:\temp>C:\dev\TypeScriptCompiler\__build\tsc\bin\tsc.exe --emit=jit C:\temp\1.ts 
      1 false
      done.
      Ответить
    • > let result: [value: int, done: boolean];

      Видимо это "структура".

      > let v: int | undefined;

      Видимо это "юнион".

      И че? В чем тут проблема? Тут опять говноRTTI нужно, да?
      Ответить
      • >> let v: int | undefined;
        > Видимо это "юнион"

        Больше похоже на интовый указатель.
        Может быть undefined (NULL), а может указывать на число.
        Ответить
        • > Больше похоже на интовый указатель.

          Ну вот эта херня с палочкой это именно union. https://www.educba.com/typescript-union-types/

          Вероятно, есть такой тип "undefined", единственное значение которого - "undefined". Или может это просто тип сам по себе, без значений и возможности чего-то там хранить. Типа "let v: int | undefined;" это значит что "там или int хуйня с каким-то значением, или undefined где нет нихуя". Такая вот скриптуха анскильная
          Ответить
          • В нескриптуховых языках я сам решаю, на основании какой хуйни я интерпретирую union как такой-то или такой-то тип, и мне для этого не нужна особая поддержка говнорантайма с хуй знает какими накладными расходами на это говно.
            Ответить
      • > let result: [value: int, done: boolean];
        это кортеж / тупла. Первый элемент int (в TS нет такого типа, хз откуда он его высрал), второй boolean

        >Видимо это "юнион".
        так точно
        Ответить
        • > это кортеж / тупла.

          И чем "кортеж / тупла" отличается от структур в C?
          Ответить
          • У структур есть имя поля, а у кортежа вместо него номер.
            Ответить
            • И все? Почему это имеет значение?
              Ответить
              • Ну еще в скриптушне по кортежу можно итерироваться, что довольно тупо кмк.
                В целом это одно и тоже, конечно: некая совокупность данных гетерогенная.
                Кортеж наверное чуть ма-те-ма-тичнее
                Ответить
                • Тупизация в этом тупосрипте - анскильное говно даже с точки зрения ма-те-матиков. Ибо говно анскильное, построенное на жабаскриптушне

                  https://stackoverflow.com/questions/66119146/typescript-how-to-make-generic-type-to-infer-inside-a-function

                  > As mentioned in the comments, TypeScript doesn't really have support for dependent types, especially not when it comes to type checking the implementation of a function whose call signature implies such a dependency
                  Ответить
                  • По сравнению с мейнстрим говном у него прекрасная типизация.
                    У кого жемчуг мелок, у кого суп жидок

                    Кстати, как с зависимыми типами дела у сишки?
                    Ответить
                    • > у кого суп жидок

                      У кого стул жидок.
                      Ответить
                    • > По сравнению с мейнстрим говном у него прекрасная типизация.

                      По сравнению с говном с параши, у полупротухшей колбасы из мяса крыс прекрасный вкус
                      Ответить
                      • Но ведь у сишки даже выводов типа нет. Значит ли это, что сишка это говно из параши?
                        Ответить
                        • Кококококак это нет? Диалект «K&R» выводит «int», если тип не указан.
                          Ответить
                          • Мы забрызгивали Натку спермой с головы до ног! Буквально! Сперма была у нее на лице, на животе, на ногах, на волосах…
                            Ответить
                          • Это не совсем вывод типов, потому что возвращаемое значение на зависит от написанного в теле кода
                            Ответить
                            • Кстати, есть язык программирования «FOCAL» (его почему-то в народе называли «Факолл»), в котором любое значение имеет тип «плавающий питух». А ещё есть языки программирования, в которых любое «скалярное» значение — это строка. Удобно.

                              P.S. А в «TCL», кажется, и «нескалярное» значение — тоже строка.
                              Ответить
                              • Я знаю еще один язык, где любое _числовое_ значение это питух. Под него даже процессоры оптимизируют

                                >любое «скалярное» значение — это строка
                                В таких языках обычно есть отдельный оператор для сравнения строк, потому что "==" может не сработать, и совсем не по той причине, по какой он не работает в си и жабе
                                Ответить
                                • > Я знаю еще один язык, где любое _числовое_ значение это питух
                                  Странный какой язык. Для питухов, няверное.
                                  Ответить
                                  • Не знаю, питухи ли программисты на нём, но они почему-то любят «Арчлинукс».
                                    Ответить
                                • > где любое _числовое_ значение это питух

                                  Кажется, я его знаю. Это тот, в котором ломаешь голову, почему только старшие 53 значащих бита целого числа сохраняются, а в младших мусор? И из-за которого «Твиттер» в своём API возвращает айдишник пользователя два раза: один раз числом, второй раз — строкой на случай, если в числовом представлении младшие биты затёрлись?
                                  Ответить
                                  • > где любое _числовое_ значение это питух

                                    Если речь о жс, то там давно уже не всё так просто.
                                    Питух, питухом а Uint32Array плав. питухом не пахнет.

                                    > только старшие 53 значащих бита
                                    1<<32 == 1
                                    1<<31 == -2147483648
                                    Ответить
                                    • >Если речь о жс, то там давно уже не всё так просто.


                                      Семантически это так. Что там JIT делает мы не знаем, это implementation details. Так-то и в перле число не обязано строкой храниться на самом-то деле.

                                      >Uint32Array
                                      Это объект же, причем тут числа?
                                      Ответить
                                      • 1<<32 == 1
                                        1.1 << 31 == -2147483648
                                        1.5 << 2 == 4


                                        Это был намёк на 32-битные целые.
                                        Если бы там были плавающие, то сдвиг бы работал совершенно иначе.

                                        >Что там JIT делает мы не знаем, это implementation details

                                        Зато мы знаем что пишут в Стандарте, а там целая секция посвящена целочисленным преобразованиям и операциям:
                                        https://262.ecma-international.org/5.1/#sec-9.5
                                        Ответить
                                        • Дык он берет флоат, и конвертит его в 32 битное целое

                                          А про тип там чётко сказано

                                          https://262.ecma-international.org/5.1/#sec-8.5

                                          he Number type has exactly 18437736874454810627 (that is, 264−253+3) values, representing the double-precision 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic, except that the 9007199254740990 (that is, 253−2) distinct “Not-a-Number” values of the IEEE Standard are represented in ECMAScript as a single special NaN value
                                          Ответить
                                      • И ещё смешной вопрос.
                                        Зачем они сделали parseInt (string , radix) и parseFloat (string)?

                                        The parseInt function produces an integer value dictated by interpretation of the contents of the string argument according to the specified radix.

                                        Там на самом деле куча мест где есть целые: битовая арифметика, чары, индексы массивов.
                                        Ответить
                                      • > Это объект же, причем тут числа?
                                        The Int8Array typed array represents an array of twos-complement 8-bit signed integers. The contents are initialized to 0. Once established, you can reference elements in the array using the object's methods, or using standard array index syntax (that is, using bracket notation).

                                        > любое _числовое_ значение это питух
                                        Там давно и вполне легально завезены целые инты.
                                        var x=Int8Array.of(128)

                                        x[0]
                                        128

                                        ++x[0]
                                        -127

                                        x[0]/=3 //возвращает -42.3333333333, однако в x[0]==-42
                                        Ответить
                                        • class Petuh{};
                                          const a = [new Petuh()];
                                           // a is an array of petuhs

                                          но это не значит, что JS появился тип "petuh"


                                          >var x=Int8Array.of(128)
                                          > var x=Int8Array.of(128)
                                          > x[0]
                                          128
                                          > typeof x[0]
                                          'number' <---------

                                          А что же такое number? Может быть int?

                                          Нет:
                                          Number type has exactly 18437736874454810627 (that is, 264−253+3) values, representing the double-precision 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic, except that the 9007199254740990 (that is, 253−2) distinct “Not-a-Number” values of the IEEE Standard are represented in ECMAScript as a single special NaN value
                                          Ответить
                                          • Получи, мразота анскильная.

                                            var x=1200000000000000000000000000000000000n;
                                            
                                            typeof x
                                            "bigint"
                                            Ответить
                                            • [quote]
                                              Number и BigInt нельзя смешивать в операциях — они должны быть приведены к тому же типу.
                                              [/quote]

                                              какой пиздец ))

                                              Впрочем, принято: кроме питуха есть еще и bigint
                                              Ответить
                                              • Да, на первый взгляд говно.
                                                Но если подумать: явные преобразования лучше неявных, да и без длинных целых это был язык-инвалид.

                                                Потому новшества ECMAScript 2020 у меня практически не вызывают неприятия. Всего пару фич, и в целом безобидных. На фоне пиздеца что они натворили в ES6.

                                                1024-- должно быть радуется ?? и ?.
                                                Ответить
                                              • Они довольно здраво аргументировали почему не стоит мешать bigint c number:

                                                Literals for BigInts are similar to Number literals, but followed by n. They can be written with binary, octal or hexadecimal notation, e.g., 0x100n. Legacy octal syntax (0640) is not allowed, only new-style (0o064n).

                                                The choice of BigInt comes from an attempt to preserve user intuition about the lack of compatibility of BigInt with things that are currently based on Numbers. Because implicit coercions lead to TypeErrors, the guidance is that existing users of Numbers should stay with Numbers if it works for the application, and only large usages need to upgrade to BigInt



                                                A key design decision is to disallow mixed operations between BigInts and Numbers. The driving factor: Any implicit coercions would lose information.

                                                When adding two values of different numeric types, between large integers and floating point numbers, the mathematical value of the result may be outside of the domain of either. For example, (2n**53n + 1n) + 0.5 has a value which cannot be accurately represented in either range.
                                                Floating point arithmetic is not the exact mathematical value, but at least it is well-defined by IEEE 754. The entire aim of introducing BigInt is, on the other hand, to make a way to preserve integer precision of larger values.


                                                >So, if mixed-precision were allowed, an innocent calculation such as 2n ** 53n + 1 would produce the float 2**53--defeating the core functionality of this feature.


                                                https://github.com/tc39/proposal-bigint/blob/master/ADVANCED.md

                                                На самом деле я даже не могу найти где бы они обосрались: сравнения bigint и number работают, восьмишковый багор исправили, битовые операции тоже в порядке.

                                                И кольцо чисел выходит замкнутое.
                                                Ответить
                                                • Нет, главное к подружкам своим, таким же потаскушкам, она меня не ревновала, к проституткам каких иногда приводил прямо домой, в те дни, когда она была «занята» – тоже, а тут, к матери родной ревнует!
                                                  Ответить
                                                • Примерно как A, но без π. Или S. Но тем не менее, это ten. Шрифт остается нетронутым.
                                                  Ответить
                        • > даже выводов типа нет

                          typeof()

                          > Значит ли это, что сишка это говно из параши?

                          Да. И кресты кстати тоже говно. https://govnokod.ru/23287#comment389547
                          Ответить
                          • нестандартное гццговно
                            Ответить
                            • «Царь» говорил, что другие конпеляторы не нужны.
                              Ответить
                              • Пруф.
                                Ответить
                                • https://govnokod.ru/13162#comment180629
                                  https://govnokod.xyz/_13162/#comment-179312

                                  https://govnokod.ru/13162#comment180645
                                  https://govnokod.xyz/_13162/#comment-179270

                                  https://govnokod.ru/13162#comment180653
                                  https://govnokod.xyz/_13162/#comment-179272

                                  https://govnokod.ru/13162#comment180656
                                  https://govnokod.xyz/_13162/#comment-179273

                                  И самое главное:
                                  https://govnokod.ru/13180#comment181058
                                  https://govnokod.xyz/_13180/#comment-180012

                                  «Контрольные: Любой конпелятор умеет typeof(), ибо если он его не умеет - этот конпелятор не может проверять типы - а это требование стандарта. Поэтмоу какт олько гцц появился, да и любой другйо вменяемый конпелятор - в нём появился тайпов.»

                                  Итого из слов «Царя» следует, что любой нормальный компилятор должен поддерживать гэцэцизмы.
                                  Ответить
                                  • Какой багор )))
                                    Ответить
                                    • Чуть не пропустил шедевр:
                                      «На одной архитектуре у УБ обычно есть одна единственная разумная реализация - её придерживаются все нормальный конпеляторы. Остальные конпеляторы - говно, и за Си-конпелятор не считается.

                                      В мире сейчас один единственный Си-конпелятор - ГЦЦ. Сейчас он является почти эталонной реализацией сишки и всех фич. Остальные нормальные конпеляторы, аля icc, питух-шланг берут в основу своего поведения - поведение гцц. В 80% им его даже не надо брать, ибо в нормальных реализациях поведение одинакого.»


                                      https://govnokod.ru/13323#comment186862

                                      https://govnokod.xyz/_13323/#comment-185467

                                      Поискал ещё его комментарии. Выяснил, что «msvc», «icc» и «шланг» — говно, потому что не на 100% совместимы с «гцц».
                                      Ответить
                                      • > На одной архитектуре у УБ обычно есть одна единственная разумная реализация
                                        >>УБ
                                        >>разумная реализация

                                        Интересно как разумно реализовать такое?
                                        ptr++ = *++ptr + *ptr++;
                                        Ответить
                                      • > Остальные нормальные конпеляторы, аля icc, питух-шланг берут в основу своего поведения - поведение гцц.

                                        Не, ну он как обычно прав.
                                        Ответить
                        • >Но ведь у сишки даже выводов типа нет.

                          //Есть. Наследованный из B.
                          //Сишка сама выведет типы
                          main(argc){
                              printf("%d",argc);
                              return 0;
                          }
                          Ответить
                          • Это не совсем вывод типов, потому что возвращаемое значение на зависит от написанного в теле функции кода
                            Ответить
                          • это default type. а не то что он вывел
                            Ответить
                            • Царь считает, что другие типы не нужны. Точнее, он ещё массивы интов допускает.
                              Ответить
                              • Инт — единственныйнужный тип данных, а массив — единственная полезняя структура данных.
                                Ответить
                                • Единственная нужна "структуру данных" - это массив, и то массив не упал, ибо есть указатель. Т.е. у тебя есть только указатель. Вот только с указателями Люди и работаю, создавая из них то, что им надо.
                                  Ответить
                              • «Царь» - тупой питух.
                                Ответить
                                • И что мы в конечном итоге имеем? Человек(имеющий мозг в районе <1-2%, 99% животных, которые обитают тут не попадают под этот 1% людей, из которых программистов намного меньше 1%), который в совершенстве знает массивы и указатели - уже знает все мыслимые и не мыслимые структуры данных автоматом.

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

                                    Вот ты знаешь массивы? Значит ли это, что ты автоматически знаешь и префиксное дерево, например?
                                    Ответить
                    • > Кстати, как с зависимыми типами дела у сишки?

                      На том уровне абстракций завипы не нужны. Но это можно решить, например я не так давно скидывал про такую хуйню в https://govnokod.ru/27541
                      Ответить
                      • А как ты определяешь на каком уровне нужны какие абстракции?
                        Ответить
                        • Я это определяю на основе того, испытываю ли я потребность в таких-то абстракциях, работая на таком-то уровне, или не испытываю.
                          Ответить
        • "type int = 1" тебе о чем нит говорит?
          Ответить
          • говорит, что я слепошарый. извини.

            Это literal type получается. Используется, втч, для эмуляции паттерн матчинга
            Ответить
    • > int | undefined

      Забавное описание nullаble.
      Это и в оригинальном ts так можно писать?
      Ответить
      • не совсем nullable, ведь null это отдельный тип в JS/TS

        В самом TS так писать можно, конечно
        Ответить
      • nullable в TS это "<data type> | null"
        Ответить
        • Про | null я в курсе.

          > int | undefined
          Потому я и спрашиваю, в ts тоже так можно?
          Ответить
          • можно даже так "number | undefined | null"
            Ответить
            • Какая обратная совместимость )))
              typeof null
              "object"
              
              typeof void 0
              "undefined"
              
              typeof 0
              "number"
              
              typeof {}
              "object"
              Ответить
              • >typeof null
                https://stackoverflow.com/questions/18808226/why-is-typeof-null-object

                Это обсёр.
                Ответить
                • Я в курсе. И Крокфорда тоже в своё время изучал.

                  Лулз в том что эта питушня появилась из-за тех же проблем что и у ОПа.

                  Так вот, я хотел указать что если Сишнику вдруг не хватает битов (см. спор j123123 и ASD_77) то он может хранить флаг и в младших битах адреса

                  I take a look at the C code of typeof to better explain why typeof null results in 'object'.

                  In JavaScript, typeof null is 'object', which incorrectly suggests that null is an object (it isn’t, it’s a primitive value, consult my blog post on categorizing values for details). This is a bug and one that unfortunately can’t be fixed, because it would break existing code. Let’s explore the history of this bug.

                  The “typeof null” bug is a remnant from the first version of JavaScript. In this version, values were stored in 32 bit units, which consisted of a small type tag (1–3 bits) and the actual data of the value. The type tags were stored in the lower bits of the units. There were five of them:

                  000: object. The data is a reference to an object.
                  1: int. The data is a 31 bit signed integer.
                  010: double. The data is a reference to a double floating point number.
                  100: string. The data is a reference to a string.
                  110: boolean. The data is a boolean.

                  That is, the lowest bit was either one, then the type tag was only one bit long. Or it was zero, then the type tag was three bits in length, providing two additional bits, for four types.

                  Two values were special:

                  undefined (JSVAL_VOID) was the integer −230 (a number outside the integer range).
                  null (JSVAL_NULL) was the machine code NULL pointer. Or: an object type tag plus a reference that is zero.

                  It should now be obvious why typeof thought that null was an object: it examined its type tag and the type tag said “object”. The following is the engine’s code for typeof.
                  Ответить
              • > typeof void 0
                А тут что плохого с typeof? void просто зря сделали.
                Ответить
              • тут все логично. void <expression> - это результат undefined т.к. идет обнуление типа. в TS там сейчас unknown любят юзать. null - это default референс на объект - т.е. только объекты референсы в java/script
                Ответить
    • все молодцы - заметили "<data type> или undefined". Но мало кто понял в чем проблема. Отвечаю - а сколько байтиков надо чтобы хранить данные для "<data type> или undefined" ? и если tuple [int | undefined, bool] не ложиться ровно в tuple [ int , bool ] . Вот эта проблема и решалась
      Ответить
      • В Си у меня такой проблемы нет, поэтому я за Си.
        Ответить
        • с какого хрена у тебя нет... еще как есть. struct undefined<T> { bool isUndefined, T value }. больше по данным чем "T value". Очнись
          Ответить
        • или пример где C аналог "<value type> | undefined" с таким же размером как <value type> в студию. (т.е. sizeof (<value type> | undefined) == sizeof (<value type>)
          Ответить
          • енум же.
            А вот где он будет хранить тип это другой вопрос
            Ответить
            • enum это будет в чистом TS т.к. там только два значения. а моем случае это <int: 0-2^32> + 1 значение undefined
              Ответить
              • + один бит под undefined? Или что?
                Ответить
                • а после aligned?
                  Ответить
                  • Потом парень заканчивал, снимал презик, бросал его на пол, а эта самка ожидала следующего героя. Иногда за вечер через Наткину вагину «проходило» до двух десятков парней!
                    Ответить
                  • Смотря как алгнить. Я могу вообще тип в отдельной переменной хранить, у меня полный контроль.
                    Ответить
                    • - Сидим, пьём, а Артур Атарбекович в Лондоне важные переговоры ведёт. Если у него всё получиться, то для нас будет очень хорошо.
                      Ответить
                      • большой сочной саркомы тебе, да поскорее
                        Ответить
                        • Эта история произошла со мной, когда мне едва исполнилось 18 лет. Я рос без отца, наверное, поэтому мне не хватало твердости в характере. Я был очень податливым и легко поддавался чужому влиянию.
                          Ответить
                        • Не отвечай уёбку.
                          Ответить
                          • -Да, мамочка, ты классная блядь! Юрка принялся целовать маму взасос…
                            Ответить
          • > (т.е. sizeof (<value type> | undefined) == sizeof (<value type>)

            Обычный сишный юнион. А как хранить тип - можно в энуме, можно в компилтайме все знать. Много вариантов
            Ответить
            • а enum у тебя на столько суров что не требует памяти для хранения?
              Ответить
              • Из кoлeи выбилo кaпитaльнo и, приeхaв нa aвтoбусe oбрaтнo в Oзёры, купил в мaгaзинe вoдки, нaпился дoмa, в oднo лицo, дo свинскoгo сoстoяния.
                Ответить
              • А у тебя RTTI памяти не требует, да?
                Ответить
                • Потом парень заканчивал, снимал презик, бросал его на пол, а эта самка ожидала следующего героя. Иногда за вечер через Наткину вагину «проходило» до двух десятков парней!
                  Ответить
                • у меня все по честному "int | undefined" больше чем "int"
                  Ответить
                  • На краю кровати безжизненным телом лежала Настя ее всю в сенниках, ссадинах и кровоподтеках трахал какай-то пидар.
                    Ответить
                  • Там честные алгебраические типы данных?
                    Можно впетушить тип вида int | array<int> | tuple<int,int,array<double>> (псевдокод)?
                    Ответить
    • я хотела буквально всё - хотела попробовать член, отдаться в киску и всё такое. Я очень часто плакала когда была дома, по этому поводу, потому что желания и секс - фантазии буквально разрывали мой мозг, и только когда я мастурбировала, организм успокаивался и затихало на время дичайшее желание.
      Ответить

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