Comments 34
спасибо за обзор!
алгоритм на КДПВ работает, если for (d in primes) работает снизу вверх, но это из семантики языка не очевидно. А primes- вообще глобальная переменная. Вывод? КДПВ годная, привлекла внимание.
можно для тех кто в танке - КДПВ это кто, простите? :)
https://habr.com/ru/articles/376207/comments/#comment_16672575
Ответ на Ваш вопрос уже есть на Хабре :-)
Ой как зря Вы его откорректировали, ой как зря...
будучи в танке откорректировал попросту в соответствии с Вашим комментарием
Меня в КПДВ несколько смущает let primes... с последующим primes.append() Вроде let объявляет immutable переменную.
иммутабельность задаваемая let в этом случае означает только то что ArrayList нельзя подменить на другой - а то что у него внутри может что-то меняться, это уже дело самого массива.
вы точто также и в java можете объявить переменную неизменяемой но менять её содержимое (если сам её тип мутабельный) - чтобы этого избежать нужно использовать специальные обёртки типа immutableMap
так и в любом языке - компилятор не может только по объявлению переменной неизменяемой предотвратить попытки вызова модифицирующих методов на самом объекте (разве что язык умеет различать модифицирующие методы)
а, дошло, всего лишь "картинка для привлечения внимания". она впрочем не для привлечения внимания а просто типовой элемент оформления статьи на хабре. что касается содержания - ну не прилеплять же очередную тётку в выпирающем топике. это сексизьм и к делу не относится.
Результатом оператора
for
является значение типаUnit
. Почему неNothing
? В общем тут глубоко полезной логики пока не видно.
Потому что нельзя создать инстанс Nothing, а вернуть какое то значение нужно. Nothing обычно в языках ещё и является подтипом всех типов, поэтому continue/break/throw имея такой тип могут быть согласованы с любым другим возвращаемым из функции типом.
но break
ведь возвращает Nothing
:)
в целом, конечно, это не очень существенный момент - я просто задумался можно ли было значением цикла сделать что-то более полезное...
но
break
ведь возвращаетNothing
:)
поэтому и возвращает nothing чтобы типы сходились. Предположу еще что break реализован похожим на scala и некоторые другие языки образом, являясь по сути исключением.
я просто задумался можно ли было значением цикла сделать что‑то более полезное...
Скорее всего это задел дляyield
, тогда возвращаемый тип будет другим
Потому что break никогда не вернет значение. Например:
let v: Int32 = break;
//^ можно, мы из этого v никогда не прочитаем
let x: Int32 = for(...) {}
//^ нельзя: цикл может закончиться, а значения у нас нет
Разумеется, в таком применении, это не очень полезно. Но в комбинации с другими фичами, это может быть интересным:
let v: Int32 = if isPrime(n) {
n*n
} else {
continue
}
Здесь мы в одной ветке не считаем значение, а просто обрываем цикл.
В целом, тип Nothing также дает возможность объявить функцию, которая всегда кидает исключение (какой-нибудь throwExceptionWithExtendedInfo()).
Сами типы Unit и Nothing, судя по всему, пришли из котлина. Аналогичные типы есть в расте: пустой кортеж `()` и never type `!`. Поэтому стандартная история для современного мейнстрима.
Вообще, язык выглядит как помесь котлина и свифта, с элементами раста. Хотя из описания статьи многое осталось непонятно про собственно сам язык и среду исполнения. Видимо прийдется курить доку, чтобы составить представление о языке.
Очень похоже на язык для отделения своих от чужих. Кто хочет работать в Хуавее, тот изучает. Остальные восторженно сторонятся.
Хочется прочесть, в подробностях, для чего он нужен людям, живущим за пределами знаменитой компании.
Мне тоже интересно. но как человек мигрировавший с Java в Go (после многих лет в этой самой джаве) я мотивацию отчасти понимаю - джава по нынешним временам кажется немного излишней (нам не нужно "run everywhere" поскольку все запускают в докерах - и например куча уровней приватности - для микросервисов это лишнее). К сожалению Go тоже прям не сказать что со всех сторон огурчик. Поэтому некоторая мотивация есть.
Но пройдясь по языку я вижу что и он местами впал в грехи излишеств всяких и поэтому-то я и приписал честно что у меня есть сомнения насчет того что он бурно пойдёт в массы.
Хотя всё зависит от коньюнктуры. Котлин бы в массы не пошёл если бы его не взял под крыло Гугл для Андроида.
А где монады? Без монад не считово!
Ну и пример с коллекциями прямо требует ML-вского оператора |>
let res = arr |> filter |> map |> collect
но это частичное применение хотя бы как синтаксис, хмм
Монады в Хаскеле! А где хаскель? Не будем вспоминать о его безвременной и трагикомичной кончине :)
Какой такой кончине? Хаскель очень даже жив, ресёрч проводится, компилятор развивается, даже продакшен на нём есть, в том числе в России.
"продакшн на нем есть", ну да, ну да, биокад вспомните :)
под кончиной я подразумеваю историю с haskell2020
некоторые впрочем шутят что говорить о смерти хаскеля преждевременно т.к. он по большому счёту так и не стал живым
Ну мы вот, например, в Kaspersky OS хаскелируем, достаточно давно уже, полёт нормальный.
поддержка легаси, полёт нормальный, кто ж спорит, можно хоть на коболе писать
по ситуации с биокадом вырисовалось две проблемы
любые недостающие библиотеки (коннекторы к БД и пр) приходится писать и отлаживать самим... ну в чем-то это неплохо конечно
искать разработчиков на хаскель - та ещё морока
И старые вещи поддерживаем (куда ж без этого), и новые пилим. Как раз в той области, где хаскель очень хорош (не зря ж говорят, что каждой задаче свой инструмент) — компиляторы.
Жаль, конечно, что у вас не сложилось с хаскелем и Биокадом, но свой негативный опыт огульно проецировать на других всё же не стоит.
Да нет, почему негативный. Я с любопытством в течение недели писал тестовый проект на вакансию в Биокад (где-то в гитхабе у меня валяется, если что). По результатам меня не взяли, сказали будут искать всё же человека с промышленным опытом в Хаскеле (звучит комично - но м.б. решили сберечь моё самолюбие и не говорить прямо что их не устроили моя тупость или зарплатные ожидания). Но вот что я наблюл - о том и написал:
в проекте нужно было использовать какую-то графовую БД (не помню точно но опять же гитхаб поможет если что) - к ней драйвер был написан самим же ведущим разработчиком Биокада. в целом ничего в этом плохого - но возможно ведущий разработчик Биокада по идее должен больше посвящать себя задачам Биокада :) драйвер прямо скажем не впечатлил, из-за строжайшей типизации там явно были вещи которых бы хотелось видеть в драйвере БД но их не было (м.б. позже им что-то удалось придумать)
опять же эта суперстрогая типизация из-за которой ты местами корячишься и изобретаешь код семантически извращённый (но прекрасный в функциональном смысле) - и тут вдруг находишь в нём пяток несовместимых строковых типов и некую грязную "магию" (OverloadedStrings по-моему) для того чтобы как-то обойти эту ситуацию, наплевав на поставленную во главу угла строгую типизацию :)
Насчет того как там Хаскель для разработки компиляторов так хорошо подходит - это интересно бы послушать, кажется у Вас пока нет об этом статьи - но если напишете - с удовольствием почитаю. Компиляторы и языки это страшно интересная мне тема, хотя подозреваю что не много найдётся языков среди первой сотни индекса tiobe которые написаны на Хаскеле :)
Монады не только в Хаскеле.
И он есть. Даже два.
e1 |> e2 <--------> v = e1; e2(v) // это pipeline
f ~> g <-------------> x => g(f(x)) // это composition
спасибо, было интересно почитать. интересно, какие перспективы
насколько я (смутно) понимаю это зависит от перспектив продукции Huawei и перспектив Harmony OS :)
Kotlin-у повезло что Google подхватил его и сделал мэйнстримом для разработки на андроид, а андроид завоевал наверное 80% мобильного мира... Не думаю что такая история повторится с Хуавеем - но уровня Swift вполне можно достичь. Правда, быть может, оставшись эндемичным для Китая :)
Для программистов на Java, Go, C++ много будет довольно привычных вещей (можно сказать - "обокрали" эти языки тут и там понемногу).
Цап-царап)
Всякое про Cangjie писали, начиная от того что там будут только китайские иероглифы
«Закладки» имелось в виду. /сарказм
Какой-то ленивый обзор получился, очень много по ходу изложения досадных и сбивающих с толку оговорок: "нет", "не будем", "не использую", "не дружим" - лучше бы сразу определили свой целевой контекст, и отработали бы в нём без сбоев.
Ну и молодцы что сделали свой язык. В последнее время Европа и США, словно ближневосточный диктатор, вводят санкции и кидают всех через х.й. Сидеть и смотреть что ещё выкинет былый хозяин - себе дороже, тем более в населения в Китае больше чем на коллективном западе
Больше похоже на смесь свифта и тайпскрипта
Котлин какой-то по синтаксису если честно)
Язык Cangjie от Huawei — скачаем, запустим, попробуем