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

    +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
    function main() {
        let user = {
            firstName: "John",
            sayHi() {
                print(`Hello, ${this.firstName}!`);
            },
        };
    
        user.sayHi();
    
        print("done.");
    }

    как тебе такое Илон Маск?

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

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

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

      C:\temp>C:\dev\TypeScriptCompiler\__build\tsc\bin\tsc.exe --emit=jit C:\temp\1.ts 
      Hello, John!
      done.
      Ответить
    • Анонимные классы?
      Ответить
      • Это обычкновенные JS объекты , классов тут нет
        Ответить
        • Точно. Так ещё во времена ES3 писали.
          Ответить
          • ну да только для С/C++ это очень абнормальный стиль писания
            Ответить
            • В этом есть свои плюсы, если язык поддерживает структурную типизацию, как TS.
              В C++/Java/C#/Kotlin нужно фигачить интерфейсы и адаптеры, а в JS/TS не нужно.
              Ответить
              • для этого я и пишу TS AOT компайлер что бы не ебать моск с ограничениями С и С++
                Ответить
              • > если язык поддерживает структурную типизацию

                А если язык поддерживает гомоиконность, ты сам себе можешь сделать поддержку структурной типизации, и не только структурной, а еще и хуй знает какой типизации с произвольными правилами сопоставления и автоматического преобразования типов.
                Ответить
        • js настолько объебаный, что вообще-то могут быть, гуглить hidden classes
          Ответить
          • Ну да: сначала сделаем хуёвый язык, апотом начнем затачивать под него компилятор
            Ответить
            • > хуёвый язык
              Язык с широкими возможностями.

              > апотом начнем затачивать под него компилятор
              И это хорошо. Это тот подход универсальности, который планировали завезти в SQL, но до конца не осилили.

              Лучше затачивать компилятор под язык, чем программистов под язык как это делают в C++.
              Это будущее программирования. Мы должны прийти к чему-то вроде "Алекса, автоматизируй мне бизнес", а не пердолиться с
              1. формулированием требований в ТЗ и переводом намерений на канцелярский язык
              2. разработкой архитектуры и переводом канцелярского языка на язык абстракций
              3. нафигачиванием этого в файлы с кодом и переводом с языка абстракций на язык программирования
              4. отладкой особенностей перевода с языка программирования на машинный язык.
              Ответить
              • >Язык с широкими возможностями.
                у PHP возможности шире

                >Лучше затачивать компилятор под язык, чем программистов

                Предлагаю писать на бейсике
                Ответить
                • Мне в PHP/C++ нравится питушня с массивами, когда из-за значения по умолчанию становится удобно пользоваться:
                  xs[key]++; // в std::map
                  $xs[] = 1; // точно не помню, какое-то такое напитушивание массива


                  > Предлагаю писать на бейсике
                  Я уже изучил JS. И то не весь, т.к. он постоянно обновляется.
                  Зачем другие языки, когда есть божественный JS?
                  Ответить
              • > Язык с широкими возможностями.

                Какой волшебный эвфемизм

                Примерно как «сотрудник с большим нереализованным потенциалом»
                Ответить
                • Пыхеры говорят, что PHP язык мощный и гибкий. Мне с ними хочется поспорить, но я не могу: ведь я не знаю что такое "гибкий" и "мощный".

                  Вдруг PHP и правда такой?
                  Ответить
                  • Мощность, как мы помним - это работа, поделенная на время, а значит времени нихуя нет и дедлайн уже на носу, работать надо прямо сейчас и работать много. Гибкий это видимо что эластиксерч можно запрашивать.
                    Ответить
              • > Мы должны прийти к чему-то вроде "Алекса, автоматизируй мне бизнес"

                – ой дурак
                Ответить
          • Возможно, это просто крестота в гуглагском У8
            Ответить
    • где народ? где флуд?
      Ответить
      • s/let/const/
        Ответить
      • В оффтоп-тредах. Люди приходят сюда не ИТ-питушню обсуждать, а вентиляторы из линолеума, это же очевидно.

        P.S. Видео на тему вентилятора из линолеума: https://youtu.be/CUq82yscPdA
        Ответить
        • хм а я думал сайт для говнокода ...
          Ответить
        • ебать, цыган жив еще

          надо бы на канал креосана заглянуть
          Ответить
          • Цыган жив и пилит интересную питушню.

            Креосан ещё не сгнил, но близится к тому. Разбавил питушню экспериментов походами (в т.ч. в чернобыльскую зону), чтобы пришла смотреть куча школьников. Начал сотрудничать с разными поехавшими братишками, которые творят всякий бред на камеру. Всякие постановочные охи-вздохи и концовки промежуточных роликов "и вот тут раздался страшный звук, братишка упал и затих; что же случилось? смотри в следующей серии".
            Ответить
            • > Креосан ещё не сгнил, но близится к тому.

              Там с самого начала было понятно что очень быстро съедет в говноблогерство

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

              https://www.youtube.com/watch?v=h7XtOlQB6oY
              Ответить
              • Во, нашел наконец

                https://youtu.be/YgxQeCcm2dg

                Какая восьмёрка )))
                Ответить
                • >восьмёрка
                  джек восьмёркин американец
                  Ответить
        • Именно поэтому я за «Говнокод», питушок.
          Ответить
        • Смешной фильм, заставит смеяться с первых минут! [[
          Ответить
          • > [[

            А это ещё что означает?
            Ответить
            • Смайлик означает "так смешно, что спазмы челюсти"
              Ответить
      • Будто бы больше нечего обсуждать кроме этого. Зачем мне в контроллеры всякие там типизированные костылики к жабаскрипту и c анскильным GC?
        Ответить
        • затем что тут пока нет GC но будет. и тут свобода - управляй памятью сам хоть тресни. это лучше чем С++ и мощьнее
          Ответить
          • А чот, в С++ какой-то свободы нет?
            Ответить
            • есть. но нужно много буковок кликать что бы что-то получилось. ssd большого надо для хранения. Читабильность -10
              Ответить
              • Ничего не понял

                Приведи конкретный пример свободы, которая есть в JS, но которой нету в С++
                Ответить
                • Стандарт не в ISO а значит бесплатный
                  Ответить
                • вот тебе код. напиши тотже на С++ и сравни кол-во символов которые ты использовал... а результат размера проги будет почти одинаковый

                  function main() {
                      const a = {
                          msg: "Hello",
                          m: function() {
                              print(this.msg);
                          },
                      };
                  
                      a.m();
                  }
                  Ответить
                  • #include <iostream>
                    
                    
                    int main()
                    {
                    	const struct
                    	{
                    		const char* msg = "Hello";
                    
                    		void m() const
                    		{
                    			std::cout << this->msg;
                    		}
                    	} a;
                    	a.m();
                    }


                    Ну да, совсем другое дело же
                    Это свобода?
                    Ответить
                    • a[prompt('введите имя поля', 'm')] = 'pitux';
                      if (typeof a.m == 'function') a.m();
                      Ответить
                    • у меня 149 символов а у вас при том же коде 166. у меня размер программы 113кб а у вас 230кб
                      Ответить
                      • давайте тогда скорость исполнения сравним
                        Ответить
                        • у меня чуть быстрее - потому что вместо std::cout стоит printf - он априори быстрее. а LLVM дает оптимизацию такую как и для С++
                          Ответить
                          • правда?
                            $ time ./a.out 
                            Hello
                            real    0m0.002s
                            user    0m0.001s
                            sys     0m0.001s
                            $ time node new.js
                            
                            real    0m0.042s
                            user    0m0.041s
                            sys     0m0.002s


                            в JS в сорок раз медленее

                            покажи свой результат для компиляции
                            Ответить
                            • конечно вот мой код out.exe - мой код . а a.exe это с++

                              PS C:\temp\MLIR_to_exe> Measure-Command { .\out.exe }


                              Days : 0
                              Hours : 0
                              Minutes : 0
                              Seconds : 0
                              Milliseconds : 41
                              Ticks : 415781
                              TotalDays : 4.81228009259259E-07
                              TotalHours : 1.15494722222222E-05
                              TotalMinutes : 0.000692968333333333
                              TotalSeconds : 0.0415781
                              TotalMilliseconds : 41.5781



                              PS C:\temp\MLIR_to_exe> Measure-Command { .\a.exe }


                              Days : 0
                              Hours : 0
                              Minutes : 0
                              Seconds : 0
                              Milliseconds : 63
                              Ticks : 633683
                              TotalDays : 7.33429398148148E-07
                              TotalHours : 1.76023055555556E-05
                              TotalMinutes : 0.00105613833333333
                              TotalSeconds : 0.0633683
                              TotalMilliseconds : 63.3683
                              Ответить
                              • Объясни пожалуйста, почему у уменя на 3770K (это i7 ivy bridge 2012-го года) С++ дает такой результат (студя 2017 release x64 сборка)
                                Days              : 0
                                Hours             : 0
                                Minutes           : 0
                                Seconds           : 0
                                Milliseconds      : 0
                                Ticks             : 1196
                                TotalDays         : 1,38425925925926E-09
                                TotalHours        : 3,32222222222222E-08
                                TotalMinutes      : 1,99333333333333E-06
                                TotalSeconds      : 0,0001196
                                TotalMilliseconds : 0,1196

                                а у тебя она дает в 630 больше времени

                                Что у тебя за компилятор, что за процессор, и как ты собирал?
                                Ответить
                                • ты наверно оптимизацию врубил на -O3. а у меня -O0. мне надо просто оптимизацию врубить - но руки не доходят. как сделаю сравню нормально
                                  Ответить
                                  • > бенчмарки где C++ "сливает" скриптухе
                                    > -O0
                                    Ответить
                                    • Это не совсем скриптуха: ASD пишет компилятор TS под LLVM.

                                      Но я всё равно не понимаю почему у него такие результаты, когда у меня на процессоре 2012-го года они намного более быстрые.

                                      Я собирал "release" на винде конечно, там наверное оптимизации включены
                                      Ответить
                                • не знаю я перекомпилял с оптимизацией и впервый раз было 1000 тиков а потом все равно стало вот так

                                  S C:\temp\MLIR_to_exe> Measure-Command { .\out.exe }


                                  Days : 0
                                  Hours : 0
                                  Minutes : 0
                                  Seconds : 0
                                  Milliseconds : 5
                                  Ticks : 58725
                                  TotalDays : 6.796875E-08
                                  TotalHours : 1.63125E-06
                                  TotalMinutes : 9.7875E-05
                                  TotalSeconds : 0.0058725
                                  TotalMilliseconds : 5.8725



                                  PS C:\temp\MLIR_to_exe> Measure-Command { .\a.exe }


                                  Days : 0
                                  Hours : 0
                                  Minutes : 0
                                  Seconds : 0
                                  Milliseconds : 6
                                  Ticks : 65492
                                  TotalDays : 7.58009259259259E-08
                                  TotalHours : 1.81922222222222E-06
                                  TotalMinutes : 0.000109153333333333
                                  TotalSeconds : 0.0065492
                                  TotalMilliseconds : 6.5492
                                  Ответить
                            • А сколько времени запускается сам процесс (допустим, время работы int main(){ return 0; }) и какой корень из дисперсии времени (допустим, для 20 запусков)?
                              Ответить
                • Свобода не общаться с пенсионерами
                  Ответить
                  • свобода общаться с анскильными питухами, которые в сорок лет решили войти в айти и посмотрели пару видосов про JS
                    Ответить
          • не добавляй. gc для анскильных джаваскриптеров, не умеющих переиспользовать уже выделенную память.
            Ответить
            • +
              Ответить
            • надо ещё и кучу выкинуть. malloc/new для анскильных питухов, которые не осилили подсчёт требуемой памяти на этапе компиляции.
              Ответить
              • вообще учитывая специфику js можно делать memory as a service и просто запрашивать новые чанки по хттп, туда же класть и оттуда же читать.
                Ответить
              • джей циферки вроде так иделает в своих контроллерах
                Ответить
              • > malloc/new для анскильных питухов

                Да. Надо много? mmap/mremap.
                Move за O(1) в отличие от заедушной мрази.

                А new можно вообще как угодно определить, хоть slab, хоть пул. Это абасракция.
                Ответить
          • > тут пока нет GC

            А malloc() и free() есть? А будут ли? А что насчет указателей и адресной арифметики?
            Ответить
            • у тебя есть new и delete
              Ответить
            • new это маллок, а delete это free. можно писать так что бы выделить массик
              type int = 1; // сделать тип int
              const arr = new int[10]; // выделить 10 int через маллок
              delete arr; // удалить через free
              Ответить
              • > new это маллок, а delete это free.

                А что насчет realloc() ?
                Ответить
                • realloc – это когда ты выделяешь память заново.
                  Ответить
                  • Это анскильно и неэффективно.
                    Ответить
                  • Заговно
                    Ответить
                  • realloc для питухов. Цари юзают mremap или стек.
                    Ответить
                    • А realloc может и через remap работать. Мы вроде как-то разбирали, что sbrk уже говно и устарел, и его malloc использует только для мелочи, а для крупных вещей ммапит, ну и ремапит тоже
                      Ответить
                      • Я в курсе. Но это опционально implementation defined.
                        А Цари пишут напрямую, чтобы 100%.

                        >malloc использует только для мелочи
                        А для мелочи есть стек и заранее преаллоцированая память вроде slab.
                        Смысла в malloc не остаётся.
                        Ответить
                        • а malloc же тоже какими-то слабами выделяет память.
                          Если я два раза маллокну по одному байту, он поди страничку сразу выделит, и второй раз уже не полезет

                          > Цари
                          Ну вообще сишкин API это не по царски: нужно дергать API операционки напрямую, да.
                          Ответить
                          • >тоже какими-то слабами выделяет память

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

                              Ну в общем malloc sbrkнет явно не на один байт, хотя надо проверить
                              Ответить
                            • зы: проверил
                              for(int i = 0; i < 100000; i++) {
                                              volatile char* a = malloc(1);
                                              a[0] = 'q';
                                              }

                              brk(0x55d2721ca000)                     = 0x55d2721ca000
                              brk(0x55d2721eb000)                     = 0x55d2721eb000
                              brk(0x55d27220c000)                     = 0x55d27220c000
                              brk(0x55d27222d000)                     = 0x55d27222d000
                              brk(0x55d27224e000)                     = 0x55d27224e000
                              brk(0x55d27226f000)                     = 0x55d27226f000
                              brk(0x55d272290000)                     = 0x55d272290000
                              brk(0x55d2722b1000)                     = 0x55d2722b1000
                              brk(0x55d2722d2000)                     = 0x55d2722d2000
                              brk(0x55d2722f3000)                     = 0x55d2722f3000
                              brk(0x55d272314000)                     = 0x55d272314000
                              итд итп

                              сначала быркало по страничке, потом попоболе

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

                                Потом начинается фрагментация кучи, советы вазьмити другой аллокатор типа jemalloc.

                                Причём колупание в этом дерьме ложится именно на пользователя.

                                Потому либо аллоцировать на стеке, либо выделять постранично (mmap).
                                Ответить
                                • Хуёвый паттерн это выделять по одному байту.

                                  Если я выделю сразу много, то вместо sbrk будет mmap
                                  Ответить
                                  • В смысле одним и тем же маллоком тупо выделять в разных местах блоки совершенно рандомного размера.

                                    Обычно надо или много сразу под какой-то буфер, тогда mmap.
                                    Часто буфер этот буфер под io, тогда профит двойной, т.к. файлы мапятся прямо на память. Или много однотипных объектиков. Тогда slab.

                                    Цари пишут для каждой аллокации оптимально, а не полагаются на эвристики аллокатора.

                                    А лалки везде юзают malloc, а потом ставят -O0 и кричат: «дак я же как Сишка», «йажа сливает кресты в хламину», итд. Причём аллокаторов десятки, один оптимизирован так, другой эдак.
                                    Ответить
                • А что с realloc в C++? С оператором перемещения вообще нет никаких проблем сделать оператор renew.
                  Ответить
                  • ..и вызывать какой конструктор?
                    Ответить
                    • Для новых элементов - конструктор по умолчанию (как в new[]).
                      Для старых элементов - конструктор перемещения.
                      Для бывших элементов - деструктор (как в delete[]).
                      Ответить
              • > type int = 1; // сделать тип int
                > const arr = new int[10]; // выделить 10 int через маллок

                Я не понимаю, зачем тут какие-то "типы". Например, в Си я могу сделать обертку над malloc которой передают количество байт, и она возвращает void указатель, по которому такое-то количество байт доступно

                void *malloc_log(size_t len)
                {
                  fprintf(stderr, "[DBG] malloc_log(%zu)\n", len);
                  void *ptr = malloc(len);
                  if(ptr == NULL)
                  {
                    fprintf(stderr, "[DBG] malloc_log(%zu) failed\n", len);
                  }
                  return ptr;
                }


                И потом уже где-то там это используется под int или под float или еще под какую-то хуйню
                Ответить
                • void это параша
                  Ответить
                  • void это пустота а не параша. Кстати можно сделать парашу с черной дырой https://youtu.be/8HZ4DnVfWYQ?t=119
                    Ответить
                    • Нашёл чем удивить, парашу с чёрной дырой я видел на автококзале в Умани
                      Ответить
                  • Это слабая типизация.
                    Ответить
                    • слабая параша
                      Ответить
                      • Слабая, сильная, строгая

                        Какая параша сегодня ты?
                        Ответить
                        • Я сегодня утиная параша. Это когда пытались сделать слабую строгую типизацию, но случился обсёр.
                          Ответить
                          • >Я сегодня утиная параша.

                            Рэнди развивает интерес к соседскому сараю, пукает и продолжает тем, что наносит вербальные оскорбления соседу (а также пролетавшему мимо вертолёту). Затем сосед признаёт, что он — «однорукий уткоёб» («one-armed duck-fucker»).
                            Ответить
                          • > утиная параша
                            https://cs2.livemaster.ru/storage/f8/f1/9233cfda2f3d747c2c70217c81y1--vintazh-utka-meditsinskaya-rannie-sovety-novaya.jpg

                            Винтаж: Утка медицинская ранние советы новая
                            Ответить
            • адреса делаются через массивы типа a[1] = это тоже что и *(a + 1)
              Ответить
            • вот так можно еще вызывать маллок - но я пока еще не отладил глюк с "type" алиасом

              type int64 = 163245617943825;
              declare function malloc(size: int64): any;
              
              function main() {
              	const b = malloc(10);
              }
              Ответить
              • потом костануть b к int[] и юзать как массив а ля поинтер

                type int = 1;
                const arr = <int[10]>b;  
                const v = arr[2];


                тут одна проблема если не указать <int[10]> а только <int[]> тогда каст пойдет на runtime array в котором первое слово это размер
                Ответить
                • А если я кастую к структуре, то какие там правила alignment-а будут (см https://en.wikipedia.org/wiki/Data_structure_alignment )?

                  А что насчет strict aliasing? Там вообще понятие POD есть в этом тупесрипте?
                  Ответить
                  • Оно же в «С++» компилируется. Значит, там будет так же как и в «С++»?
                    Ответить
                    • Нет, это он раньше в "C++" компилировал, а теперь он через LLVM байткод делает компиляцию в натив.
                      Ответить
                      • А вот «Nim» конпклируется в «Си» и «С++». Значит ли это, что там есть все эти крутые штуки?
                        Ответить
                        • Зависит от того, как он там компилируется.
                          Ответить
                          • В «Nim», кстати, есть флаг «-fno-strict-aliasing»: пишут, что без него программа какая-то работает на 3% медленнее. Так что не такой уж и хуёвый «Nim»!
                            Ответить
                      • llvm заточен под С++ так что там алайнмет по умолчанию ... его руками надо убирать через dense а я этого не делаю
                        Ответить
    • function main() {
          let user = {
              firstName: "John",
              sayHi() {
                  print(`Hello, ${this.firstName}!`);
              },
          };
          const hi  = user.sayHi
          hi();
      
          print("done.");
      }


      сконпеляется?
      Ответить
      • ...
        Ответить
      • а тут сработает потому что const это хитрая конструкция - надо сделать let и передать в функцию - что бы потерять this
        Ответить
      • потом допищу что бы через логику trampoline вызывало и не теряло this
        Ответить

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