cf96fdba7...14.jpeg, 12.58 KB, 300x168, exif ggl iqdb
Пройдёт ещё 2000 лет и когда у жаваскриптодебилов с купертины окончательно доломаются кнопки "a","w","i","t" они поймут что надо было вместо
foo = await bar()
baz().then(...)

делать
foo = bar()
(async baz()).then(...)

сейчас бы лишние скобки писать, с лиспа перекатился чтолей?

Ага, блять, лишние. Благодаря await теперь чейн-код будущего будет выглядеть так:
result = await (await (await obj.operation1()).operation2()).operation3()

А async вызовы нужны только при разработке всяких подзалупных библиотек. В конце концов, можно было бы ввести ключевое слово, от которого поведение await зависело бы. Но нет, взят самый худший вариант. Мало того что await так ещё и async нужно перед каждым определением функции хуярить. Костыли-костылики.
Если б у хаскеля не был такой уёбищный уродский синтаксис, я бы вообще на него наверное перекатился. Но у меня глаза каждый раз вытекают, когда я на него смотрю. Просто пиздец.

>>bIx
>уродский синтаксис

Уродский синтаксис в первую очередь у жопоскрипта, запиленного за 7 дней.
Ну и ещё не мне тебе рассказывать за == и ===, дефолтно-динамическую область видимости, обоссаные типы (да, никто контексты перла не передрал точно и чётко, поэтому эта хуйня с автокастами оправдана только в нём) и непередаваемую для скриптоязыка лаконичность уровня Java.
Ну и сам сишный синтаксис оправдан полностью только для Си, а не для скриптоязыка, который ты будешь трогать через repl.

У хаскеля всего-то чуток подтюненный ml-синтаксис, где всё лежит на нужном месте и не мешается.

Да даже в синтаксисе scheme, у которого есть, кстати, call/cc, позволяющий быстро и безболезненно послать нахуй ваши async с await тысячей способов, больше смысла. Он хотя бы не забит всем этим синтаксическим говном, которое всё равно транспилируют вниз, потому что часть браузеров его не понимает.
dae24a264...d2.jpeg, 171.61 KB, 960x640, exif ggl iqdb

>>dBc
> Уродский синтаксис в первую очередь у жопоскрипта, запиленного за 7 дней.
Неть, божественный сиподобный.

> Ну и ещё не мне тебе рассказывать за == и ===
Кто этим пользуется не для смеха, тому яйца в рот затолкать. Таким хоть что дай - говна понапишут что хуй разберёшь потом их обезьяньи бредни.

> дефолтно-динамическую область видимости
Проблема была актуальна в 1990-х.

> обоссаные типы
Типизация не нужна.

> контексты перла
Про синтаксис
$_='while(read+STDIN,$_,2048){$a=29;$c=142;if((@a=unx"C*",$_)
[20]&48){$h=5;$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}
@ARGV;s/...$/1$&/;$d=unxV,xb25,$_;$b=73;$e=256|(ord$b[4])<<9|ord$b[3];
$d=$d>>8^($f=($t=255)&($d>>12^$d>>4^$d^$d/8))<<17,$e=$e>>8^($t&
($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9,$_=(map{$_%16or$t^=$c^=
($m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t^=(72,@z=(64,72,$a^
=12*($_%16-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271))[$_]^
(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval

этого прекрасного языка мало что знаю, никогда не сталкивался. Но знаю примеры перетаскивания из него хороших вещей в другие ЯП. Кстати, давно хочу попробовать, возможно он окажется не так уж плох как его ругают.

> Ну и сам сишный синтаксис оправдан полностью только для Си
Он оправдан везде, где у людей не хватает мозгов придумать что-то лучше, ибо дефолтный. И вот там где от него отказались, но лучше сделать не смогли, в том же хаскеле, лучше б был си-подобный, чем тот фарш что сделан ему под замену.

> а не для скриптоязыка, который ты будешь трогать через 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)


> хотя бы не забит всем этим синтаксическим говном
Мастерство программирования сегодня состоит в том, чтобы выбрать из этой кучи говна алмазы, а остальное засунуть подальше в ящик и забыть как страшный сон. Чем меньше куча говна, тем и алмазов меньше.
...