ЙажаСценарий / Говнокод #27550 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
function main() {
    let user = {
        firstName: "John",
        sayHi() {
            print(`Hello, ${this.firstName}!`);
        },
    };

    user.sayHi();

    print("done.");
}

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

Запостил: ASD_77 ASD_77, (Updated )

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

  • результат работы

    C:\temp>C:\dev\TypeScriptCompiler\__build\tsc\bin\tsc.exe --emit=jit C:\temp\1.ts 
    Hello, John!
    done.
    Ответить
        • ну да только для С/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 и правда такой?
                Ответить
                • Мощность, как мы помним - это работа, поделенная на время, а значит времени нихуя нет и дедлайн уже на носу, работать надо прямо сейчас и работать много. Гибкий это видимо что эластиксерч можно запрашивать.
                  Ответить
            • > Мы должны прийти к чему-то вроде "Алекса, автоматизируй мне бизнес"

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

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

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

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

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

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

            https://www.youtube.com/watch?v=h7XtOlQB6oY
            Ответить
      • Именно поэтому я за «Говнокод», питушок.
        Ответить
      • Смешной фильм, заставит смеяться с первых минут! [[
        Ответить
    • Будто бы больше нечего обсуждать кроме этого. Зачем мне в контроллеры всякие там типизированные костылики к жабаскрипту и c анскильным GC?
      Ответить
      • затем что тут пока нет GC но будет. и тут свобода - управляй памятью сам хоть тресни. это лучше чем С++ и мощьнее
        Ответить
          • есть. но нужно много буковок кликать что бы что-то получилось. ssd большого надо для хранения. Читабильность -10
            Ответить
            • Ничего не понял

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

                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. мне надо просто оптимизацию врубить - но руки не доходят. как сделаю сравню нормально
                                Ответить
                                  • Это не совсем скриптуха: 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 это free. можно писать так что бы выделить массик
            type int = 1; // сделать тип int
            const arr = new int[10]; // выделить 10 int через маллок
            delete arr; // удалить через free
            Ответить
                  • А 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 или еще под какую-то хуйню
              Ответить
          • адреса делаются через массивы типа 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 в котором первое слово это размер
              Ответить
                • Оно же в «С++» компилируется. Значит, там будет так же как и в «С++»?
                  Ответить
                  • Нет, это он раньше в "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
      Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8