LINUX.ORG.RU

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

JS — это довольно таки приличная семантика в уродском синтаксисе. Более уродский синтаксис сложно придумать даже специально. Ну разве что sed. :D

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

С этим согласен.

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

в уродском синтаксисе

Это был неизбежый комрпомисс из маркетинговых соображений.

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

Да нет, ты неправильно понял. Имеется в виду, что пи вызове этой функции в eval будет видна локально опрелеленная a, а не глобальная, как в scheme

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

Прошу прощения, второй пример не корректен. Вот правильный код

(define a 1)
(define tst (let ((a 10)) (lambda(arg) (let ((a 100)) (eval arg)))))
(write (tst 'a))
Поэтому без вариантов - только глобальная область. Там есть в стандарте еще environment, который подается вторым параметром к eval, но это не то. Смысл - что ты не достанешь имя из текущего окружения.

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

Как это нет? Замыкания устроены обычным образом: (eval expr environment). здесь речь о том, что eval не имеет доступа к текущему окружению

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

В принципе, что js, что lisp - это изначально интерпретируемые языки. Но сейчас все компилиться, да. Однако в js это возможно, в детали реализации компилятора (V8) я не вдавался. Значит возможно раз делают?

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

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

Угу, а тут во как — статика, и при этом первоклассные модули. Фокус.

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

ну всёж динамический байдинг - та ещё .... из 60ых - в схеме целенаправленно за алголили всё что можно.

а вот в чём жабаскрипт опять же лисп из 60ых так это в том что стек есть явная цепочка обьектов со связями (ну для кактус-стеков иначе и небудет если желателен маленький рантайм)

qulinxao ★★☆
()
Ответ на: комментарий от quantum-troll

В сравнении с lua — не очень.

facepalm.js

Ваша ушербная луа уже научилась с нормальными типами чисел работать хотя бы?

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

ну всёж динамический байдинг

Я конечно не спец, но читал множество комментов на lambda-the-ultimate, что мощность лиспов как раз и упала до алголоподобных когда убрали эту фичу. fexprs, code-as-data etc Компилировать стало проще, да.

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

В сравнении с lua — не очень.

По моему lua и js имеют идентичную семантику, хотя луа я не знаю, смотрел просто. Возникает такое ощущение, что lua - это вообще форк js. изменили синтаксис и все.

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

сори за

динамический скоуп==вычесляемым гоуту

по своей мощности и отстреливанию себе оказавшихся по факту отстреливания ненужными частей тела.

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

Я просто для краткости так написал. Настоящий код:

И нафига эта каша нужна? Откуда вызывающий код может знать, какие переменные определены внутри tst и зачем ему это знать?

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

И нафига эта каша нужна?

Гибкость. К примеру я на пустом месте могу создать объект.

ob=function(arg){var prop=1, meth=function(x){return x+x;}; return eval(arg)}
console.log(ob("meth(prop)"))
Еще одна строчка - и будет подноценное наследование. И тп.

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

Откуда вызывающий код может знать, какие переменные определены внутри tst

На самом деле вызывающий код никогда не знает какие переменные где определены, имхо. Он всехда «запрашивает» их у какого либо программного объекта, например у глобального (на уровне компилятора или интерпретатора).

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

Ну да, возможно, только лямбды будут сильно тормозить.

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

Угу, а тут во как — статика, и при этом первоклассные модули.

А можно увидеть сигнатуру функции (да и саму функцию), которая принимает модуль и возвращает модуль? Естественно, раз модуль первоклассный, это должна быть вполне обычная функция, определяемая в обычном синтаксисе функций, и которую я могу засунуть, например, в какой-нибудь map.

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

Нет, это ещё повыше уровнем.

Можно пример того, что пишется в этой штуке, но не пишется в параметрически полиморфной (+ад-хок, что есть синтаксический сахар без high-rank) лямбде?

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

Я конечно не спец, но читал множество комментов на lambda-the-ultimate, что мощность лиспов как раз и упала до алголоподобных когда убрали эту фичу. fexprs, code-as-data etc Компилировать стало проще, да.

Вообще-то наоборот. В языке могут быть либо фекспры, либо макросы. макросы мощнее. Выбор очевиден.

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

макросы мощнее

Уж не тем ли, что они не являются first-class?

В языке могут быть либо фекспры, либо макросы

Есть языки которые совмещают, например Picolisp

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

Уж не тем ли, что они не являются first-class?

Нет, не тем.

Есть языки которые совмещают, например Picolisp

И можно пример макроса/фекспра в пиколиспе?

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

Нет, не тем.

Я имел в виду, что макросы - это не first. Это был сарказм.

И можно пример макроса/фекспра в пиколиспе?

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

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

пример макроса/фекспра в пиколиспе?

Вот, не поленился и скопипиздил с ихнего сайта пример с пояснением: Yes, there is a macro mechanism in PicoLisp, to build and immediately execute a list of expressions. But it is seldom used. Macros are a kludge. Most things where you need macros in other Lisps are directly expressible as functions in PicoLisp, which (as opposed to macros) can be applied, passed around, and debugged.

For example, Common Lisp's DO* macro, written as a function:

(de do* "Args"
   (bind (mapcar car (car "Args"))
      (for "A" (car "Args")
         (set (car "A") (eval (cadr "A"))) )
      (until (eval (caadr "Args"))
         (run (cddr "Args"))
         (for "A" (car "Args")
            (and (cddr "A") (set (car "A") (run @))) ) )
      (run (cdadr "Args")) ) )

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

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

Ты не сможешь до рантайма раскрыть макросы внутри фекспров. А макросы, которые раскрываются в рантайме, ничем не тличаются от фекспров.

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

Ну то есть вот это пример фекспра как раз. А макросы у них, выходит, никакие не макросы, а кривое недоговно. Чтобы понять, почему, вопрос на засыпку - что будет, если я вызову макрос внутри этого do?

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

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

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

Ну то есть вот это пример фекспра как раз. А макросы у них, выходит, никакие не макросы, а кривое недоговно. Чтобы понять, почему, вопрос на засыпку - что будет, если я вызову макрос внутри этого do?

Понимаешь, ты сам себе противоречишь. По твоей логике получается, что фекспры круче макросов но они не кошерны потому что макросы не «работают» внутри них. Это все равно что говорить, что феррари хуже чем кобыла, потому что ты не сможеш ехать на кобыле внутри феррари

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

А макросы у них, выходит, никакие не макросы, а кривое недоговно.

Походу, это похоже на то, что есть в Io. Нахрен тогда вообще, «макросы» с таким подходом невозможно реализовать.

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

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

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

У тебя объекты головного мозга

А если ты не можешь понять этот простенький код - это и есть ООП головного мозга в терминальной стадии

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

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

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

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

Т.е. ты даже не увидел в чем проблема? Об этом и речь...

А если ты не можешь понять этот простенький код - это и есть ООП головного мозга в терминальной стадии

А что там понимать? Очередной высер дорвавшегося до eval школьника, не потрудившегося хотя бы просмотреть Theory of Objects, например.

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

Я рад, что ты наконец-то сможешь наконец-то построить дом. Столько кирпичей...

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

даже не увидел в чем проблема

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

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