6.1.1 is out.
YAY, racket ← All posts tagged programming
Development of this project was aborted, because it seems that strict functional languages are not good tool for writing compilers (especially manipulating cyclic graphs)
охуительными вопросами.
На этот раз он утверджает что поскольку в JS apply принимает дополнительный параметр — объект, this которого будет активным во время функции, которую вызывает apply, то это является более мощной АБОСРАКЦИЕЙ.
Хуйта канеш. От нечего делать накидал подобную херню в схемке. ths лексически биндится на передаваемый объект в теле функции.
```
#lang racket
(require syntax/parse/define)
(require racket/stxparam)
(define-syntax-parameter ths
(lambda (stx) (raise-syntax-error #f "Not used inside js-apply!" stx)))
(define-simple-macro (js-apply obj:expr fn:expr args...)
(let ([this-obj obj])
(syntax-parameterize ([ths (make-rename-transformer #'this-obj)])
(apply fn args...))))
(js-apply (new (class object%
(super-new)
(init-field [x 10])))
(lambda (y) (+ y (get-field x ths)))
(list 1))
;; 11
```
На лоре опять выходит на связь упоротый жаваскриптер со своими На этот раз он утверджает что поскольку в JS apply принимает дополнительный параметр — объект, this которого будет активным во время функции, которую вызывает apply, то это является более мощной АБОСРАКЦИЕЙ.
Хуйта канеш. От нечего делать накидал подобную херню в схемке. ths лексически биндится на передаваемый объект в теле функции.
```
#lang racket
(require syntax/parse/define)
(require racket/stxparam)
(define-syntax-parameter ths
(lambda (stx) (raise-syntax-error #f "Not used inside js-apply!" stx)))
(define-simple-macro (js-apply obj:expr fn:expr args...)
(let ([this-obj obj])
(syntax-parameterize ([ths (make-rename-transformer #'this-obj)])
(apply fn args...))))
(js-apply (new (class object%
(super-new)
(init-field [x 10])))
(lambda (y) (+ y (get-field x ths)))
(list 1))
;; 11
```
Интересная программка на хаскеле.
Тут мы забыли написать ```x``` в конце. Бывает хули.
```
$ cat Test.hs
module Test
where
strlen x = length
```
Модуль компилируется, все ок, потому что в хаскеле подефолту каррирование и тайпинференс.
```
$ ghc Test.hs
[1 of 1] Compiling Test ( Test.hs, Test.o )
```
Здесь обычное использование бажного strlen, который мы написали.
```
$ cat Main.hs
import Test
main = do
putStrLn "Please enter a word"
num <- getLine
let size = strlen num
putStrLn $ "The size of your string is: " ++ show size ++ "!"
```
Компилируем его и получаем клевые сообщения об ошибках!
```
$ ghc Main.hs
[2 of 2] Compiling Main ( Main.hs, Main.o )
Main.hs:7:48:
No instance for (Show ([a0] -> Int)) arising from a use of `show'
Possible fix: add an instance declaration for (Show ([a0] -> Int))
In the first argument of `(++)', namely `show size'
In the second argument of `(++)', namely `show size ++ "!"'
In the second argument of `($)', namely
`"The size of your string is: " ++ show size ++ "!"'
```
В чем тут проблема? В том, что тайпчекер не заставил нас написать аннотацию для top-level функции strlen,
а вывел типы из определения функции, причем типы вывел не те, которые мы хотели.
То есть, вместо того чтобы сказать программисту, чтобы он предоставил сигнатуру функции и сказал чего хочет, компилятор вывел типы и зафейлился уже в другом месте.
В хаскеле есть флаг чтобы запретить декларирование top-level функций без сигнатурок?
tldr: с type inference надо быть аккуратным.
youtube.com
Выступающий заявляет, что большинство плюсовых абстракций нужно выкинуть, потому что они не cache-friendly и мешают при отладке.
В коментариях массовый разрыв пуканов у плюсоблядей, естественно.
Выступающий заявляет, что большинство плюсовых абстракций нужно выкинуть, потому что они не cache-friendly и мешают при отладке.
В коментариях массовый разрыв пуканов у плюсоблядей, естественно.
Пока склоняюсь к си с классами и racket для скриптования и API игровой логики.
Избегайте вызова функций с переменным количеством аргументов со своими собственными сигнатурами, даже если это вполне корректные функции из станартной библиотеки C, такие как sprintf. Вызовы sprintf часто выглядят более компактными и простыми для понимания, чем эквивалентные вызовы с использованием форматирования stringstream и операторов operator<< — так же как легче сесть в машину не оборудованую ремнями и подушкой безопасности, да еще и без дверей.
Typed Racket’s local type inference algorithm is currently not able to infer types for polymorphic functions that are used on higher-order arguments that are themselves polymorphic.
pasterack.org
То есть нагенерить пачку классов (не объектов, так что JS-питухи сразу идут лесом), которые параметризованы лямбдочками.
Я попытался сделать на говноплюсах и высрал примерно вот енто -> ideone.com но чото кал какой-то.
Чятик, как в твоем любимом говноязычке делается такая херня -> То есть нагенерить пачку классов (не объектов, так что JS-питухи сразу идут лесом), которые параметризованы лямбдочками.
Я попытался сделать на говноплюсах и высрал примерно вот енто -> ideone.com но чото кал какой-то.
Today I am happy to make the first release of the Common Lisp implementation “Clasp”. Clasp uses LLVM as its back-end and generates native code. Clasp is a super-set of Common Lisp that interoperates smoothly with C++. The goal is to integrate these two very different languages together as seamlessly as possible to provide the best of both worlds. The C++ interoperation allows Common Lisp programmers to easily expose powerful C++ libraries to Common Lisp and solve complex programming challenges using the expressive power of Common Lisp. Clasp is licensed under the LGPL.
лан // пошел думать почему у Racket JIT не на llvm.
вешает нахер интерфейс при ресайзе, рисует нижнюю полоску прокрутки, да и иконки походу слишком большие.
Иногда (когда?) не снимается выделение с контакта и их получается сразу два.