Previous Entry Share Next Entry
2016-01

LISP: возрождение

...точнее, почему у LISP и multistage programming в целом есть хорошие шансы полноценно войти на арену в недалеком будущем.

Все читали чудесное "How it feels to learn JS in 2016"? (на русском, на английском)

Так вот, если присмотреться, экосистема Javascript проходит во многом через те же проблемы, которые в свое время тормознули экосистему Lisp'a:

1) нужда поддерживать похожие, но разные платформы сделала transpiling, макросы и прочие AST трансформеры нормой жизни,

2) это порождает жуткую фрагментацию из-за того, что сделать очередной несовместимый вариант чисто под себя быстрее, чем решать совместимость

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

Единственный нюанс будет в том, что это вряд ли будет Common Lisp, R7RS или какой там еще у нас есть стабильный feature-complete LISP стандарт. Гораздо больше мне верится в бутстрап от лиспов, в которых fexpr-семантика не испорчена premature optimization (Kernel, PicoLisp и подобное) - они банально проще и единообразнее, а производительности, как показывает тот же TypeScript, сейчас вполне хватает на компиляторы-поверх-интерпретаторов.

This entry was originally posted at http://wizzard.dreamwidth.org/476441.html. It has comment count unavailable comments. Please comment there using OpenID.

  • 1
raydac October 8th, 2016
гора скобок в lisp шокирует
не... я лучше forth, тот же lisp только круче и без скобок

wizzard0 October 8th, 2016
сравни JS, coffeescript, purescript и JSX.

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

kodt_rsdn October 8th, 2016
Лисп круче, он замкнутый. На форте стек не является первоклассной сущностью, нельзя класть на стек стек...

mbr October 8th, 2016
Скобки ладно, но польская нотация совсем взрывают мозг.

Да, у меня детская травма автолиспом.

raydac October 8th, 2016
тому кто с детства пользовался калькулятором МК-61 всё это только в радость

nivanych October 8th, 2016
Польская нотация, это категорное мышление, стрелки-функции слева-направо!!
А префиксное, получается, это как в иврите каком-нибудь, стрелки справа-налево ;-)

(Deleted comment)
thedeemon October 8th, 2016
Щас прибегут хикстеры и напомнят про ClojureScript.

wizzard0 October 8th, 2016
Нууу, да, у него шансов чуть побольше, чем у CL. Но тут такое, прогнозировать конкретную имплементацию сложно, там же надо чтобы совместилось просто пару человек, имплементация и деньги/мотивация, не только свойства имплементации.

nivanych October 8th, 2016
А кто такие хикстеры и чем они отличаются от хипстеров?
Это просто опечатка или подобие "олбанского"?

thedeemon October 8th, 2016
Хипстеры последователи Rich Hickey.

nponeccop October 8th, 2016
Не-не!

hipster + hikki = hikster :)

Edited at 2016-10-08 03:35 pm (UTC)

thedeemon October 9th, 2016
Это другие. Я про hicksters. ;)

nponeccop October 8th, 2016
Так а причём тут лисп?

swamp_agr October 8th, 2016
Общее между зоопарком реализаций лиспа и зоопарком из инфраструктуры и стандартов JS - в зоопарке!

nponeccop October 8th, 2016
В эту версию не вписывается последнее предложение, начиная с "гораздо".

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

Если говорить о тенденциях в языке - то идёт скорее паскалефикация, чем лиспофикация. Если взять скажем байтовые массивы, модули с компайл-тайм экспортами, замену патчения прототипов на декларативные определения классов и asm.js

А если говорить о внутренних нуждах фреймворков - то что-то типа скаловского гигиенического квази-цитирования скорее будет, нежели fexprs. Вот кстати: http://sweetjs.org/

Edited at 2016-10-08 03:30 pm (UTC)

wizzard0 October 23rd, 2016
я совершенно не перевариваю квазицитирование, то есть, перевариваю конечно, но оно выглядит слишком низкоуровневым инструментом, как ассемблер примерно. и классические лисповые макросы по этой же причине не.

а вот fexprs, CTFE, partial evaluation и metaprogramming через суперкомпиляцию - это будущее, имхо.
оно и проще (меньше сущностей), и выразительнее. поэтому и "гораздо".

Edited at 2016-10-23 02:05 pm (UTC)

vit_r October 8th, 2016
С Лиспом беда в том, что с его кучей скобок никто не умеет работать. Нужны другие аналоги.

sassa_nf October 8th, 2016
так а где куча скобок?

(f x y) = f(x, y)

количество скобок то же самое

zealer October 8th, 2016
Или так
(defn present-and-non-empty?
  [v]
  (not (empty? (or v []))))

def present_and_non_empty? value
. !(value.nil? || value.empty?)
end

Лисповые скобки не любят, за то, что они почти всегда одинаковые. А еще их очень редко разбивают на разные строки.

nponeccop October 8th, 2016
Ну да, если записать программу на ЖС из одних аппликаций, количество скобок будет тем же самым.

1) В CL progn скобок значительно больше.
2) Даже если разбивать по строкам, в
(defun factorial (n)
  (if (<= n 1)
    1
    (* n (factorial (- n 1)))
  )
)
количество закрывающих скобок подряд - 5 штук. В отличие от
function factorial(n)
{
   let r = 1
   while (n > 1)
   {
      r *= n
      n -= 1
   }
   return r
}
где не более одной :) И это если не говорить о х-е, где fac n = product [1..n] скобок вообще 2 или 0, если fac = product . enumFromTo 1


Edited at 2016-10-08 03:29 pm (UTC)

sassa_nf October 8th, 2016
...но позвольте, это же не одинаковый код!

function factorial(n){
  if (n <= 1) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}

уже 3 скобки. Две лишних скобки в лиспе за счет "*" и "-", т.к. в Лиспе это функции, а в ЖС нет.

nponeccop October 8th, 2016
Так смысл писать неидиоматично? Речь идет о том, что при идиоматичном решении одной и той же задачи в лиспе оказывается скобок больше.

А одинаковый код можно с инфиксным ?: написать:

const factorial = n => n <= 1 ? 1 : n * factorial(n - 1)

Но смысл? Тем более что tail call optimization не гарантируется и рекурсия не идиоматична.

Edited at 2016-10-08 05:09 pm (UTC)

sassa_nf October 8th, 2016
"Так смысл писать неидиоматично?"

чтобы сравнивать количество скобок.

А че факториал выбрали? Ну, давайте tree traversal, например, чтобы убедительнее?

Одинаковость скобок хуже, по-моему.

vit_r October 8th, 2016
На тривиальном примере всё "то же самое"

sassa_nf October 8th, 2016
так дело не в тривиальности примера. Скобки разграничивают какие-то куски кода, т.к. без скобок была бы другая интерпретация. Ну, вот бы показательно продемонстрировал кто-нибудь, что такие-то и такие концепции в Лиспе без скобок двусмысленны, поэтому приходится вводить скобки, а в других языках те же выражения недвусмысленны даже без скобок.

sorhed October 9th, 2016
Я лет 10 плевался, плевался, а потом привык.

vit_r October 9th, 2016
Дело не в привычке, а в том, что это не удобно для промышленной разработки.

justy_tylor October 8th, 2016
Не всё то Лисп, что бардак.

alexispokrovski October 9th, 2016
Статья отличнейшая.

Все действительно настолько плохо? (Я чайник, к веб-разработке прикасался только эпизодически.)

  • 1
?

Log in