- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 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
JloJle4Ka 19.02.2021 19:13 # 0
Fike 19.02.2021 19:41 # +4
bormand 19.02.2021 19:43 # 0
ASD_77 19.02.2021 20:40 # 0
hormand 20.02.2021 22:00 # 0
Desktop 19.02.2021 19:44 # 0
make://google.com
make_install://google.com
Fike 19.02.2021 19:47 # 0
Desktop 19.02.2021 19:50 # +1
Fike 19.02.2021 19:58 # 0
bormand 19.02.2021 20:05 # +3
MAKAKA 20.02.2021 02:28 # +1
фу фу фу
Desktop 19.02.2021 20:10 # +2
guest6 19.02.2021 20:03 # 0
MAPTbIwKA 19.02.2021 20:59 # 0
давай тогда писать псевдографическую игрушку на борланд c 3 под DOS?
bormand 20.02.2021 02:29 # 0
MAKAKA 20.02.2021 02:31 # 0
bormand 20.02.2021 02:31 # 0
MAKAKA 20.02.2021 02:36 # 0
bormand 20.02.2021 02:38 # 0
А паскалю не с чем было совмещаться.
MAKAKA 20.02.2021 02:43 # 0
Библиотечные функции, объявленные в conio.h, весьма различались в зависимости от компилятора. Первоначально реализованные в Microsoft Visual C++ различные функции привязывались напрямую к нескольким первым функциям DOS, связанным с прерыванием 21h. Но библиотека, поставляемая с Turbo C++ и Borland C++, не использует DOS API, а вместо этого напрямую обращается к видеопамяти для вывода информации и использования сигналов прерывания BIOS.
bormand 20.02.2021 02:46 # 0
Desktop 20.02.2021 02:37 # 0
люби и яйца лакать
MAKAKA 20.02.2021 02:38 # 0
так вроде уже яйца на колёса поменяли
а ты катись, колесо
Desktop 20.02.2021 02:39 # +1
MAKAKA 20.02.2021 02:42 # 0
в отличие, например, от перла
ASD_77 19.02.2021 20:56 # 0
Desktop 19.02.2021 20:59 # 0
bormand 19.02.2021 20:59 # +1
ASD_77 19.02.2021 21:12 # 0
bormand 20.02.2021 01:53 # 0