powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Scala 3.0.0 релизнулась
24 сообщений из 49, страница 2 из 2
Scala 3.0.0 релизнулась
    #40125274
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Зачем я должен помнить что ListMap - это иммутабельная версия LinkedHashMap?
Возможно, затем, что неизменяемые коллекции достаточно непрактичны, чтобы пользоваться только ими?
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40128901
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полезная штука. Давно не хватало. import ... as.

Код: java
1.
2.
import org.apache.lucene.document.Document as LDocument
import org.w3c.dom.Document as XDocument



Собственно она не в тройке. Она еще в старых версиях была. Просто жаль что в Java нету.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40133873
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как это работает? Подобный синтаксис вызывает смущение.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
class SimpleLru {

  def apply[A, B](maxEntries: Int): util.LinkedHashMap[A, B] {
    def removeEldestEntry(eldest: Map.Entry[A, B]): Boolean
  } = new java.util.LinkedHashMap[A, B](16, 0.75F, true) {
    override def removeEldestEntry(eldest: java.util.Map.Entry[A,B]): Boolean = size > maxEntries
  }
}



Тоесть я знаю как работает LRU. Мне интересно как читать такой синтаксис.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40133899
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А как это работает? Подобный синтаксис вызывает смущение.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
class SimpleLru {

  def apply[A, B](maxEntries: Int): util.LinkedHashMap[A, B] {
    def removeEldestEntry(eldest: Map.Entry[A, B]): Boolean
  } = new java.util.LinkedHashMap[A, B](16, 0.75F, true) {
    override def removeEldestEntry(eldest: java.util.Map.Entry[A,B]): Boolean = size > maxEntries
  }
}



Тоесть я знаю как работает LRU. Мне интересно как читать такой синтаксис.


Похоже на обёртку вокруг linkedhashmap

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public static class LruCache<K, V> {
        private static final boolean SORT_BY_ACCESS = true;
        private static final float LOAD_FACTOR = 0.75F;
        private final Map<K, V> lruCacheMap;
        private final int capacity;

        public LruCache(int capacity) {
            this.capacity = capacity;
            this.lruCacheMap = new LinkedHashMap<>(capacity, LOAD_FACTOR, SORT_BY_ACCESS);
        }

        public V get(K key) {
            return lruCacheMap.get(key);
        }

        public void put(K key, V value) {
            if (lruCacheMap.containsKey(key)) {
                lruCacheMap.remove(key);
            } else if (lruCacheMap.size() >= capacity) {
                lruCacheMap.remove(lruCacheMap.keySet().iterator().next());
            }
            lruCacheMap.put(key, value);
        }
    }

    public static <K, V> LruCache<K, V> createLruCache(final int capacity) {
        return new LruCache<>(capacity);
    }



Так проще и на java.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40133900
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Так понятнее?)))

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class SimpleLru {

  trait LRUHashMap[A,B] extends util.LinkedHashMap[A, B] {
    def removeEldestEntry(eldest: Map.Entry[A, B]): Boolean
  }

  def apply[A, B](maxEntries: Int): LRUHashMap[A,B] = new java.util.LinkedHashMap[A, B](16, 0.75F, true) with LRUHashMap[A,B] {
    override def removeEldestEntry(eldest: java.util.Map.Entry[A,B]): Boolean = size > maxEntries
  }

}



Ну или так
Код: java
1.
2.
3.
4.
trait LRUHashMap[A, B] {
    this: util.LinkedHashMap[A, B] =>
    def removeEldestEntry: Boolean
  }
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40133902
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. С трейтом как-то понятнее. Спасибо.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40135715
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как в сборщике SBT копировать зависимости в свой фолдер?

Для maven я делал вручную так.

Код: java
1.
mvn dependency:copy ...



Для SBT установил флажок

Код: java
1.
retrieveManaged := true



Но не вижу чтоб копировались.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40135992
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Выключить useCoursier. Потому что с ним баг . Может быть, еще настроить configurationsToRetrieve.

Или по рабоче-крестьянски. Пишем свой task, в нем берем managedClasspath и из него копируем куда угодно.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40135997
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть пример такой таски?
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136055
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
O_79_O
самое главное во всей этой чехарде jvm языков - все они останутся на уровне инди приложений ,а джава будет дальше двигаться,потому что почему? правильно ,потому что комьюнити просто огромное
гугл лет 5 назал кричал что заменит жаву на что то там - в итоге что то там так и осталось что то там
в этой истории все хорошо,но главное что джава трахнула всех)


Вообще-то гугл уже заменила Java на что-то другое.
Если смотреть на вакансии, то для Android разработчиков Kotlin mast have однозначно.

Да и для бакендеров, как я, kotlin знать желательно.
Т.к. часто под вакансиями Java-разработчиков скрывается Kotlin.
На двух последних работах java-разработчики писали на Kotlin.

<:o)

на котлы заменили но это вроде как в мобилке только. а бэк - там разгул. и джава и скала и те же котлы и всякие груви с кложами.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136200
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Точно такой нет, но есть очень похожая. Выложил здесь .

Это древний sbt, но проблем перевести на новый не должно быть. Начинать смотреть можно с assemblyExploded и assemblyClasspath. Наверное, нужно будет managedClasspath вместо fullClasspath. Ну и целевой каталог по-другому настроить.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Капец это сколько кода надо написать для простой вещи?

Мне по сути надо 3 артифакта скопировать.

Код: java
1.
IO.copyFile(....)



Из maven repository к себе локально чтоб дернуть spark-submit где просто есть
один параметр который перечисляет все сборки.

Толстый jar собирать не хочу.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136308
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Капец это сколько кода надо написать для простой вещи?
Мне по сути надо 3 артифакта скопировать.


Блин, ну а если попробовать понять, что там происходит? И там как раз много лишнего. А для "трех файлов" все сводится к чему-то в духе

Код: sql
1.
2.
3.
4.
someTask := 
  externalDependencyClasspath.value
    .map(_.data)
    .foreach(lib => IO.copyFile(lib, куда(lib))



Плюс немного магии для связи. Или вообще

Код: sql
1.
2.
3.
4.
5.
6.
7.
externalDependencyClasspath := {
  val oldTaskValue = externalDependencyClasspath.value
  oldTaskValue
    .map(_.data)
    .foreach(lib => IO.copyFile(lib, куда(lib))
  oldTaskValud
}



Не тестировал, это общая идея.

P.S. Я не собираю fat jar! Я собираю executable jar и zip-архив со всеми нужными библиотеками.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136787
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот как идеологически верно создавать инстации классов в Scala?

Тоесть аналог java Class.forName(..).newInstance()
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136794
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А вот как идеологически верно создавать инстации классов в Scala?

Тоесть аналог java Class.forName(..).newInstance()

Для каких нужд? Рефлексия в скале не нужна, есть type class-ы. Единственное что приходит на ум - некая плагинная архитектура, или operability with java, ну в таком случае тот же самый Class.forName(..).newInstance()
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136810
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть конфигурация.

Код: java
1.
2.
 --conf "spark.geoCageApiKey=0000111111222222223333333" \
 --conf "spark.geoCageMock=true" \



И есть реализация которая содержит condition. Поскольку сервис ограниченный и платный то для задач
тестирования и отладки я использую заглушку. Мок.

Код: java
1.
2.
3.
4.
5.
6.
val geoCageMock = conf.get("spark.geoCageMock")

    val geoCageService : GeoCageBasic = geoCageMock match {
      case "true" => new GeoCageServiceMock
      case _ => new GeoCageService
    }


Вот хочу избавится от явного кондишена и указать просто полное имя класса в контексте языка Scala.
Вместо true/false - полное имя класса.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136828
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Есть конфигурация.

Код: java
1.
2.
 --conf "spark.geoCageApiKey=0000111111222222223333333" \
 --conf "spark.geoCageMock=true" \



И есть реализация которая содержит condition. Поскольку сервис ограниченный и платный то для задач
тестирования и отладки я использую заглушку. Мок.

Код: java
1.
2.
3.
4.
5.
6.
val geoCageMock = conf.get("spark.geoCageMock")

    val geoCageService : GeoCageBasic = geoCageMock match {
      case "true" => new GeoCageServiceMock
      case _ => new GeoCageService
    }


Вот хочу избавится от явного кондишена и указать просто полное имя класса в контексте языка Scala.
Вместо true/false - полное имя класса.

Ну тут все адовый java-style, так что в таком же стиле и надо инстанцировать через Class.forName(), бессмысленно спрашивать о том как лучше сделать такое в scala. В Scala просто так не делают. Примерно такой же смысл как использовать hibernate на scala.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136832
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как идеологически правильно?
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136955
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... каррирование и частичная вычислимость. Что есть общее и что - разница?
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136959
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А как идеологически правильно?

Вкратце -
1) все внешние модули через трейты. trait GeoStrategy
2) зависимость описывается через implicit. def doWork(implicit geo: GeoStrategy) либо сложнее через Final Tagless архитектуру, но это долгий рассказ
3) Все имплементации описываются в отдельных файлах. StrategyLive { impliciut val geo = new GeoStratgey}, StrategyMock{implicit val geo = GeoMock}
4) Никакого чтения в рантайме. Надо запустить тест - запусти тест, если реальный апп - то его. Решается созданием двух мейн классов
App{ import StrategyLive._} Test{import StartegyTest._}
5) Со спарком немного сложнее, там надо смотреть по обстоятельствам. Там не совсем идеологический scala style, что-то среднее, если надо то можно и Class.forName()
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136967
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
mayton
А как идеологически правильно?

Вкратце -
1) все внешние модули через трейты. trait GeoStrategy
2) зависимость описывается через implicit. def doWork(implicit geo: GeoStrategy) либо сложнее через Final Tagless архитектуру, но это долгий рассказ
3) Все имплементации описываются в отдельных файлах. StrategyLive { impliciut val geo = new GeoStratgey}, StrategyMock{implicit val geo = GeoMock}

Да. Да вот на эту тему есть какой-то пример? Читая Одерского или Хорстмана я не нахожу четкого ответа на вопрос.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40136984
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
забыл ник
пропущено...

Вкратце -
1) все внешние модули через трейты. trait GeoStrategy
2) зависимость описывается через implicit. def doWork(implicit geo: GeoStrategy) либо сложнее через Final Tagless архитектуру, но это долгий рассказ
3) Все имплементации описываются в отдельных файлах. StrategyLive { impliciut val geo = new GeoStratgey}, StrategyMock{implicit val geo = GeoMock}

Да. Да вот на эту тему есть какой-то пример? Читая Одерского или Хорстмана я не нахожу четкого ответа на вопрос.


Ну тут на самом деле в scala сообществе большой такой косяк. Это довольно сложные концепции, к тому же завязанные на ФП, на просто хелловорлде они не совсем понятны и скорее оверкилл и оверинжениринг. Не встречал хороших статей которые обьясняют прямо с нуля. Сам прорывался к пониманию не один месяц, джуны и мидлы сразу после освоения нормальный туториал написать не могут, а те кто уже в теме пишут слишком сложно и не обьясняют некоторые концепты. А езе более всего осложняет ситуацию факт что вся эта машинерия(считай подход) сконцентрированы в сторонних библиотеках(cats, zio как основные) и имеют немного разные подходы и терминологию. Для начала надо разобраться что такое Type Class и Final Tagless, по последнему может вот это поможет - https://medium.com/becompany/tagless-final-in-scala-best-practices-8e5368d217d7
Лично я сторонник ZIO
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40137022
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала надо разобраться что такое Type Class и Final Tagless, по последнему может вот это поможет - https://medium.com/becompany/tagless-final-in-scala-best-practices-8e5368d217d7
С TypeClass знаком. Ну по крайней мере они не вызывают вопросов.
А вот Final Tagless - это надо посмотреть...

Вообще заметил что чем дальше погружаешся в правильный ФП - тем больше код превращается
в доказательство теоремы. И разработчик - вроде как шизофреничный математик который сам
себе что-то доказывает.
...
Рейтинг: 0 / 0
Scala 3.0.0 релизнулась
    #40137157
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton


Вообще заметил что чем дальше погружаешся в правильный ФП - тем больше код превращается
в доказательство теоремы. И разработчик - вроде как шизофреничный математик который сам
себе что-то доказывает.

Что-то в этом есть. Но с другой стороны может программа и должна быть такой?
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Scala 3.0.0 релизнулась
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]