to post messages and comments.

← All posts tagged programming

На лоре опять выходит на связь упоротый жаваскриптер со своими охуительными вопросами.

На этот раз он утверджает что поскольку в 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 и мешают при отладке.

В коментариях массовый разрыв пуканов у плюсоблядей, естественно.

Чо за хуйту я читаю:

Избегайте вызова функций с переменным количеством аргументов со своими собственными сигнатурами, даже если это вполне корректные функции из станартной библиотеки C, такие как sprintf. Вызовы sprintf часто выглядят более компактными и простыми для понимания, чем эквивалентные вызовы с использованием форматирования stringstream и операторов operator<< — так же как легче сесть в машину не оборудованую ремнями и подушкой безопасности, да еще и без дверей.

Чятик, как в твоем любимом говноязычке делается такая херня -> pasterack.org

То есть нагенерить пачку классов (не объектов, так что 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.

Ох блять, наебался вдоволь с этим новым списком контактов, и он еще подглючивает — не скроллится при выборе стрелками,
вешает нахер интерфейс при ресайзе, рисует нижнюю полоску прокрутки, да и иконки походу слишком большие.
Иногда (когда?) не снимается выделение с контакта и их получается сразу два.