Size: a a a

2020 October 18

SA

Sokolov Andrew in Lisp Forever
пихаешь типа
источник

SA

Sokolov Andrew in Lisp Forever
call и дальше адрес той другой функции
источник

SA

Sokolov Andrew in Lisp Forever
оно идет туда
источник

SA

Sokolov Andrew in Lisp Forever
и там начинает выполнять
источник

SA

Sokolov Andrew in Lisp Forever
а для инлайна
источник

SA

Sokolov Andrew in Lisp Forever
вместо call пихаются собственно
источник

SA

Sokolov Andrew in Lisp Forever
сами инструкции
источник

a

akater in Lisp Forever
Картинка стоит тысячи слов:
CL-USER> (defun f0 (x) (1+ x))

F0
CL-USER> (declaim (inline f1))
(F1)
CL-USER> (defun f1 (x) (1+ x))
F1
CL-USER> (disassemble (defun g0 (x) (1+ (f0 x))))
; disassembly for G0
; Size: 59 bytes. Origin: #x531AC381                          ; G0
; 81:       498B4510         MOV RAX, [R13+16]                ; thread.binding-stack-pointer
; 85:       488945F8         MOV [RBP-8], RAX
; 89:       4883EC10         SUB RSP, 16
; 8D:       488B55F0         MOV RDX, [RBP-16]
; 91:       B902000000       MOV ECX, 2
; 96:       48892C24         MOV [RSP], RBP
; 9A:       488BEC           MOV RBP, RSP
; 9D:       B862E84750       MOV EAX, #x5047E862              ; #<FDEFN F0>
; A2:       FFD0             CALL RAX
; A4:       480F42E3         CMOVB RSP, RBX
; A8:       BF02000000       MOV EDI, 2
; AD:       FF142500010052   CALL QWORD PTR [#x52000100]      ; GENERIC-+
; B4:       488BE5           MOV RSP, RBP
; B7:       F8               CLC
; B8:       5D               POP RBP
; B9:       C3               RET
; BA:       CC10             INT3 16                          ; Invalid argument count trap
NIL
CL-USER> (disassemble (defun g1 (x) (1+ (f1 x))))
; disassembly for G1
; Size: 44 bytes. Origin: #x53104991                          ; G1
; 91:       498B4510         MOV RAX, [R13+16]                ; thread.binding-stack-pointer
; 95:       488945F8         MOV [RBP-8], RAX
; 99:       488B55F0         MOV RDX, [RBP-16]
; 9D:       BF02000000       MOV EDI, 2
; A2:       FF142500010052   CALL QWORD PTR [#x52000100]      ; GENERIC-+
; A9:       BF02000000       MOV EDI, 2
; AE:       FF142500010052   CALL QWORD PTR [#x52000100]      ; GENERIC-+
; B5:       488BE5           MOV RSP, RBP
; B8:       F8               CLC
; B9:       5D               POP RBP
; BA:       C3               RET
; BB:       CC10             INT3 16                          ; Invalid argument count trap
NIL
CL-USER>
источник

a

akater in Lisp Forever
G0 подсматривает определение F0 динамически.  G1 не подсматривает определение F1 динамически.
CL-USER> (defun f0 (x) (+ 2 x))
WARNING: redefining COMMON-LISP-USER::F0 in DEFUN
F0
CL-USER> (g0 0)
3
CL-USER> (defun f1 (x) (+ 2 x))
WARNING: redefining COMMON-LISP-USER::F1 in DEFUN
F1
CL-USER> (g1 0)
2
источник

SA

Sokolov Andrew in Lisp Forever
ну да
источник

SA

Sokolov Andrew in Lisp Forever
потому что вызов то по адресу а че там лежит это можно поменять
источник

SA

Sokolov Andrew in Lisp Forever
а когда все вкомпилено в 1 кучу
источник

SA

Sokolov Andrew in Lisp Forever
то
источник

a

anton in Lisp Forever
но в плюсах inline означает другое
источник

a

akater in Lisp Forever
anton
но в плюсах inline означает другое
В плюсах хоть что-то динамически подсматривается?  (Я не знаю.)
источник

a

anton in Lisp Forever
akater
В плюсах хоть что-то динамически подсматривается?  (Я не знаю.)
я не большой спец... таблица виртуальных методов наверное
источник
2020 October 19

V(

Vλadimir (Hawthorne ... in Lisp Forever
прикольно, спасибо за разъяснение!
источник

a

akater in Lisp Forever
anton
я не большой спец... таблица виртуальных методов наверное
Раз функции не подсматриваются динамически, то неудивительно, что inline значит что-то другое.
источник

a

akater in Lisp Forever
Космонлисповский inline это по-моему как раз то, что первое приходит в голову при попытке придать смысл понятию inline.  Но это возможно только потому что тут и более фундаметальные вещи сделаны по такому принципу — в частности, динамический lookup функций по имени, по умолчанию.
источник

SA

Sokolov Andrew in Lisp Forever
ммм
источник