LINUX.ORG.RU

[лисп] уже почти достал


0

0

Добрый вечер!
  Во-первых, мне не нравится, что вместо 
a.b.c я пишу (c-of (b-of a)). Я уже писал про то, что язык должен 

быть правильно построен по частотам - более часто встречаемые идиомы
 должны быть более короткими. Лисп позволяет выделять такие идиомы и 
делать их более короткими, но в начальной точке он сильно уступает 
быдлоязыкам (таким, как JavaScript). А поскольку 90% программирования
 всё же сосредоточено вокруг простых операций, то лисп тяжёл. 

  Я было подумал про Яву... Но ява - это не динамический язык. 
Возможность поменять 1-строчку в многомегабайтном коде и приступить
к его отладке через доли секунды имеется только в лиспе... 
  Поэтому возникает такая идея:
сделать новый синтаксис для лиспа. Который бы на первом этапе
 преобразовывал
function m(a) {
  let u=a.b;
  let count=u.count();
  <comment>бебебе</>;
  u.c(x) = 34*5;
  return u.count()-count;
}
сначала в
(" " function (".()" m a) 
  ("{;" 
    (" " let (= u (dot a b)))
    (:t comment "bebebe")
    (" " let (= count (".()" (dot u count))))
    (= (".()" (dot u c) x) (* 34 5))
    (" " return (- (".()" (dot u count)) count)))

и потом - в

(defun m (a)
  (let* ((u (a-of b))
         (count (count u)))
     (setf (funcall (u-of c) x) (* 34 5))
     (- (count u) count))

(последнее преобразование, причём, чтобы по выбору рендерило код либо на лиспе, либо на php, либо на javascript). 

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

плюс к тому, чтобы 
(defComposedFun fooBar (x) foo bar) не порождало функцию
(defun fooBar () (bar (foo x)))
а производило inline-подстановку foo в bar и возвращало исходник. 

Плюс к тому, чтобы можно было писать не только include, но и 
exclude, чтобы можно было генерить и страницу, и аякс-скрипт в ней
в одном файле, типа:

atCompileTime {
  <defmacro webFile args = (string relativePathname,&body body)>{
    <quote>exclude(<unquote>getenv(www-root) + relativePathname</>,
                   <unquote>body<//>
  }</defmacro>
  webFile("application.html",
    <html><head> ... </html>)
  webFile("ajax.php",
    <?php>...</>)
}

Уф. Хватит на сегодня. Жалко, что на ЛОРе темы не всплывают, а то можно было бы теперь долго здесь флудить... 
     

★★★★★

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

>Ссылку пожалуста насчет НАСА

http://www.flownet.com/gat/jpl-lisp.html (via http://pcl.catap.ru/doku.php?id=pcl:%D1%82%D1%83%D1%80%D0%B2repl#fn__15 )

>The Remote Agent software, running on a custom port of Harlequin Common Lisp, flew aboard Deep Space 1 (DS1), the first mission of NASA's New Millennium program. Remote Agent controlled DS1 for two days in May of 1999. During that time we were able to debug and fix a race condition that had not shown up during ground testing. (Debugging a program running on a $100M piece of hardware that is 100 million miles away is an interesting experience. Having a read-eval-print loop running on the spacecraft proved invaluable in finding and fixing the problem. The story of the Remote Agent bug is an interesting one in and of itself.)

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