Комментарии 31
спасибо за обзор!
алгоритм на КДПВ работает, если 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
некоторые впрочем шутят что говорить о смерти хаскеля преждевременно т.к. он по большому счёту так и не стал живым
Монады не только в Хаскеле.
И он есть. Даже два.
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 — скачаем, запустим, попробуем