Search
Write a publication
Pull to refresh

Comments 34

алгоритм на КДПВ работает, если for (d in primes) работает снизу вверх, но это из семантики языка не очевидно. А primes- вообще глобальная переменная. Вывод? КДПВ годная, привлекла внимание.

Ой как зря Вы его откорректировали, ой как зря...

будучи в танке откорректировал попросту в соответствии с Вашим комментарием

Меня в КПДВ несколько смущает let primes... с последующим primes.append() Вроде let объявляет immutable переменную.

иммутабельность задаваемая let в этом случае означает только то что ArrayList нельзя подменить на другой - а то что у него внутри может что-то меняться, это уже дело самого массива.

вы точто также и в java можете объявить переменную неизменяемой но менять её содержимое (если сам её тип мутабельный) - чтобы этого избежать нужно использовать специальные обёртки типа immutableMap

так и в любом языке - компилятор не может только по объявлению переменной неизменяемой предотвратить попытки вызова модифицирующих методов на самом объекте (разве что язык умеет различать модифицирующие методы)

Понятно, в Cшных терминах это нюансы взаимного расположение const и * ;) В C/C++ подобный эффект достигается только с указателем/ссылкой, просто константный массив или список не даёт менять содержимое.

а, дошло, всего лишь "картинка для привлечения внимания". она впрочем не для привлечения внимания а просто типовой элемент оформления статьи на хабре. что касается содержания - ну не прилеплять же очередную тётку в выпирающем топике. это сексизьм и к делу не относится.

Результатом оператора 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 тоже прям не сказать что со всех сторон огурчик. Поэтому некоторая мотивация есть.

Но пройдясь по языку я вижу что и он местами впал в грехи излишеств всяких и поэтому-то я и приписал честно что у меня есть сомнения насчет того что он бурно пойдёт в массы.

Хотя всё зависит от коньюнктуры. Котлин бы в массы не пошёл если бы его не взял под крыло Гугл для Андроида.

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

«Закладки» имелось в виду. /сарказм

Какой-то ленивый обзор получился, очень много по ходу изложения досадных и сбивающих с толку оговорок: "нет", "не будем", "не использую", "не дружим" - лучше бы сразу определили свой целевой контекст, и отработали бы в нём без сбоев.

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

Больше похоже на смесь свифта и тайпскрипта

Котлин какой-то по синтаксису если честно)

Sign up to leave a comment.

Articles