Ага, блять, лишние. Благодаря await теперь чейн-код будущего будет выглядеть так:
result = await (await (await obj.operation1()).operation2()).operation3()
А async вызовы нужны только при разработке всяких подзалупных библиотек. В конце концов, можно было бы ввести ключевое слово, от которого поведение await зависело бы. Но нет, взят самый худший вариант. Мало того что await так ещё и async нужно перед каждым определением функции хуярить. Костыли-костылики. Если б у хаскеля не был такой уёбищный уродский синтаксис, я бы вообще на него наверное перекатился. Но у меня глаза каждый раз вытекают, когда я на него смотрю. Просто пиздец.
Уродский синтаксис в первую очередь у жопоскрипта, запиленного за 7 дней. Ну и ещё не мне тебе рассказывать за == и ===, дефолтно-динамическую область видимости, обоссаные типы (да, никто контексты перла не передрал точно и чётко, поэтому эта хуйня с автокастами оправдана только в нём) и непередаваемую для скриптоязыка лаконичность уровня Java. Ну и сам сишный синтаксис оправдан полностью только для Си, а не для скриптоязыка, который ты будешь трогать через repl.
У хаскеля всего-то чуток подтюненный ml-синтаксис, где всё лежит на нужном месте и не мешается.
Да даже в синтаксисе scheme, у которого есть, кстати, call/cc, позволяющий быстро и безболезненно послать нахуй ваши async с await тысячей способов, больше смысла. Он хотя бы не забит всем этим синтаксическим говном, которое всё равно транспилируют вниз, потому что часть браузеров его не понимает.
>>dBc > Уродский синтаксис в первую очередь у жопоскрипта, запиленного за 7 дней. Неть, божественный сиподобный.
> Ну и ещё не мне тебе рассказывать за == и === Кто этим пользуется не для смеха, тому яйца в рот затолкать. Таким хоть что дай - говна понапишут что хуй разберёшь потом их обезьяньи бредни.
> дефолтно-динамическую область видимости Проблема была актуальна в 1990-х.
этого прекрасного языка мало что знаю, никогда не сталкивался. Но знаю примеры перетаскивания из него хороших вещей в другие ЯП. Кстати, давно хочу попробовать, возможно он окажется не так уж плох как его ругают.
> Ну и сам сишный синтаксис оправдан полностью только для Си Он оправдан везде, где у людей не хватает мозгов придумать что-то лучше, ибо дефолтный. И вот там где от него отказались, но лучше сделать не смогли, в том же хаскеле, лучше б был си-подобный, чем тот фарш что сделан ему под замену.
> а не для скриптоязыка, который ты будешь трогать через repl Нормально подходит, если с умом пользоваться. Всё читаемо, всё различимо, всё понятно.
> У хаскеля всего-то чуток подтюненный ml-синтаксис, где всё лежит на нужном месте и не мешается. Охуенно понятно что тут происходит, синтаксис прекрасен, как вид большого театра со сцены.
{-# INLINE (|.) #-}; (|.)::Storable a=>Ptr a -> Int -> IO a ; (|.) a i = peekElemOff a i {-# INLINE (|^) #-}; (|^)::Storable a=>Ptr a -> Int -> a -> IO (); (|^) a i v = pokeElemOff a i v
(-@<) :: AddrPort -> IO Socket (-@<) ap@(_ :@: p') = do let p = fromIntegral p' withMVar portVectors $! \ !(V !c !s !t) -> do t |^ p =<< (1 +) <$> t |. p n <- c |. p case compare n 0 of GT -> do c |^ p $! n+1; s |. p >>= deRefStablePtr EQ -> do l <- (ap @<) ; s |^ p =<< newStablePtr l; c |^ p $! n+1; return l LT -> error "-@< FAULT"
(-✖) :: AddrPort -> IO () (-✖) ap@(_ :@: p') = do let p = fromIntegral p' withMVar portVectors $! \(V !c _ _) -> do n <- c |. p case compare n 1 of GT -> do c |^ p $! n-1 EQ -> watch ap p LT -> error "-x FAULT" where watch ap p = void . forkIO $! withMVar portVectors $! \(V _ _ !t) -> do tp <- t |. p print $! Watch :^: (LS . B.pack $! show tp, ap) void . schedule 10 $! do withMVar portVectors $! \ !(V !c !s !t) -> do n <- c |. p tp' <- t |. p if n == 1 && tp == tp' then do print $! Drop :^: (faf AF_UNSPEC, ap) c |^ p $! n-1 sv <- s |. p; deRefStablePtr sv >>= (✖); (sv ✖) else when (n == 1) $! watch ap p
> в синтаксисе scheme 10/10, жосподи, 30/30
(define (hofstadter-male-female n) (letrec ((female (lambda (n) (if (= n 0) 1 (- n (male (female (- n 1))))))) (male (lambda (n) (if (= n 0) 0 (- n (female (male (- n 1)))))))) (let loop ((i 0)) (if (> i n) '() (cons (cons (female i) (male i)) (loop (+ i 1)))))))
(hofstadter-male-female 8)
> хотя бы не забит всем этим синтаксическим говном Мастерство программирования сегодня состоит в том, чтобы выбрать из этой кучи говна алмазы, а остальное засунуть подальше в ящик и забыть как страшный сон. Чем меньше куча говна, тем и алмазов меньше.