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

    +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
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    function main()
    {
    	f1();
    }
    
    function f1(a = 10)
    {    
        return a;
    }
    
    // code for 1
    
    module @"1.ts"  {
      func @main() {
        %c0_i32 = constant 0 : i32
        %0 = typescript.undef : i32
        %1 = call @f1(%c0_i32, %0) : (i32, i32) -> i32
        return
      }
      func private @f1(%arg0: i32, %arg1: i32) -> i32 attributes {OptionalFrom = 1 : i8} {
        %c10_i32 = constant 10 : i32
        %c1_i32 = constant 1 : i32
        %0 = alloca() : memref<i32>
        %1 = cmpi ult, %arg0, %c1_i32 : i32
        %2 = scf.if %1 -> (i32) {
          scf.yield %c10_i32 : i32
        } else {
          scf.yield %arg1 : i32
        }
        store %2, %0[] : memref<i32>
        %3 = load %0[] : memref<i32>
        return %3 : i32
      }
    }
    
    // code for 2
    
    ; ModuleID = 'LLVMDialectModule'
    source_filename = "LLVMDialectModule"
    target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
    target triple = "x86_64-pc-windows-msvc"
    
    declare i8* @malloc(i64)
    
    declare void @free(i8*)
    
    define void @main() !dbg !3 {
      %1 = call i32 @f1(i32 0, i32 undef), !dbg !7
      ret void, !dbg !9
    }
    
    define i32 @f1(i32 %0, i32 %1) !dbg !10 {
      %3 = alloca i32, i64 ptrtoint (i32* getelementptr (i32, i32* null, i64 1) to i64), align 4, !dbg !11
      %4 = insertvalue { i32*, i32*, i64 } undef, i32* %3, 0, !dbg !11
      %5 = insertvalue { i32*, i32*, i64 } %4, i32* %3, 1, !dbg !11
      %6 = insertvalue { i32*, i32*, i64 } %5, i64 0, 2, !dbg !11
      %7 = icmp ult i32 %0, 1, !dbg !11
      br i1 %7, label %8, label %9, !dbg !11
    
    8:                                                ; preds = %2
      br label %10, !dbg !11
    
    9:                                                ; preds = %2
      br label %10, !dbg !11
    
    10:                                               ; preds = %8, %9
      %11 = phi i32 [ %1, %9 ], [ 10, %8 ]
      br label %12, !dbg !11
    
    12:                                               ; preds = %10
      %13 = extractvalue { i32*, i32*, i64 } %6, 1, !dbg !11
      store i32 %11, i32* %13, align 4, !dbg !11
      %14 = extractvalue { i32*, i32*, i64 } %6, 1, !dbg !11
      %15 = load i32, i32* %14, align 4, !dbg !11
      ret i32 %15, !dbg !13
    }

    История о том как я компайлер писал. (предисторию знают думаю все). Посмотрите на код и сравните с ужасным кодом на С. Это простенький javascript который тоже може быть скомпиленным в исполняемый год. а что для этого надо. просто несколько шагов.

    1) компилим код через чудо компилятор tsc.exe --emit=mlir-affine c:\1.ts



    а дальше может получить LLVM IL который можно компилировать

    2) компилим код через чудо компилятор tsc.exe --emit=mlir-llvm c:\1.ts



    а далее компилим код

    llc.exe --filetype=obj -o=out.o 1.ll


    запускаем a.exe

    и оно работает :)

    Запостил: ASD_77, 19 Февраля 2021

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

    • Такое мне по нраву!
      Ответить
    • пили уже пуллреквест в хром блядь! пусть сайты компилятся прямо у пользователя и больше не тормозят
      Ответить
      • Кстати, HTML и CSS в LLVM уже научились конпелять? Чтобы быстрее лейауты раскидывало по экрану и стили вычисляло.
        Ответить
        • помоему angular 10 уже такое делает только на жабаскрипте
          Ответить
          • Пока меня не было, я слушал песни болгарских исполнителей.
            Ответить
      • configure://google.com
        make://google.com
        make_install://google.com
        Ответить
        • header file "html5.1.h" not found
          Ответить
          • хорошо хоть, не conio!
            Ответить
            • хорошо хоть не conardio!
              Ответить
            • Мой любимый conio
              Ответить
              • любишь конио?
                давай тогда писать псевдографическую игрушку на борланд c 3 под DOS?
                Ответить
                • На паскале тогда уж.
                  Ответить
                  • не путай конио и црт
                    Ответить
                    • А, тут про коньио речь.
                      Ответить
                      • почему модуль назвали по другому, кстати?
                        Ответить
                        • Совместимость с конпелятором от M$ походу.

                          А паскалю не с чем было совмещаться.
                          Ответить
                          • лол

                            Библиотечные функции, объявленные в conio.h, весьма различались в зависимости от компилятора. Первоначально реализованные в Microsoft Visual C++ различные функции привязывались напрямую к нескольким первым функциям DOS, связанным с прерыванием 21h. Но библиотека, поставляемая с Turbo C++ и Borland C++, не использует DOS API, а вместо этого напрямую обращается к видеопамяти для вывода информации и использования сигналов прерывания BIOS.
                            Ответить
                • любишь конио?
                  люби и яйца лакать
                  Ответить
                  • в смысле голосовать за python eggs?
                    так вроде уже яйца на колёса поменяли

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

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