История изменений
Исправление x4DA, (текущая версия) :
Хаскель компилируется в сишку, поэтому такие вещи там возможны.
У SBCL свой оптимизирующий компилятор в ISA, поэтому сишка ему вообще не упала.
Про инлайнинг сишки в CL я слышал только у ECL, который тоже компилится в Си.
(defun sample (x)
(ffi:c-inline (n1 n2) (:int :int) (values :int :int) "{
int n1 = #0, n2 = #1, out1 = 0, out2 = 1;
while (n1 <= n2) {
out1 += n1;
out2 *= n1;
n1++;
}
@(return 0)= out1;
@(return 1)= out2;
}"
:side-effects nil))
Есть реализации scheme, которые компилятся в Си, например chicken, там есть директива inline для этих вещей. http://wiki.call-cc.org/eggref/4/inline
Исправление x4DA, :
Хаскель компилируется в сишку, поэтому такие вещи там возможны.
У SBCL свой оптимизирующий компилятор в ISA, поэтому сишка ему вообще не упала.
Про инлайнинг сишки в CL я слышал только у ECL, который тоже компилится в Си.
(defun sample (x)
(ffi:c-inline (n1 n2) (:int :int) (values :int :int) "{
int n1 = #0, n2 = #1, out1 = 0, out2 = 1;
while (n1 <= n2) {
out1 += n1;
out2 *= n1;
n1++;
}
@(return 0)= out1;
@(return 1)= out2;
}"
:side-effects nil))
Есть реализации scheme, которые компилятся в Си, например chicken, там есть директива inline для этих вещей. http://wiki.call-cc.org/eggref/4/inline
Исправление x4DA, :
Хаскель компилируется в сишку, поэтому такие вещи там возможны.
У SBCL свой оптимизирующий компилятор в ISA, поэтому сишка ему вообще не упала.
Про инлайнинг сишки в CL я слышал только у ECL, который тоже компилится в Си.
(defun sample (x)
(ffi:c-inline (n1 n2) (:int :int) (values :int :int) "{
int n1 = #0, n2 = #1, out1 = 0, out2 = 1;
while (n1 <= n2) {
out1 += n1;
out2 *= n1;
n1++;
}
@(return 0)= out1;
@(return 1)= out2;
}"
:side-effects nil))
Исходная версия x4DA, :
Хаскель компилируется в сишку, поэтому такие вещи там возможны.
Про инлайнинг сишки в CL я слышал только у ECL, который тоже компилится в Си.
(defun sample (x)
(ffi:c-inline (n1 n2) (:int :int) (values :int :int) "{
int n1 = #0, n2 = #1, out1 = 0, out2 = 1;
while (n1 <= n2) {
out1 += n1;
out2 *= n1;
n1++;
}
@(return 0)= out1;
@(return 1)= out2;
}"
:side-effects nil))