LINUX.ORG.RU

Выход mocl

 , ,


7

8

mocl — набор инструментов для разработки на Common Lisp под мобильные платформы iOS и Android. По заверениям разработчиков получаемый код (используется LLVM) по производительности значительно превосходит аналогичный на Java/Dalvik.

В основе mocl лежит идея, заключающаяся в том, что логика приложения должна быть полностью описана на Лиспе, а пользовательский интерфейс — быть «родным» для платформы. Авторы проводят аналогию с Вэбом, когда логика серверного приложения описана на одном языке (например, на Лиспе), а представление — на другом (HTML + JavaScript).

Цена лицензии варьируется от $1299 для серьёзных компаний до $199 для индивидуальных разработчиков. Также предусмотрена «Source code license» для особых энтузиастов, доступ к которой, по-видимому, дают после обращения в службу поддержки.

Пример приложения на Github.

>>> Подробности

★★★★★

Проверено: mono ()
Последнее исправление: Dendy (всего исправлений: 4)

Ответ на: комментарий от BooBoo
scala> object Dict { def unapplySeq[A,B](m: Map[A,B]) = Some(m.toList) }
defined module Dict

scala> val Dict(x,y) = Map('a -> 1, 'b -> 2)
x: (Symbol, Int) = ('a,1)
y: (Symbol, Int) = ('b,2)

scala> val Dict((k1, v1),(k2,v2)) = Map('a -> 1, 'b -> 2)
k1: Symbol = 'a
v1: Int = 1
k2: Symbol = 'b
v2: Int = 2

Это по поводу деконструкции всего чего только можно. А определить словарь в виде алгебраической структуры вида Dict = Item('k,'v, Dict) | Nil тоже нету никаких проблем.

Покажешь как Scala зарулит на spoj'е по производительности sbcl?

Вечером сделаю

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

Но профитов-то не видно.

как flatten вызванный к спискам поубирал Option? Ты думаешь реально списки знают что у них там в нутри Option лежит?

И его спокойно фильтрую

Так очевиднее?

List(Set(1,2), Map(1->2), List(1)).flatten
res11: List[Any] = List(1, 2, (1,2), 1)

scala> Set(Set(1,2), Map(1->2), List(1)).flatten
res12: scala.collection.immutable.Set[Any] = Set(1, 2, (1,2))

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

Тебя что, кто-то по почкам бьёт, когда ты берёшь распространённую либу и решаешь задачу при помощи неё?

Вот и реши на smcl задачу приведенную выше.

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

От этого Clojure перестаёт быть Lisp'ом?

Если стандартная библиотека написана на жабе - это кое что демонстрирует.

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

Приведенный макрос никак не будет.

О чем я и говорю - весьма частный случай. Ты просишь не dict-bind а хитрый очень частный случай.

Нет.

Нет? А пример приведи что такое можно передвать в виде словаря вместо структуры?

Нет

Как это нет. Ты только что сам скзал что в общем случае решение не работает.

Посмотри как это реализовали в CoffeeScript и Clojure.

Если там жабий ескейпинг для foreign интиерфейсов вроде ``...?

Твоё «решение» — ручное низкоуровневое извлечение значений по ключам

Мое решение работет для всего. Твое для частного случая удобоваримых ключей которые должны соответствовать именам переменных. Чувствуешь сколько «если» для применимости?

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

О Боги, что ты несёшь. Ещё раз:

О чем я и говорю - весьма частный случай. Ты просишь не dict-bind а хитрый очень частный случай.

Частный случай у меня в примере, но ты даже не осилил и этот частый случай. А вообще подобная деструктуризация применима во всех случаях, когда нужно декларативно разобрать словарь с нетривиальным содержимым. http://clojure.org/special_forms#Special Forms--Binding Forms (Destructuring), http://coffeescript.org/#destructuring. Я же просил тебя посмотреть, а ты так и не посмотрел.

Нет? А пример приведи что такое можно передвать в виде словаря вместо структуры?

А элементарно. Вот у меня монга: json -> cl alists/lists. Причём формат документов частенько дополняется и это не ломает работающий код, а просто добавляется уже в последствии рабочий код знающий об этих дополнениях. А ты мне что предлагаешь? Каждый раз перехерачивать тип структуры, по причине, что всё сломалось из-за добавления полей о которых старый тип не знает? В сад с такими предложениями.

Если там жабий ескейпинг для foreign интиерфейсов вроде ``...?

Чего!? Что ты несёшь?

Мое решение работет для всего.

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

Чувствуешь сколько «если» для применимости?

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

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

Как это нет. Ты только что сам скзал что в общем случае решение не работает.

Приведенное мной решение в общем случае не работает, но может быть расширено. Я и не претендовал своим примером на общий случай — это тебе почему-то так показалось. Просто хотел увидеть реалзацию этого тривиального частного случая на Scala. Если, например, взять деструктуризацию Clojure, то там общий случай и реализован. Можно явные символы для связывания к ключам задавать, можно неявно связывать символы, keyword'ы и строки, можно дефолтные значения задавать. Можно деструктурировать списки, множества и словари. Вложенность для деструктурирования не ограничена.

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

Если стандартная библиотека написана на жабе - это кое что демонстрирует.

Это говорит только о том, что Хикки решил совместимость с Java либами сделать. И правильно решил.

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

Чур меня, чур от скаловских сигнатур, особенно с implicit и вариантностью! Несколько месяцев на ней не пишу, и такое облегчение. Вот, common lisp радует, особенно в исполнении LispWorks.

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

ага, там еще этот дурацкий синтаксис.

Разве что ленивость, коллекции и STM там норм.

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

http://coffeescript.org/#destructuring. Я же просил тебя посмотреть, а ты так и не посмотрел.

Ты понимаешь что _все_ приведенныё там примеры в скале делаются ADT? Ты понимаешь что подобные вещи хранить в неструктурированных массивах:

[«Via Roma 42R»,«Bellagio, Italy 22021»] //Stree, City
[«Berkeley», 72, «Mostly Sunny»] // Location, Temp, Weather

это звездец какой звездец?

Вот у меня монга: json -> cl alists/lists.

Вот у меня так же json но только в erlang records или скальныё структуры и обратно с валидацией и прочим _автоматически_.

Причём формат документов частенько дополняется и это не ломает работающий код,

Фантастика. Как же это у тебя формат документов не ломает рабочий код - рабочему коду вообще до лампочки что там лежит в докментах? Он у тебя наверное ничего не делает. Была сумма зарплаты в поле x стала в поле y - код «не поломался» Фантастика. Шоб тебе зарплату по такой бухгалтерии платили.

А ты мне что предлагаешь?

Писать работающие программы. И не важно динамика тут или статика.

Каждый раз перехерачивать тип структуры, по причине, что всё сломалось из-за добавления полей о которых старый тип не знает? В сад с такими предложениями.

Ну да - у тебя же в этом JSON все необязательно. Исходя из этого можно его вообще убрать - код «не поломается». У тебя странное понятие термина «программа не поломается».

Низкоуровневый разбор руками работает для всего.

Где ты там увидел «низкоуровневый разбор»? Вон я привел биндинг словаря - покажи мне там низкоуровневый разбор чего либо в той целой одной строчке что понадобилось чтобы это написать.

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

Приведенное мной решение в общем случае не работает, но может быть расширено.

Знаем знаем - lisp язык в котором можно сделать все. То что до сих пор никто этого езе не сделал....

Просто хотел увидеть реалзацию этого тривиального частного случая на Scala.

Этот тривиальный случай (в который раз) лиспоспецифичен, потому что решает задачу которую в скале так не решают.

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

Тут ты забыл поставить большую жирную точку. То есть - и все.

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

это звездец какой звездец?

Да? Okay. Давай на примере доки по CoffeeScript. Прилетает тебе json:

futurists =
  sculptor: "Umberto Boccioni"
  painter:  "Vladimir Burliuk"
  poet:
    name:   "F.T. Marinetti"
    address: [
      "Via Roma 42R"
      "Bellagio, Italy 22021"
    ]
Тебе нужно извлечь painter, name и city. CoffeeScript'овец скажет так:
{painter, poet: {name, address: [street, city]}} = futurists
В скоупе только painter, andress и city. Всё. Больше в скоуп ничего не добавляется. Твои действия? С кодом от начала до конца.

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

В скоупе только painter, andress и city. Всё. Больше в скоуп ничего не добавляется. Твои действия? С кодом от начала до конца.

То есть переведем - есть нативный для языка объект и он деконструктится правильно?

case class Poet(name: String, address: (String, String))
case class Futurists(sculptor: String, painter: String, poet: Poet)
val futurists = Futurists(
	"Umberto Boccioni",
	"Vladimir Burliuk",
	Poet(
		"F.T. Marinetti",
		("Via Roma 42R", "Bellagio, Italy 22021")
	)
)

Решение:

val Futurists(_, painter, Poet(name, (street, city))) = futurists

и да - если я очепятаюсь - ничего страшного не будет. Или если что-то изменится - все сразу найдется.

В скоупе только painter, andress и city. Всё. Больше в скоуп ничего не добавляется.

У тебя там еще name поэта. Таки на.

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

И да - это что в кофискрипте макра? Или ты тоже последуешь заветам алиенкастера доказывать крутость лиспа питоном и начнешь доказывать крутость лиспа кофискриптом?

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

То есть я свел в один обзац твои перемешанные аргументы - и это я шлангую.

Если ты *действительно* считаешь, что «свел в один обзац мои перемешанные аргументы» - тогда ты не шлангуешь, а траллишь... или даже сильно тупишь.

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

Или ты тоже последуешь заветам алиенкастера доказывать крутость лиспа питоном

Тебе не стыдно «говорить неправду»?

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

Тебе не стыдно «говорить неправду»?

Если бы я увидел какой-нибудь язык навроде статически типизированного лиспа или питоне

ocaml, haskell.

ocaml - труп... +GIL.
и никакого smp, параллелизма тоже нет. Круто.

а питоновский GIL не жмет когда ты его в пример приводишь или рубиевый global VM lock?
Юзай F#.

Зачем, если там даже макросов нет и быть не может (нормальных)?

А в питоне что есть?

А от кивордов let, function, new, begin-end, class...=object, let...=new, method - к горлу подступает тошнота

это ты мне на фоне рубиевских @собак, def end, do end, begin rescue else end, class end рассказываешь?

Руби ...а не на каком-то статически типизированном мамонтовом г-не был написан rails фреймворк, ознаменовавший новую эху в разработке вебни. Прорыв на столько яркий...

Ты смотри и global lock яйца не жмет, и от кивордов не тошнит...

Ты> Мы тут обсуждаем ущербность CL или неудобство синтаксиса для макр?

Потрясающие прыжки.

На работе ты большую часть времени на питоне пишешь?

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

А в питоне что есть?

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

Ты смотри и global lock яйца не жмет, и от кивордов не тошнит...

Почему же, тошнит. Тошнит, но я не умираю от кровавой рвоты, как если бы пришлось использовать java, js, haskell, ocaml, perl, php, vb, C++, sytemverilog, ...

Мы тут обсуждаем ущербность CL или неудобство синтаксиса для макр?

Потрясающие прыжки.

Ты задал вопрос о функоле - я сказал, что речь шла о другом, а функол - атавизм неудачного решения а-ля lisp-2. Если ты не заметил, я тут не рекламирую CL, python. Или что-то там еще. А говорю о недостатках, в том числе недостатках этих языков. А где-то «фанбойство» увидел и неумело передергиваешь. Зачем?

На работе ты большую часть времени на питоне пишешь?

Сейчас да - подавляюще большую. А что?

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

Приемлемый, батарейки, элегантностью, я не умираю от кровавой рвоты

Потрясающе. Давай я так попробую: Приемлемая, шикарно, логично, и я не умираю от кровавой рвоты когда надо что-то поменять а компилятор мне в этом не помогает.


Ты задал вопрос о функоле - я сказал, что речь шла о другом, а функол - атавизм неудачного решения а-ля lisp-2.

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

Сейчас да - подавляюще большую. А что?

Тогда как относится к тому что на лиспе завались вакансий и т.д.? Я хоть промышленно пишу на том о чем говорю - то есть не «где-то там есть вакансии» - а я сам их подтверждение. А у тебя получается что лисп и схему ты любишь но почему-то в рабочее время не используешь.

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

Ты задал вопрос о функоле - я сказал, что речь шла о другом, а функол - атавизм неудачного решения а-ля lisp-2.

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

А я и сказал - что *плохо* и конкретно это решение - инженерный фейл. Макрами не должны «решаться» фундаментальные основы языка и те вещи, для которых макры не предназначены. Макры - это когда требуется введение удобного специального синтаксиса или сгенерить код.

Потрясающе. Давай я так попробую: Приемлемая, шикарно, логично, и я не умираю от кровавой рвоты когда надо что-то поменять а компилятор мне в этом не помогает.

Опять петросянство. Для тебя это может быть «шикарно, логично, приемлемо» и даже удобно. Это не означает что сам язык элегантен. Есть элегантное решение, которое характеризуется по сути фразой «ничего лишнего, все четко по делу», т.н. Правильная Вещь. Есть не-элегантное, той или иной степени уродства. Со временем я пришел ко мнению, что люди имеют различную степень «чувства вкуса», у кого-то еще проблемы с додумыванием за собеседника и strong logical thinking. Поэтому в этом треде я обсуждал только минусы существующих статических языков в виде избыточного синтаксиса, хреновых макросов, глючного вывода типов. И был бы совсем непротив иметь статический удобно расширяемый чекер даже динамически типизированного языка, потому что иметь анализ кода в IDE это блиать удобно. Неужели это неочевидно?

Тогда как относится к тому что на лиспе завались вакансий и т.д.?

Кто сказал завались? Вакансии есть. Относится к чему? Чтобы верить моим словам о наличии вакансий на лиспе, я должен сам устроиться программистом на лиспе? Ты серьезно что ли? РЕАЛЬНЫЕ примеры контор даже в России-Украине я тебе привел, им нужны лисперы, в Белоруссии существуют продуктовые компании, в которых какие-то отделы пишут на clojure, какие еще примеры нужны? Вася со двора еще пишет на лиспе - о чем это говорит?

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

То, что ты пишешь на скале - не говорит о том, что вакансий на скале завались, как и об обратном. И пишу я не пишу - вообще никакого отношения к вакансиям не имеет.

а я сам их подтверждение.

Да здесь по лору есть подтверждения работы на лиспе. Мне необязательно быть одним из них.

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

Существует объективный мир - инструмент выбирается не по критерию любишь-нелюбишь, а оптимально ли на данное время он решает поставленные задачи исходя из дофига каких как технических, так и нетехнических (!) требований к процессу разработки. Условно через пару месяцев я начну писать на лиспе для продакшна о чем это скажет? Да ни о чем. Смысл тогда таких требований?

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

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

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

Макрами не должны «решаться» фундаментальные основы языка и те вещи, для которых макры не предназначены.

Серьезно? Но в скале почему-то должны?

Макры - это когда требуется введение удобного специального синтаксиса или сгенерить код.

Так за каким хреном мне в скале делать макрами диктбинды если там есть спуциальный тул для этого?

Для тебя это может быть «шикарно, логично, приемлемо» и даже удобно.

А для тебя это может «приемлемо, элегантно и с батарейками». Это не петросятнство - это симметричный ответ твоим аргументам.

Есть элегантное решение, которое характеризуется по сути фразой «ничего лишнего, все четко по делу», т.н.

Дело сначала надо определить. Тогда и сравнивать элегантность решений.

Правильная Вещь

Жесть.

Кто сказал завались? Вакансии есть. Относится к чему?

К твоему утверждению. На чем оно основано? Это как если бы я рекламировал эрланг потому что есть эхо.

То, что ты пишешь на скале - не говорит о том, что вакансий на скале завались, как и об обратном.

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

И пишу я не пишу - вообще никакого отношения к вакансиям не имеет.

Вообще-то имеет. Почему ты не пишешь на схеме а пишешь на питоне?

Существует объективный мир - инструмент выбирается не по критерию любишь-нелюбишь,

А! То есть для реального мира таки скжема с лиспом не подходит как ее не люби?

Условно через пару месяцев я начну писать на лиспе для продакшна о чем это скажет? Да ни о чем. Смысл тогда таких требований?

Я думал что мы обсуждаем что-то в смысле практической применимости для профессиональной разработки ПО. А если это просто иррациональная любовь к скобкам - что тут скажешь.

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

То, что ты пишешь на скале - не говорит о том, что вакансий на скале завались, как и об обратном.

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

Еще раз - если ты смог сделать такой вывод из моей цитаты, то у тебя хреново с логикой. И так через предложение. Мне реально сложно так общаться.

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

Фантастика.

«Бугога!» — считают даже похапеговнокодеры.

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

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

Ты читать умеешь? «Destructuring Assignment» понимаешь? В CoffeeScript о pattern matching ни слова — его там нет. И задачу я изначально ставил на деструктуризацию, а не на pattern matching. Это ты влез со своим pm'ом, а я тебе показал optima.

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

Еще раз - если ты смог сделать такой вывод из моей цитаты, то у тебя хреново с логикой.

Никаких выводов _я_ не делал - это твои собственные аргументы.

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

Ты читать умеешь? «Destructuring Assignment» понимаешь?

А ты понимаешь что глубокая деконструкция ADT нужна в основном для паттерн матчинга? И без паттерн матчинга пользы с нее почти никакой? Что именно ты хочешь показать кофискриптовой деструкцией? Что она почти ничего не умеет?

Это ты влез со своим pm'ом, а я тебе показал optima.

Наличие либы для лиспа оправдывает кофискрипт? У меня такое впечатление что я спорю с хаосом - вы с алиенксеторм дергаете фичи из совершенно разных языков когда вам это удобно.

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

Непонятно о чем вы тут спорите.

И задачу я изначально ставил на деструктуризацию, а не на pattern matching.

Видимо задачи деструктуризации могут решаться с помощью pattern matching, так как деструктуризация частный случай pattern matching.

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

И да - это что в кофискрипте макра? Или ты тоже последуешь заветам алиенкастера доказывать крутость лиспа питоном и начнешь доказывать крутость лиспа кофискриптом?

Так. Давай определимся. Изначально разговор был за МП и макросы. Некоторые господа и я выдвинули тезис, что самое удобное на сегодняшний момент МП — МП Lisp. Ты попытался опровергнуть этот тезиз и привёл несколько раз ссылку на описание скаламакросов. Есстественно, я посчитал это совершенно не достаточным и попросил тебя реализовать тривиальный случай dict-bind'а. dict-bind хорошо демонстрирует основы МП и кодогенерацию, потому что производит неявное связывание идентификаторов по ключам на значения (путём генерации let или symbol-macrolet [как бонус]). Мой изначальный поинт был в показе возможностей кодогенерации макросами в Lisp. Ты же, в свою очередь, привёл мандулу которая ничего не генерирует и не делает неявного связывания, что никоем образом не может считаться за решение. Далее ты совсем начало протекать и заявил, что dict-bind не нужен, ибо есть ADT и pattern matching. Это конечно круто, но ни ADT, ни pattern matching не решают поставленной задачи о деструктуризации словаря. Ты не показал, как pattern matching разбирает именно словарь. Ты показал regexp'ы и ADT, а это совершенно не то что нужно. Далее протечка продлжилась и ты заявил, что подобная деструктуризация вообще не нужна, ибо решает некие частные случаи. На это я тебе возразил, показав, что подобная деструктуризация удобна и используется на практике, на примере Clojure и CoffeeScript. Итак, вопрос. Уже в который раз :-( Когда мы увидим разбор _словаря_ c неявным связванием идентификаторов механизмами Scala?

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

Видимо задачи деструктуризации могут решаться с помощью pattern matching, так как деструктуризация частный случай pattern matching.

Отлично. Покажите мне в Scala как при помощи pattern matching'а разобрать _словарь_?

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

Что именно ты хочешь показать кофискриптовой деструкцией? Что она почти ничего не умеет?

Хотел показать, что её задача декларативно разбирать словари и списки. И она с этой задачей справляется. А сраловский pm — нет.

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

Наличие либы для лиспа оправдывает кофискрипт? У меня такое впечатление что я спорю с хаосом - вы с алиенксеторм дергаете фичи из совершенно разных языков когда вам это удобно.

Снова фантазии? Когда ты покажешь как деструктурировать словарь в Scala?

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

вы с алиенксеторм дергаете фичи из совершенно разных языков

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

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

Что именно ты хочешь показать кофискриптовой деструкцией? Что она почти ничего не умеет?

Понимаешь ли ты, что ADT в понимании ФЯП'ов в CoffeeScript вообще нет. CoffeeScript — вообще не ФЯП. Соответственно в нём нет и pm по конструкторам вариантных типов, потому что последних нет. В js базовые структуры данных гетерогенные списки и словари, деструктуризация их и разбирает. Чё, плохо что-ли?

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

Ты задал вопрос о функоле - я сказал, что речь шла о другом, а функол - атавизм неудачного решения а-ля lisp-2.

А почему считаешь, что решение не удачное? Что с funcall'ом не так?

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

Писать работающие программы. И не важно динамика тут или статика.

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

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

Наличие либы для лиспа оправдывает кофискрипт?

Либы для деструктуризации словаря в CL community нету, или по крайней мере я не нашёл.

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

Отлично. Покажите мне в Scala как при помощи pattern matching'а разобрать _словарь_?

Хз. Не знаю Scala :) Ну а в чем суть троллинга? Что скаловский матчер более ограниченый по возможностям?

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

Ну а в чем суть троллинга? Что скаловский матчер более ограниченый по возможностям?

В том, что «невменяемый дизайн Scala» мешает «решать вопросы^Wзадачи».

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

Ну а в чем суть троллинга?

Изначально суть была в демонстрации МП. Поинт был такой, что, дескать, макросы Lisp на сегодняшний день самый удобный вид МП. Деструктуризация не более чем демонстрирующий пример. Я хотел, чтобы показали как на Scala (или Nemerle, MetaML'е, хачкель) продемонстрировали как подобную функциональность можно реализовать. Для сравнения наглядности кода.

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

Этот тривиальный случай (в который раз) лиспоспецифичен, потому что решает задачу которую в скале так не решают.

А как решают? А деструктуризация CoffeeScript тоже лиспоцентрична?

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

У меня есть подозрения, что active patterns в F# справится с этой задачей. Но разбираться лень. Если кто знает F#, то было бы круто посмотреть на решение.

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