Как стать автором
Обновить
75
0
Дмитрий @darkdimius

Компиляторщик

Отправить сообщение
У меня хорошие новости: оригинальный пример работает в новом компиляторе для Scala: Dotty.

Заголовок спойлера
$ dotr
Starting dotty REPL...
Welcome to Scala.next (pre-alpha, git-hash: 54d7089) (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45).
Type in expressions to have them evaluated.
Type :help for more information.
scala> object TestFail extends App {
val genInt = new GenInt(42)
val i = GenTest.test(genInt)
}
defined module TestFail

scala>

Минус не я поставил.
Наоборот, я рад когда люди задают вопросы которые позволяют показать отличия в дизайне между языками.
Связанная. В Scala есть definition side variance, у вместо неё use site variance.


Связанная. В Scala есть definition side variance, у Java вместо неё use site variance.
Если смешивать две в системе типов сильно рисковано, а в системе вывода типов (inferece) — тем более.

Кстати, заглавие статьи содержит ошибку. Пример не ломает систему типов, а систему вывода(inference) типов. Последняя — по определению является попыткой компилятора угадать какой тип там должен был быть и компилятор не может всегда угадывать.
Связанная. В Scala есть definition side variance, у вместо неё use site variance.
Ссылка в конце статьи на Higher Kinded types устаревшая и описывает не то что в Dotty.
Самое близкое — https://infoscience.epfl.ch/record/222780?ln=en
Dotty — кодовое имя на время стабилизации. Релиз будет под именем Scala 3
Спасибо за статью,
было бы интересно узнать сравнение с Facebook Infer, и в целом отношение к separation logic, на которой в последнее время строят статические анализаторы.
через 2 года можно снова подтвердить свое «студенчество» и снова получить еще 2 года бесплатно.
Знаю что мое мнение не будет популярным, но все же.

Я написал пару статей для хабра, в то время когда еще не был экспертом в какой-либо области.
Сейчас, уже являясь экспертом, у меня нет времени долго писать\редактировать статью. У нас в организации есть люди пищущие статьи, но для англ-среды. Да и мои научные публикации тоже теперь на английском.

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

Потому я теперь живу на reddit и HackerNews. Где могу просто запостить ссылку на основное объявление\доклад\слайды\видеозапись и участвовать в обсуждении.
Вы не правы. Vector в Scala это = RRB Tree infoscience.epfl.ch/record/169879/files/RMTrees.pdf
Не говоря о том, что если вас волнует время компиляции, я, как разработчик компилятора, очень не советую использовать трюки как в этой статье.
Можете еще добавить ссылку на d-d.me/scalaworld2015/# — тут больше деталей)
Я не хочу растраивать, но то что представлено в этой статье — не настоящие типы обьединения, а Хак. Вот пример использования типов-обьединений, которые нужны для корректности теории, и не поддерживается тут.

class A(x: Int)
class B(x: Int)
class C(x: Array[Int])

object Test{
  def foo(x: A | B): Int = x.x
  def bar(x: A | C): Int | Array[Int] = x.x
}
Стандартная библиотека связана гарантиями обратной совместимости, и поэтому добавлять туда что-то новое очень трудно. Классы типов в языке возникли сами по себе, на основе имплиситов, и именно поэтому они не используются широко в стандартной библиотеке — когда она создавалась, про них и не думали.


Я не хочу вас расстраивать, но у вас явно ложное впечатление о Scala и ее истории.
Вопервых, в scala 2.8 была сломана вся обратная совместимость. И половина стандартной библиотеки использует implicits, с тех пор. Про это все думали, и до этого были views которые решали подобную задачу.

Я слабо разбираюсь в компиляторостроении, но далеко не факт, что абстракция классов типов нужна при разработке компилятора, и это может быть объяснением того, что в dotty они не используются.

Вы спорите с разработчиком dotty. Мы их используем, наоборот, мы НЕ используем cake pattern как старый компилятор, те — у нас почти все — классы.

Также хочу привести в пример scala-pickling, который является официальным проектом Scala, который целиком основан на классах типов и который, насколько я в курсе, хотят применить или уже применяют в компиляторе.

Вы не в курсе. Его не применяют и планов нет. Есть планы юзать в Spark. Самая новая сериализация в Dotty — TASTY не имеет ничего общего с pickling.

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

Поэтому единственным аргументом, который вы можете привести в поддержку того, что классы типов это «не то, что вообще рекомендовано к использованию на Scala» — это явные и недвусмысленные заявления членов сообщества, особенно тех, кто обладает достаточным «весом». Без этого такие заявления — всего лишь ваши собственные рассуждения.


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


Я вам скажу вот что, если бы они были хороши, вы бы нашли их в стандатной библиотеке и они бы были использованы в компиляторе. Либо в старом — scalac, либо в новом — dotty.

Это заявление очень далеко от реальности. Максимум, на что тянет scala-records — это реализация части функциональности, связанной с record'ами, которые в shapeless представляются в виде HList'а от специального вида пар.

но говорить, что оно полностью заменяет и лучше чем shapeless в целом — это просто троллинг.


Я этого и не говорил.
Я НЕ говорил что scala-records реализует все в shapeless. Я сказал, что для конкретной задачи в scala-сообществе есть лучше решения чем shapeless. В частности,
Например HLists и HMaps намного лучше(и по API и по производительности) реализованы в scala records
.
Сразу скажу знаний Scala и опыта у меня близко к нулю, что я компенсирую знаниями и опытом по-жизни. Сразу было понятно что мне нужны Type Classes, ну и я давай глядеть в Интернет. Сразу натыкаюсь на некую, да простят меня фанаты Scala, либу shapeless, от Miles Sabin.


Я один из разработчиков компилятора и языка Scala, вы посмотрели не в ту сторону — shapeless и type classes это не то, что вообще рекомендовано к использованию на Scala.

Я конечно глубоко не вникал, может этот shapeless на который надо убить тучу времени (и который видимо далеко не самая навороченная библиотека Scala мира) делает что то там еще полезное, но у меня нет слов — люди делают про это какие-то толки на конфах, воркшопы, презы на 56 страниц типа Demystifying Shapeless. И все это зачем? Чтобы выковырять тип значения во время компиляции, братан.


Вы сделали ровно теже выводы что и мы. Просто не используйте shapeless. Он является скажем так «радикальной» частью сообщества, с которой многие не согласны.
Все что он делает можно реализовать лучше, и сделано уже в сообществе. Например HLists и HMaps намного лучше(и по API и по производительности) реализованы в scala records.
google-authenticator (для андроида живёт в отдельном репозитории) — это open source, что позволяет посмотреть на его потроха и убедиться, что всё нормально.

У вас нет гарантии что он собран из того исходника без патчей.

Yibikey neo мне более интересен тем, что на нём есть openpgp-апплет

Надеюсь вы в курсе developers.yubico.com/ykneo-openpgp/SecurityAdvisory%202015-04-14.html По сути ключи там не защищены PIN-ом.

«Поддержка» totp была и на старых (простых yubikey)

Новые Neo тоже не знают про время и требуют приложение на хосте: github.com/Yubico/yubioath-desktop
С любыми другими приложениями, у вас также нет никакой гарантии.
Если нужна безопасность повыше — можно использовать YubiKey NEO, он тоже умеет TOTP. И из него ключи не вытянуть никак.
Вы пробовали Authy? Я использую его, тк он поддерживает больше типов 2FA.
То что вы нарисовали — Иерархия коллекций Scala. Правда упрощенная.
Советую обратить внимание туда, ИМХО на данный момент это самые близкие к полнофункциональным коллекции.
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность