Как стать автором
Обновить
0
Aleksei Matiushkin @chapuzaread⁠-⁠only

Principal Engineer

Отправить сообщение

О, моё любимое «миллионы леммингов не могут ошибаться».


Можете. Чего вы не можете, так это сложить два и два, да подумать своей головой, вместо ссылок на авторитеты.

В спецификации иначе. Этого недостаточно?

новая версия спецификации какой-то магией подтянется во все реализации

Могу научить при компиляции скачивать актульную версию в каталог external_data, недорого. Ну, или посмотрите, как все Cldr имплементации это делают.


Выйдет новая версия спецификации — программисты напишут новый код для её поддержки, только и всего.

Конечно, ведь им надо за что-то платить зарплату — а тут, о ужас, — можно один раз написать нормальный код, и потом заниматься полезными делами. Я начинаю понимать, как даже при открытом сваггере какого-нибудь API, техотделы умудряются закладывать в план «переход на следующую версию».

Эликсир-то тут вообще при чем?


В адекватных языках операции перевода в нижний регистр и конкатенация коммутируют. Спецификация консорциума напрямую говорит:


# Conditional Mappings
# The remainder of this file provides conditional casing data used to produce 
# full case mappings.

Язык общего назначения не должен был проигнорировать слово «conditional», но имеем мы ровно то, что имеем.


Ах, да, если вас вдруг интересует, чем бы помог эликсир: там конвертация концевой Σ в ς — вы не поверите, опциональна. Разработчик должен эксплицитно сказать: «используй тут правило для греческого». Да, так можно было.




mayorovp если хардкод этой самой спецификации соответствует

① Не соответствует, см. выше.
② Работало бы и завтра, когда выйдет новая версия спецификации, хардкор же, как обычно, поломается.

В расте действительно есть какая-никакая поддержка юникода, но он иногда бывает слишком самонадеянным, пытаясь быть умнее там, где его не просили. Это приводит к вот такому:


    // concatenate, then lowercase
    let mut s = "".to_owned();
    s.push_str("AΣ");
    s.push_str("ΣA");
    println!("{}", s.to_lowercase());
    //⇒ aσσa

    // lowercase, then concatenate
    let mut ns = "".to_owned();
    ns.push_str(&"AΣ".to_lowercase());
    ns.push_str(&"ΣA".to_lowercase());
    println!("{}", ns);
    //⇒ aςσa

Сейчас мне, разумеется, скажут, что в реальной жизни так не бывает, а я отвечу, что я лично чинил такой баг (который, понятно, очень спорадический) в ситуации, когда название компании приклеивалось через дефис к неким метаданным для создания уникального идентификатора, а компания называлась — ну да, претенциозненько «ΜΕΣΣΊΑΣ».


Потому что пытаться быть умным — языку программирования не положено, а casing нужно осуществлять не хардкодингом, а парсингом спецификации консорциума, как это делают адекватные люди.

Я давно живу, много, где побывал (а в нескольких странах жил не как турист), и всю сознательную жизнь (с середины девяностых) тесно работаю с американцами.


Я по утрам читаю новости на четырех языках из минимум шести разных стран, чтобы составить хоть сколько-нибудь правдоподобгую картину того, что происходит в мире.


Так вот, по моим наблюдениям, поведение людей в массе и подходы к государственной политике и пропаганде у наших стран самые близкие.


Как по иному случаю писал Иосиф Александрович, «если выпало в империи родиться — лучше жить в глухой провинции у моря». Так вот империй (пока Меркель не удалось построить пятый рейх в Европе, и пока Китай не потребовал от США госдолг вчерашним днем — но это вряд ли произойдет в обозримом будущем), сегодня на земле ровно две.

там надо год работать в зарубежном относительно США офисе

А, во, это оно, наверное. В зарубежном офисе она уже несколько лет как.


а куда?

Не, ну каждый по себе выбирает, конечно, но есть же места не настолько людоедские, хоть та же Канада, если про «за океан». Я не смог жить в Германии, и почти всем доволен в Испании. Многим Латинская Америка подходит, а иным — Исландия и Новая Зеландия. Люди, слава всему, разные, но как по мне — разницы между Россией и Штатами нет вовсе, просто как страны-близнецы, поэтому странно менять одну на другую.

Вообще ничего не наводит на мысли о том, что он может быть неплохим CEO. Да у меня и нет таких мыслей.


Но ведь и я не акции покупаю, а браузер выбираю. И мне понятнее надстройки, которые будут сделаны Эйком, а не непойми кем в ФФ.

Вы требования на ходу выдумываете.

Ложь. Я развиваю оригинальную задачу. Если бы вы не выдумали к ней модель акторов в первом комментарии, и не предложили мне костыль во втором (и вообще попробовали бы понять задачу) — вы бы увидели, что ничего в начальных условиях не поменялось. Входной поток бывает плотным, неожиданно да?


[...] шесть девяток надежности и вот это все — я правильно понимаю?

Пятнадцать девяток. А так — да, правильно. Чтобы джейсон перекладывать мне и кобола хватит. Я думал, раст позиционируется не как игрушка для одного тепличного компьютера и разрешением на сбой каждую пятую секунду. Простите, видимо ошибался.


Для вашей супер-пупер задачи

Она уже лет 6 не принадлежит категории особенных. Оглядитесь, что ли.


готовые решения вроде мап-редьюса и хадупа

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

Пожалуйста: https://docs.rs/actix/0.10.0/actix/trait.StreamHandler.html

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

бодрее текущего хрома

Не знаю, мне не приходилось запускать его на кофеварке; на компьютере я разницу не замечаю.


на порядок свободнее

Чем ядро движка chromium? Разве что, в голове у стюардессы.


как оно работает?

Ну только ленивый еще не видел ни одну из миллиарда публикаций «что на самом деле утекает в инкогнито моде».

Понятия не имею, если честно. Может быть, это как-то решается, типа «до апреля по обычной, потом так», может быть имеется в виду «со следующего апреля», может быть компания врет (но это вряд ли, это large cap).


Только кто ж по доброй воле в XXI веке туда поедет-то?

Наверное, такое тоже бывает. Опираясь на собственный опыт, могу сказать, что вот моя жена не брезгует летать по работе в Штаты и ни разу проблем ни с визами не было, ни от предложений завтра оформить рабочую — отбоя нет.

непонятных надстроек над хромом

Вот сейчас смешно было. CEO «непонятных надстроек над хромом» — Brendan Eich, погуглите, кто такой; а CTO — Brian Bondy.


ФФ уже лет шесть можно использовать только из жалости к стюардессе, когда нужен браузер «ни одного логина» (инкогнито не совсем так работает, если что).

Зачем иметь акторный фреймворк «в языке»?

Затем, что без него параллельные вычисления толком не построить. Заметьте, я нигде ничего не говорил про модель акторов, я описал повседневную задачу. И тут же мне хором стали говорить про акторов. Хотя это лишь один из вариантов решения. ОК, пусть надо просто обсчитывать входной поток данных и сплевывать промежуточные результаты вовне. Задача повседневная, уши модели акторов из нее уже не так торчат. На современном языке программирования такая задача должна отнять час на подумать и 10 минут на написать 20 строчек.


Я совсем не топлю за «все должно быть в std», наоборот. Просто некоторые основополагающие вещи не должны зависеть от того, что завтра в компилятор добавят оптимизацию и ваша сторонняя библиотека поломается.


Кстати, отвечу заодно и на


достаточно иметь 3-5 публикаций в журнале и тебя по О визе перевезут

я не знаю, что такое O-виза, и письма из-за океана — выбрасываю, не читая, но кроме публикаций в журналах еще бывает OSS, SO, даже заметный блог — уже почти достаточно, чтобы начать получать предложения. Я даже просто в твиттере постоянно вижу проскакивающие вакансии на весьма экзотических языках (и не только, просто в шарпе/джаве сложнее стать заметным; впрочем, в руби мне как-то удалось).

Да, я упростил «as in ghc со 100500 расширениями костылями» до «дикого хлама в prelude и миллиарда способов чихнуть» потому что ноги костылей растут именно оттуда.


Разумеется, на идрисе писать проще (для агды мне надо освежить нотацию, но не думаю, что это станет прямо порогом, просто пока соль была). Проще потому, что идрис разрабатывался с учетом родовых ошибок хаскеля, и даже небольшой рефакторинг пакетов 1 → 2 не вызывает ни одного wtf. Ну а еще — [nb непопулярное мнение] — проще потому, что зависимые типы — это очень изящная, внятная, полезная, целостная и непротиворечивая парадигма. А типы, как в хаскеле — это попытка натянуть сову на скелет мамонта.


В хаскеле (и всем остальном независимо типизированном, привет, Куба) — типы это помощь компилятору, которая на каждом шагу вставляет палки в колеса разработчику. А в идрисе/агде — это помощь разработчику, милостиво предоставляемая компилятором.


Модуль один, но какие разные векторы!

В официальной документации написана ерунда? — Охотно верю. Нужно рыться в клоне npm, чтобы найти работающую с многопоточностью библиотеку? — Верю еще охотнее.


«Верифицированные многопоточные примитивы» — звучит обалденно круто, как насчет вот такой простой задачки: я хотел бы в 2020 году иметь возможность запустить по гринтреду на каждую FSM у себя в коде (десятки, сотни тысяч, миллионы) и пойти заниматься своими делами, пока мои миллионы транзакций там обрабатываются (они зависимы друг от друга, разумеется, ивент в одной может триггернуть state change в других, или создать новые). Если надо — то по хэшрингу раскидать выполнение на несколько машин в кластере. В идеале — не с помощью какой-то левой библиотеки, а средствами языка.

в более сложной области, где-то наверное на полпути от мейнстрима к хачкелю\скалке

Шутите, что ли? Вряд ли существует более дубовый и простой с точки зрения синтаксиса язык, чем хаскель. У него высоченный порог входа из-за дикого хлама в prelude и миллиарда способов чихнуть в любом месте. Так-то только лисп проще. Скала без дикого синтаксического сахара — абсолютно внятный и очень красивый язык с минимальным порогом входа; да гиковский сахарок постепенно превращает ее во write-only сущность, но это никак не повышает порог входа, опять же. Можно легко проработать десять лет на скале и думать, что это котлин, если не лезть в дебри.


Я лично не вижу ничего концептуально сложного в расте потому, что там ничего такого и нет. Даже трансформации данных в R, или неявные преобразования типа в COBOL требуют куда большего умственного напряжения при попытке их понять, чем весь раст вместе взятый.


Так что нет, не убедительно. Синтаксис, как синтаксис — не лучше, и не хуже остальных.

Rust as a language doesn't really have an opinion on how to do concurrency or parallelism. — https://doc.rust-lang.org/nomicon/concurrency.html

В 2020 году сие звучит даже хуже, чем оригинальная кооперативная многозадачность в Go. Я просто не представляю себе, насколько оторванными от реального мира нужно быть, чтобы с таким подходом браться за создание языка в XXI веке.

Информация

В рейтинге
Не участвует
Откуда
Barcelona, Barcelona, Испания
Дата рождения
Зарегистрирован
Активность