LINUX.ORG.RU

[C++] Чего вам нехватает в языке?

 


0

0

Может бессмысленный топик, но хотелось бы знать мнение: каких фич языка не хватает по вашему в c++?

З.Ы. Убедительная просьба фанатам других языков программирования воздержаться от комментариев.

Ответ на: комментарий от korvin_

> разработчики С так не думают видимо, раз реализовали Limbo для Inferno...

разработчики С нас к сожалению не радуют языками — go откровенно убог, limbo, судя по его низкой популрности, вероятно тоже

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> limbo, судя по его низкой популрности, вероятно тоже

просто замечательная логика...

korvin_ ★★★★★
()
Ответ на: комментарий от LamerOk

Какие есть хорошие реализации на хаскелле событийно-ориентированной логики?

Reactive

YAMPA

FieldTrip

Grapefruit

Что можно посмотреть окромя xmonad?

BlueTile

Frag

а вот тут можно посмотреть примеры событийно-ориентированного кода на Reactive. достаточно?

jtootf ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>А еще то же самое для монады State. А еще то же самое для монады...

Для монады State? Работа с файлом? Думай, что говоришь :3

Waterlaz ★★★★★
()
Ответ на: комментарий от LamerOk

Любая динамика.

В смысле, динамическая типизация? Да нет, там тип вполне надёжно определяется в рантайме.

Miguel ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

А еще то же самое для монады State.

Нет, только для IO. И то только потому, что открытие/закрытие файла - сайд-эффект. Больше ничего не нужно.

Кстати, я опять не прав, нужно так:

withOpenFile :: String -> (File -> IO a) -> IO a

ибо с файлом мало что можно сделать без сайд-эффектов.

Miguel ★★★★★
()
Ответ на: комментарий от LamerOk

Вполне. Спасибо.

если что, самыми актуальными являются Reactive и Grapefruit; однако наиболее показательный в смысле выразительности проект (Frag) написан с использованием YAMPA

здесь есть полный список доступных на сегодня FRP-библиотек на Haskell (19 штук). если что - готов отвечать на вопросы по теме, с FRP возился (и потихоньку продолжаю)

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

19 штук

не, нифига не 19, штук шесть всего. вот блин, размазали по пакетам

jtootf ★★★★★
()
Ответ на: комментарий от Miguel

А толку то, что он определяется? Я никакого dbc на нем сделать не могу, кроме как в ручную.

Если мне нужен an_array, который в коде будет работать так:

an_array.each { |duck| duck.quak() }

я вполне предсказуемо хотел бы иметь инструменты так или иначе хоть в процессе трансляции, хоть в рантайме позволяющие гарантировать, что в следующем коде

an_array.push(el)

для каждого el гарантируется наличие метода quak()

А фигушки.

LamerOk ★★★★★
()
Ответ на: комментарий от jtootf

Еще раз спасибо. Предложением начну пользоваться где-то через месяц.

LamerOk ★★★★★
()
Ответ на: комментарий от Miguel

кстати, определение результата функции как

IO a

я так понимаю нужно для более корректного вывода типов?

т.е., чтобы компилятор мог определить, что раз функция someFunc юзает где-то внутри withOpenFile, то имеет сайд-эффект? если так, то почему он не может это определить по (File -> IO a) в определении типа withOpenFile?

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

кстати, определение результата функции как
IO a
я так понимаю нужно для более корректного вывода типов?

Оно нужно для корректного типа. Возвращаемое значение имеет тип «IO a», а не «a».

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

> Нет, только для IO. И то только потому, что открытие/закрытие файла - сайд-эффект. Больше ничего не нужно.

А если кроме открытия-закрытия файла нам при его обработке надо иметь сайд-эффект — обновление некторой переменной? Как тут без State?

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>А если кроме открытия-закрытия файла нам при его обработке надо иметь сайд-эффект — обновление некторой переменной? Как тут без State?

Dude... google for IORef

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Тут даже наоборот. Это State не может открывать файлы, а вот IO может

Waterlaz ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Во-1, тогда уж не State, а StateT x IO.

Во-2, для такой монады withOpenFile выражается через исходную withOpenFile, а не пишется заново:

withOpenFileState :: String -> (File -> StateT x IO r) -> StateT x IO r
withOpenFileState name handler =
    do s <- get
       (r, s') <- lift $ withOpenFile name $ \file -> runStateT (handler file) s
       put s'
       return r
Miguel ★★★★★
()
Ответ на: комментарий от LamerOk

> для каждого el гарантируется наличие метода quak()
Щито? Может тебе ещё и для каждого числа метод split? А то ай-ай-ай получается, нехорошо.
Никто не запрещает определить свой класс с своим методом push.

mix_mix ★★★★★
()
Ответ на: комментарий от dem05k41

Haskell и C++ представители совсем разньіх парадигм программирования. Их нельзя сравнивать ;-)

Haskell - это лучший императивный язык. (c) кто-то из классиков

Begemoth ★★★★★
()
Ответ на: комментарий от dem05k41

> Haskell - язьік функционального программирования ;-)

Да, а о том, что хаскелл - лучший императивный язык говорит его создатель :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.