LINUX.ORG.RU

Scala.js on Node.js для разработки бэкенда

 , , ,


0

5

В последнее время со все большим удовольствием посматриваю на Scala. При этом я с давних пор скептически отношусь к хорошо прогретой JVM, поскольку меня пугает, когда для запуска даже хеллоуворлда уходит десяток секунд, а также смущают темпы потребления памяти ею. В этом смысле v8 мне нравится гораздо больше: легче, субъективно потребляет меньше памяти, не имеет десятка параметров запуска, без тонкого тюнинга которых было бы не обойтись в процессе развития почти любого приложения.

Соответственно, начинаю посматривать на Scala.js. Интересно, пользовался ли этом кто-то на бэкенде для разработки приложений, работающих с сокетами или легкими апи? Какие впечатления и подводные камни?

Deleted

Последнее исправление: Deleted (всего исправлений: 2)

Ответ на: комментарий от filequest

Нет в js ооп, только прототипы. Иди дальше методичку читай.

anonymous
()
Ответ на: комментарий от anonymous

Скала еще на .net умеет

Скала когда-то умела в дотнет. Актуальные версии только для JVM.

ymn ★★★★★
()
Ответ на: комментарий от Deleted

более развитым ООП

Правильнее сказать «более развитой системой типов», потому что система типов Scala включает и то, что традиционно не относят к ООП напрямую.

Zenom ★★★
()
Ответ на: комментарий от Zenom

Правильнее сказать «более развитой системой типов»

Правильнее сказать «более развитой системой проверки типов», так как в скале нет первоклассных типов(в отличии от JS, кстати), и сама по себе работа с типами там практически отсутствует

filequest
()
Ответ на: комментарий от Zenom

то есть, слабая система типов == хорошие возможности тайпчекера(в силу примитивности оной)

filequest
()
Ответ на: комментарий от filequest

В JS просто другой стиль ООП, который ТС видимо не осилил и по глупости обозвал «менее развитым».

Deleted
()
Ответ на: комментарий от Deleted

В JS просто другой стиль ООП, который ТС видимо не осилил и по глупости обозвал «менее развитым».

Нет, туда просто за 10 дней нормальное ООП не успели запилить. А хипстеры жрут эту наколенную поделку и прутся.

anonymous
()
Ответ на: комментарий от Zenom

ты не понял. Вот что это означает

T1 := Object clone
tmp := T1
tmp a := 1
T1 := nil
object := tmp clone
object type // T1
object a // 1
то что ты там внутри налепил никого не волнует.

filequest
()
Ответ на: комментарий от filequest

макросы также не являются первоклассными сущностями языка.

Как будто это что-то плохое.

anonymous
()
Ответ на: комментарий от Zenom

Вот пример отличия:

function := block(x, y, x - y)

macroReplacer := block(function,
   function message next setName("+")
)

macroCombinator := block(x, y,
   x call(y)
)

macroCombinator call(macroReplacer, function)

function call(1, 2) // 3
макросы не_могут этого

filequest
()

escobar.coredump

anonymous
()
Ответ на: комментарий от Zenom

Какое это всё имеет отношение к первоклассным сущностям?

Я подаю макрофункцию в качестве аргумента другой функции. она имеет те же привилегии, что любой объект языка — может быть подана в качестве аргумента, записана в любой слот, в любую переменную, засунута в массив и тп. Смотри определение first-class

filequest
()
Ответ на: комментарий от Zenom

или, положим, что то такое

a := 1
list(

 block(call argAt(0) print),
 block(call argAt(0) print),
 block(call argAt(0) print),
 block(call argAt(0) print)

) foreach(call(a)) // aaaa
могут так макросы?

filequest
()
Ответ на: комментарий от filequest

Мы твою-то поделку сложнее хеловорда увидим? да/нет? или ты только в кукарекинг умеешь?

ладно давай для начала хотя бы НЕ твою поделку на io, но сложнее хеловодра.

anonymous
()
Ответ на: комментарий от filequest

покажи

import scala.reflect.macros.blackbox

/**
  * Created by zenom on 21.04.16.
  */
class MacroImpl(val c: blackbox.Context) {
  import c.universe._

  val function = reify((x: Int, y: Int) => x - y).tree

  def macroReplacer(function: c.Tree) = {
    val q"(..$params) => {$arg1.$op($arg2)}" = function
    q"(..$params) => {$arg1 + $arg2}"
  }

  def macroCombinator(fn: c.Tree, comb: c.Tree => c.Tree): c.Tree = comb(fn)

  def myMacro = macroCombinator(function, macroReplacer)
}

по-определению

Приведи определение полностью.

Zenom ★★★
()
Последнее исправление: Zenom (всего исправлений: 1)
Ответ на: комментарий от Deleted

define нормальное ООП

Все, ему подобные персонажи, крича о нормальном ооп, подразумевают классовое наследование и всё присущее классово-ориентированным языкам. Им как бы вообще по барабану, что ООП - это Объектно-Ориентированное Программирование.

int64
()
Ответ на: комментарий от int64

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

filequest
()
Ответ на: комментарий от Zenom

Это же анонимус. Определения — не его уровень. Определения — это в любом учебнике для школоты.

ymn ★★★★★
()
Ответ на: комментарий от Zenom

какое тебе определение? ты должен иметь возможность в любой момент в рантайме вызвать macroCombinator с аргументами. Ладно забудь, я понял что так в скале нельзя(кто бы в этом сомневался, гыгы).

filequest
()
Ответ на: комментарий от filequest

какое тебе определение?

Определение первоклассной сущности

ты должен иметь возможность в любой момент в рантайме вызвать macroCombinator с аргументами

Вызывай в рантайме. Кто мешает?

Zenom ★★★
()

Для чего вы кормите аутиста anonimous'а?

anonymous
()

Полуоффтоп

Использую Scala.JS на фронте с ReactJS и redux'оподобной фигней (https://github.com/ochrons/diode) — полет нормальный, зависимость сильная: классная поддержка в IDE, надежный рефакторинг, простой и понятный линейный код из преобразований иммутабельных структур данных. Код с асинхронными эффектами по look and feel такой же, как и весь остальной благодаря монадическим типам и do-нотации (for comprehensions). В общем, недоязычек с транспайлерами кто-во-что-горазд вспоминать не хочется (но там есть надежда на TS).

На беке у меня python с django, т.к. знаю хорошо, а инвестировать в изучение серверной экосистемы на Scala пока не хочется.

Да, вот здесь есть люди, которые использовали scala.js на ноде - https://www.reddit.com/r/scala/comments/4cwv4p/is_anyone_running_scalajs_on_n... (в отличае от бесполезного лора с бредом anonimous'ов)

anon1984
()
Ответ на: комментарий от Rastafarra

для чего?

чтоб разные аутисты могли этим бахвалиться на ЛОР. очевидно же.

anonymous
()
Ответ на: комментарий от Rastafarra

не только ты не понимаешь, большинство. Если бы все могли понять, смоллток был бы жив, а жабу и плюсы никто бы не назвал словом ООП. А мне за объяснения не платят, извини. Читай книжки, врубайся.

filequest
()
Ответ на: комментарий от anonymous

не, я кстати, серьезно. Большинство не может врубиться. Даже в JS, где, собственно, кастрированная модель. Встречал даже разрабов с 10-летним стажем на JS, которые не врубаются, лепят лапшу из колош и коллбеков. Если за 10 лет не могут, как ты думаешь, насколько реально это в одном посте? Если хочет, пусть внимательно читает мои прошлые посты, и еще универсальное средство: http://iolanguage.org/

filequest
()
Ответ на: комментарий от filequest

Проект yа IO cложнее хеловорда давай показывай. Или иди нах со свои ио, потому что для реальных задач он бесполезен чуть больше, чем полностью. Его даже встроить нормально не получается, в отличие от того же луа. Даже его автор пишет на ObjC, что многое говорит.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.