Co z tą Scalą ?

0

Scala.js nie ma jeszcze wersji 1.0, niedawno wyszła dopiero wersja 1.0.0-M2: https://github.com/scala-js/scala-js/milestones?state=closed

Scala.js jest raczej dla backendowców, którzy chcą zaklepać frontend bez konieczności przerzucania się na nowy język. Prędzej spodziewałbym się Scalowca-backendowca, który zaczyna używać Scali.js niż frontendowca. TypeScript wygląda na naturalny wybór dla kogoś kto opanował JavaScript i siedzi mocno w samym frontendzie.

Mimo wszystko sądzę, że Scala.js powinna zwiększyć ogólną popularność Scali. Pisanie w jednym języku frontendu i backendu jest bardzo interesującą perspektywą. Ponadto JVM jest znacznie dojrzalszą i wydajniejszą platformą do backendu niż Node.js.

0

Tu chyba jest najistotniejsze stwierdzenie - https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/comparison-to-scala.html - "Taking this into account, if you are happy with Scala, you most likely do not need Kotlin" - ja jestem happy with scala :D

1

Kotlin raczej nigdy nie był i nie jest zagrożeniem dla Scali. Może być atrakcyjny co najwyżej dla osób, które wybrały Scalę z niewłaściwego powodu tj. jako Java++ z lambdami i ładniejszą składnią.

Ale esencją Scali jest to, że pozwala budować znacznie silniejsze abstrakcje niż Java/Kotlin choćby przez to, że obsługuje typy wyższych rzędów, typowanie zależne, typeclasses, makra. Dzięki temu Scala ładnie radzi sobie w sytuacji, gdzie w takiej Javie czy Kotlinie trzeba zrobić copy-paste kodu (złamanie DRY) albo modyfikować istniejące klasy (złamanie open-closed principle), albo używać refleksji czasu wykonania. Jest to bardzo ważne dla twórców bibliotek.

Jeśli chodzi o praktyczne aspekty Scala też nie stoi w miejscu. W 2017:

  • Wsparcie IDE jest na bardzo wysokim poziomie, właściwie nie gorsze niż dla Javy. Przez ostatnie pół roku nie miałem ani jednej sytuacji aby IDE pomyliło się w podkreśleniu błędów czy zepsuło coś przy refactoringu. Szybkość też jest bardzo dobra. Zarzut, że do Scali nie ma dobrego IDE to już przeszłość.
  • Współdziałanie Scali i Javy jest na tym samym poziomie co Kotlin. Od Scali 2.12 Scala rozumie lambdy Java i na odwrót, podobnie można już generować metody statyczne dla klientów w Javie.
  • Kompilator jest szybszy niż kiedyś. 2.12 nawet o 30% szybszy od 2.11. Przy odpowiednio skonfigurowanym serwerze kompilacji i kompilacji przyrostowej czas kompilacji nie jest w praktyce problemem. Nadal nie wszystkie narzędzia niestety to wspierają - np. Gradle jest mocno w tyle za SBT, bo nie umie używać serwera kompilacji prawidłowo i tam kompilacja mocno ssie. Twitter pracuje nad dalszymi ulepszeniami kompilatora, Dotty też ma być znacznie szybszy.
  • Ekipa Oderskiego pracuje nad równoczesnym uproszczeniem języka i zwiększeniem jego ekspresywności. Pewne rzeczy, o które się można było pokaleczyć są systematycznie usuwane (np. typy egzystencjalne). Makra, które są potężne, ale trudne, też mają przejść odnowę.
0

Pisze od kilku tygodni projekt w kotlinie - nie chciałem się bić o Scalę - stwierdziłem, ze kotlin będzie i tak OK.
Ogólnie dramatu nie ma - łatwiej jest programować Haskella w Kotlinie niż Haskella w Javie ( co mi sie do tej pory często zdarzało).

Ale brakuje najbardziej mi:

  • for comprehension

  • type projections (i wychodzi momentami dramatycznie generykowaty kod),

  • type classes: ( tego ostatniego wielu https://github.com/Kotlin/KEEP/pull/87)

  • typealiasy w kotlinie to bieda (to mnie zaskoczyło - wyczytałem, że są... i dopiero w trakcie wyszło, że tylko globalne)
    (a ja akurat lubię lokalne typealiasy bardzo)

1
Zakręcony Wąż napisał(a):

Scala jest świeża, ale Kotlin świeższy. Ale nie lubię Kotlina, bo ruscy wymordowali całą Polską inteligencję i nie będę wspierał ich języka programowania i ich IDE. Wybieram Scala i Eclipse/NetBeans.

Rozumiem, ze niemieckimi samochodami tez nie jezdzisz, bo wojna? Do Austrii na narty nigdy nie pojedziesz, bo Adolf? Z Ukraincami wspolpracowal nie bedziesz, bo Wolyn?

0

Generalnie nie jestem fanem JVM. Nie jestem też fanem Javy, ale uważam Kotlina za lepszy język.
Próbowałem ostatnio „wyrzeźbić” w Kotlinie coś używając OpenGL-a, niestety okazało się że biblioteka wrapująca (JOGL) nieprawidłowo inicjalizuje kontekst GLa, więc wczoraj pomysł poszedł do kosza.
Ale Kotlin to fajny język. Gdyby tak wydali wersję na .NET…

0
Zakręcony Wąż napisał(a):

Ale nie lubię Kotlina, bo ruscy wymordowali całą Polską inteligencję i nie będę wspierał ich języka programowania i ich IDE.

Szkoda, że wymordowali, bo może teraz więcej ludzi by wiedziało jak prawidłowo pisze się przymiotniki.

0
somekind napisał(a):
Zakręcony Wąż napisał(a):

Ale nie lubię Kotlina, bo ruscy wymordowali całą Polską inteligencję i nie będę wspierał ich języka programowania i ich IDE.

Szkoda, że wymordowali, bo może teraz więcej ludzi by wiedziało jak prawidłowo pisze się przymiotniki.

Szkoda że nie masz jaj poprawiać błędy zarejestrowanych użytkowników, ach ta poprawność polityczna. Zapewne nie chcesz się narazić.

0

W temacie nikt nic nie pisał przez prawie 2 lata więc jako autor wątku pozwolę sobie go odświeżyć pytając czy coś się zmieniło ostatnimi czasy w świecie Scali?
Zauważyliście jakąś poprawę jeśli chodzi o rozwój i popularność języka? Z tego co widze to trochę się poprawiło ale raczej nieznacznie (przynajmniej patrząc po ogłoszeniach). Dużo się jednak mówiło o tym że Scala znalazła nisze w postaci big data etc natomiast zastanawiam się czy rozwój i popularnośc Pythona trochę nie przykryje Scali? Kotlin też się dość mocno rozwija - pracowałem nawet w jednym teamie który robił apkę (niezwiązaną z Androidem!) w Kotlinie i było to naprawdę ciekawe doświadczenie. Osobiście też mam jakieś takie odczucie jakby Kotlin był bardziej intuicyjny i przyjemny. Co myślicie? Co z tą Scalą?

1

Wydarzyło sie pare dram, środowisko sie podzieliło, poza tym nadal ch**** ale stabilnie. :D

1

Na Górnym Śląsku bez zmian. Jest jedna firma która mało płaci. Ale teraz przejeło ich jakieś korpo i będą zatrudniać, to może też zaczną normailnie płacić

1

Poprawiło się od strony narzędzi. Scala center działa bardzo prężnie i dostarcza bardzo praktyczne narzędzia.
Do tego stopnia, że kompilacja Scali w naszym projekcie odbywała się szybciej i sprawniej niż Javy, co spowodowało że ostatecznie mój zespół zaczął używać narzędzi Scala do kompilacji modułów pisanych w czystej Javie, gdzie nie ma nawet scali na classpath.

Miny deweloperów, którzy wcześniej czekali na kompilator kilka minut po zmianie jednej linijki, a teraz taka sama zmiana rekompiluje się w 300 ms - bezcenne.

0

@tdudzik: zapomniałeś o najważniejszym - Skoda też wypuściła Scalę, więc teraz nawet vaginiarze mogą w Scali śmigać. ;)

0

Renault też miał swoją Scalę, a nawet kilka: https://en.wikipedia.org/wiki/Renault_Scala
https://en.wikipedia.org/wiki/Volkswagen_Scirocco miał wariant o nazwie Scala
Lancia Gamma Scala: http://www.carsfromitaly.net/lancia/concepts/gamscala.html
https://en.wikipedia.org/wiki/Dacia_Solenza miała wariant o nazwie Scala

Sporo tego :]

4

Czyli trzeba kupic sobie Skodę Scale jedząc zapiekanke polaną ketchupem Kotlina będac na wyspie Java

0

Wyszła Akka 2.6: https://akka.io/blog/news/2019/11/06/akka-2.6.0-released
Zawiera stabilną wersję Akka Typed! Spory kamień milowy dla Akki.

1

Pisze wlasnie scenariusze testow w Gatlingu i jako osoba ktora nie miala wczesniej do czynienia ze Skala poza Hello World i probujac pisac jak w Javie -> jest to ciekawe doswiadczenie :)

0

Powiedzcie mi jak to jest z czasem kompilacji w Scali? Kotlin miał się szybciej kompilować i ciekawi mnie co z tego wyszło?
https://blog.jetbrains.com/kotlin/2020/09/the-dark-secrets-of-fast-compilation-for-kotlin/

0

Czy mogę uzyskać w Scali informacje jakiej wersji Scali używam? W Kotlinie mam taki program, a w Scali jak to będzie wyglądac?

fun main() {
    println("Major : ${KotlinVersion.CURRENT.major}")
    println("Minor : ${KotlinVersion.CURRENT.minor}")
    println("Patch : ${KotlinVersion.CURRENT.patch}")

    println("Version : ${KotlinVersion.CURRENT}")

    println("Is at least 1.1 ${KotlinVersion.CURRENT.isAtLeast(1, 1)}")
    println("Is at least 1.1.1 ${KotlinVersion.CURRENT.isAtLeast(1, 1, 1)}")

    val supportedVersion = KotlinVersion(1, 1, 1)

    if (KotlinVersion.CURRENT > supportedVersion) {
        println("Supported..")
    }
}
2
frozo napisał(a):

Czy mogę uzyskać w Scali informacje jakiej wersji Scali używam?

To powinno być w konfiguracji toola do budowania

2

Ja wiem jakiej wersji Scali używam, ale chciałbym odczytać to za pomocą kodu

A to próbowałeś https://stackoverflow.com/questions/6121403/how-do-i-get-the-scala-version-from-within-scala-itself ?

A działa https://gist.github.com/923640/131ba9b367e4ea111e35ac1d57bf1279596a0439 , czyli

val props = new java.util.Properties
props.load(getClass.getResourceAsStream("/library.properties"))
val line = props.getProperty("version.number")
println(line)
1

Dzięki działa, tylko że ja przez Intellij zainstalowałem Scala 3.1.1, a pokazuje mi Scale w wersji 2.13.6.

Ale co zainstalowałeś? Kompilator czy bibliotekę dodałeś do Intellij?

0

Przy tworzeniu nowego projektu wybrałem Scale i w Download pobrałem wersje Scala 3.1.1, ponieważ nie utworzyło by mi projektu.

0

A w File -> Project Structure -> Global Libraries co masz wybrane?

0

Witam, mam pytanie czy mogę w sbt Idea zaktualizować Scalę do wersji 3.2.2, skoro IDE podpowiadało mi że jest dostępna tylko wersja 3.2.0 i 3.2.1? Ewentualnie czy to samo mi zaktualizuje? Ten program poniżej pokazuje mi aktualną wersję 3.2.1. Potrafi ktoś obeznany w Scali przepisać go do wersji Scala 3.2.2 i zmniejszyć jego objętość?

package main

object ScalaVersion extends App {
  def props(url: java.net.URL): java.util.Properties = {
    val properties = new java.util.Properties()
    val is = url.openStream()
    try {
      properties.load(is)
      properties
    } finally is.close()
  }

  def scala2Version: String =
    props(getClass.getResource("/library.properties")).getProperty("version.number")

  def checkScala3(res: java.util.Enumeration[java.net.URL]): String =
    if (!res.hasMoreElements) scala2Version else {
      val manifest = props(res.nextElement)
      manifest.getProperty("Specification-Title") match {
        case "scala3-library-bootstrapped" =>
          manifest.getProperty("Implementation-Version")
        case _ => checkScala3(res)
      }
    }

  val manifests = getClass.getClassLoader.getResources("META-INF/MANIFEST.MF")

  val scalaVersion = checkScala3(manifests)
  val javaVersion = System.getProperty("java.version")

  println(s"Scala: $scalaVersion")
}
1

@scot_sbt: scala 3.2.2 jest już oficjalnie dostępna. widać to tutaj: https://github.com/lampepfl/dotty/releases/tag/3.2.2

jeśli używasz narzędzia sbt, to zmiana wersji scali jest opisana tutaj: https://www.scala-sbt.org/1.x/docs/Basic-Def.html
zależnie od tego jak masz zdefiniowanego builda, musisz przypisać do klucza scalaVersion wersję 3.2.2 np taką wstawką:

ThisBuild / scalaVersion := "3.3.2"

ale (powtarzając jeszcze raz) to czy powyższa linijka zadziała zależy od tego, jak masz zdefiniowanego builda.

Ten program poniżej pokazuje mi aktualną wersję 3.2.1. Potrafi ktoś obeznany w Scali przepisać go do wersji Scala 3.2.2 i zmniejszyć jego objętość?

w tym kodzie jest za dużo javizmów, żeby dało się go solidnie poskracać. scala nie ma swoich nakładek na 100% ekosystemu javy. na razie widzę tylko jedną potencjalną okazję do skracania - możesz zamienić zabawy z java.util.Enumeration na normalny iterator, dzięki konwersjom: https://docs.scala-lang.org/overviews/collections-2.13/conversions-between-java-and-scala-collections.html . ewentualnie możesz też opakować java.util.Properties w scalową mapę, także dzięki wspominanym konwersjom.

a nie lepiej po prostu zobaczyć do zależności projektu w ide albo do classpatha i widzieć od razu jakie masz biblioteki i w jakich wersjach? jeśli masz program w scali i odpalasz pod jvmem to zawsze w zależnościach (czy classpathie) jest scala-library-x.y.z.jar czy scala3-library-x.y.z.jar czy jakoś tak.

0

@Wibowit: Dzięki za odpowiedź! To jak teraz w Scali 3.2.2 powinno się napisać główny program? Scala 3 oferuje nowy sposób definiowania programów, które mogą być wywoływane z wiersza poleceń: Dodawanie adnotacji @main do metody zamienia ją w punkt wejścia programu wykonywalnego: Przykład dla Scali 3

object Main  {
  @main def run() = {
    val ages = Seq(42, 75, 29, 64)
     println(s"The oldest person is ${ages.max}")
     println(s"The oldest person is ${ages.min}")
  }
}

W poprzednich wersjach Scala 2 proste programy wywoływane z wiersza poleceń wyglądały tak: Przykład dla Scali 2

object Main extends App {
  val ages = Seq(42, 75, 29, 64)
    println(s"The oldest person is ${ages.max}")
    println(s"The oldest person is ${ages.min}")

Inny Przykład dla Scali 2

object Main {
  def main(args: Array[String]): Unit = {
    val ages = Seq(42, 75, 29, 64)
      println(s"The oldest person is ${ages.max}")
      println(s"The oldest person is ${ages.min}")
  }

Czyli teraz w Scali 3.2.2 nie muszę już pisać w programach konsolowych object Main { def main(args: Array[String]): Unit = {} ani extends App?

0

Mam taki prosty program napisany w języku D, chciałbym go przepisać do Scali 3.2. Ale nie wiem jak wyświetlić rozmiar typu w bitach i bajtach.

// properties of types
writeln("Name of the type: ", int.stringof);
writeln("Size in bytes: ", int.sizeof);
writeln("Min value: ", int.min);
writeln("Max value: ", int.max);
writeln("Initial value: ", int.init);

Dla przykładu taki program w Javie wygląda tak.

Integer Int = 1234567;
System.out.println("Type is " + Int.getClass());
System.out.println("Name of the type " + Int.getClass().getSimpleName());
System.out.println("Bits size of type " + Integer.SIZE);
System.out.println("Bytes size of type " + Integer.BYTES);
System.out.println("Max value " + Integer.MAX_VALUE);
System.out.println("Min value " + Integer.MIN_VALUE);

Obecnie to mam w programie Scalowym.

@main def Run = {
  // properties of types
  println("Name of the type: " + classOf[Int].getSimpleName)

  println("Min value: " + Int.MinValue)
  println("Max value: " + Int.MaxValue)
}
1
@main def main() =
  // działa, bo nazwa nie koliduje
  println(Integer.SIZE)
  // tu scala.Double przesłania java.lang.Double, więc trzeba podać pełną nazwę klasy
  println(java.lang.Double.SIZE)

0

Jak w rozszerzeniu Metals wyłączyć Bloop serwer i zastąpić go sbt? Po wyłączeniu edytora on cały czas działa w tle i zjada mi pamięć ram. Za każdym razem pozostaje tylko w chamski sposób zabijać proces bloopa? Dlaczego nie dali opcji do jego wyłączania po zakończeniu projektu? Może ktoś bardziej lubi sbt i niepotrzebny mu Bloop. Problem w tym, że bez tego rozszerzenia w ogóle nie działa formatowanie kodu.

https://scalameta.org/metals/docs/build-tools/bloop/

0 użytkowników online, w tym zalogowanych: 0, gości: 0