Вопрос в том, насколько ценна эта однородность в реальном мире?
Вероятно, довольно важно: посмотрите на всех людей, делающих Javascript на стороне сервера в наши дни. Javascript ни в чем не превосходен, и его поддержка библиотек для серверного кода вовсе не так уж хороша, но его использование дает большие преимущества.
Когда что-то идет не так, вы должны загрузить страницу в Firebug,
Зависит от того, что является «чем-либо». На самом деле я не могу вспомнить, когда в последний раз мне приходилось открывать Firebug, чтобы увидеть, что идет не так - я определенно проходил этапы, на которых это было, но также бывает много раз, когда это не так.
Например, если вы генерируете свой CSS из s-exps, то проблемы с вашим CSS могут заставить вас взглянуть на «скомпилированный» CSS только из-за странных синтаксических проблем (например, уловок IE6). Если вы просто посмотрите на страницу и решите, что вам нужна дополнительная рамка, вы можете добавить (:border 1)
и покончить с этим. (Конечно, если вы обработаете это, чтобы сгенерировать целый набор правил CSS для обслуживания клиента, это будет еще большая победа.)
Еще один способ подумать об этом: в очень редких случаях мне приходилось извлекать анализатор пакетов и дизассемблер при работе с современным веб-приложением. Да, это отстой, но с хорошими библиотеками это тоже очень редко. Я бы не стал писать низкоуровневый код весь день, чтобы избежать несоответствия импеданса при переключении на анализатор пакетов в тех редких случаях, когда мне нужен такой уровень информации.
Это предполагает, что вы хотите и можете достичь уровня, на котором вы пишете (V) код HLL. Common Lisp не может превзойти C в том, что он C, и если вы просто пытаетесь выплеснуть простой блог в HTML, то и вам это не место: Rails уже действительно хорош в подобных вещах. Но существует множество экспериментальных программ, в которых полезно изменить один флаг и запустить код на клиенте, а не на сервере.
и тогда вы будете смотреть на сгенерированный HTML, CSS и Javascript, а не на исходный код Lisp, поэтому вам нужно держать отображение в своей голове. Решает ли гомогенность, обеспечиваемая Лиспом, что-нибудь, или просто перекрывает проблему, которая в конечном итоге снова появляется вниз по течению?
Я написал веб-приложения для всех Lisp и Javascript, и я думаю, что лучший ответ, который я могу дать прямо сейчас: это может . Я использовал Parenscript, и основная проблема заключается в том, что Parenscript - это язык Lisp-y, но это не Common Lisp и не какой-либо другой полный язык, который вы можете использовать на стороне сервера. (Если бы существовал компилятор Common Lisp to Javascript, как GWT для Java, то это было бы замечательно. Хотя я не вижу, чтобы кто-то всерьез пытался его создать.) Итак, вы все равно получили, как вы заметили, два языка.
В этом отношении Javascript сегодня немного лучше, потому что вы можете запускать один и тот же код в обоих местах. Это не вполне идеально, потому что ваш серверный Javascript, вероятно, имеет функции, которые вы не можете гарантировать, будут существовать на стороне клиента (если вы не ограничите своих пользователей, скажем, последними версиями Firefox). Если вы похожи на меня, вы не хотите ограничивать свой серверный код JS, который выполняется в каждом браузере, поэтому ваш JS на стороне сервера и JS на стороне клиента будут различаться по тонкости. Это не посредник - это все еще довольно приятно - но это все еще 2 немного разных языка.
Я думаю, было бы неплохо, если бы существовала программа, которая могла бы принимать код, написанный на последнем Javascript (1.8.5), и генерировать старый школьный Javascript, который работал в любом браузере. Я не думаю, что такая программа существует, но я не знаю, насколько это будет сложно.
Существуют реализации Scheme для Javascript, и, возможно, ситуация со Scheme лучше. Наверное, мне стоит взглянуть на это на днях.
Я часто расстраиваюсь, когда приходится использовать язык на стороне сервера, который полностью отличается от моего языка на стороне клиента (Javascript).Но я также разочарован, когда мне приходится использовать язык более низкого уровня, чем Lisp (а это большинство из них).Это большая победа, чтобы быть более похожим на Lisp или более похожим на Javascript?Я не знаю.Я бы не хотел выбирать.