crypt of decay [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

embeddable Scheme interpreter [Apr. 18th, 2012|05:58 pm]
[Tags|]

не помню, кидал ли уже. ну да похуй, оно всё равно на repo.or.cz переехало. вот.
Link13 meows|meow!

ах, да, к чему я опять про схему [May. 8th, 2010|05:10 pm]
[Tags|]

всё к тому, что понадобился мне (не поверите, трезвый как стекло для дела) мелкий скриптовый язычок в софтину. «мелкий» — это кил на 30 бинарника чтобы, но одновременно нормальный. подумал, я, конечно, о Схеме, поискал в интернетах — ну или оооочень ёбнутые, или большие. в итоге за пару дней написал и успешно встроил.

но, как известно, творческая мысль шило в жопе — это ужасно. в итоге — можете смотреть на гиториусе, PicoScheme. практически полная R4RS (нет типа char — его целое заменяет пока; не уверен, может так и оставлю). для адских числодробилок не пойдёт, но сама по себе не такой уж дикий тормоз. порты i/o внутре есть, нет только примитивов для их создания — сами допилите. местами даже раскиданы комментарии, иногда верные. но вообще — читайте исходник, он маленький. доки от R4RS пойдут, надо только помнить, что макросы — a-la CommonLisp, char и fixnum — почти одно и то же, а #f — то же самое, что '() и что ().

также встроено моё любимое автоцитирование: список, начинающийся не с пары и не с символа, автоцитируется. векторы, заданые через #(…) — тоже автоцитированы (в отличие от стандартов).

размер бинаря с gcc -Os -s сейчас примерно 60 kb. на x64 не проверялось.

valgrind'ом прошёлся.

компилябельность на не-gcc не гарантирую, но старался gcc-фишки не использовать, где надо — оборачивать ifdef'ами.

в принципе, в наборе есть пример REPL, он же — пример расширения ядра. там лежат полезные вещи типа LOAD и утилитных функций.

ах, чуть не забыл: лицензия. WTFPL, конечно же.

зыж понятно, что это всё нахуй никому не надо, скорее всего, но вдруг да пригодится? если бы я нарыл в сетке подобное и под нормальной лицензией, то своё бы не ваял, например..
Linkmeow!

по-моему, охуительно [May. 7th, 2010|10:00 pm]
[Tags|]

чудная демонстрация совершенной безмозглости тех, кто орёт, что негигиенические макры должны врезать дуба, и только гигиена спасёт мир:
;;; Grahams' if
(defmacro gif (&rest args)
  `(cond ,@(pair-them args))) .


и гениальный высер гигиеноёба:

Anyway, here's your «gif» in Scheme. (There are several ways to define
macros in PLT Scheme, but «syntax-rules» is quick and fun for simple
tasks like this.)
#lang scheme/base 
;; by neil AT neilvandyke DOT org, 2009-10-25 
;; Contributed to Public Domain 

(define-syntax %syntax-error (syntax-rules () ((_) (error)))) 

(define-syntax gif 
   (syntax-rules () 
     ((_)       (values)) 
     ((_ X)     X) 
     ((_ X …) (%gif:2 (X …) ())))) 

(define-syntax %gif:2 
   (syntax-rules () 
     ((_ () O) (%syntax-error «gif must have odd number of arguments»)) 
     ((_ (I) (O …)) (cond O … (else I))) 
     ((_ (T V I …) (O …)) (%gif:2 (I …) (O … (T V))))))

да, эта срань проверяет количество аргументов. плюс одна строка к оригинальной CL-версии, угу.

никогда не мог понять, отчего люди так хотят усложнить себе жизнь во имя неких «концепций». да, шаблономакры с гигиеной иногда удобны. однако это:
а) ещё один язык для изучения (и часто результат является write-only code);
б) допизды сложен в реализации (сравнительно с «обычными» макрами);
в) тормозят.

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

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

ебанаты на марше [May. 7th, 2010|05:12 am]
[Tags|, ]

как известно, в R6RS ребиндинг запрещён. более 20 лет с этим не было проблем, а тут внезапно! решили, что больше нельзя. компьютеры ведь становятся всё медленней, и то, что нормально работало 20 лет назад, сейчас, очевидно, будет дико тормозить.

кстати, REPL оттуда выкинули тоже (если ваша Схема говорит, что она R6RS и при этом имеет REPL, то это не R6RS, вот так).

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

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

самыми вменяемыми, кстати, оказались авторы Chicken и SCM. потому что послали нахуй уебанов вместе с их R6RS. остальные, блядь, подставили жопу и славят «улучшения языка».

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

естественно, в улучшение ситуации после R7RS я не верю: мерзкий ебальник-то никуда не делся.

впрочем, я допускаю, что мои подозрения неверны. но вероятность очень мала, тащемта..
Link2 meows|meow!

r6rs [Feb. 16th, 2010|05:35 pm]
[Tags|]

я уже говорил, что r6rs — сраное говно? так я повторюсь..
Linkmeow!

здесь хотелось, но не будет [Dec. 31st, 2009|08:04 pm]
[Tags|]

потому что перехотелось.

была идея сделать серию псото про «как перестать бояться и написать себе компилятор Scheme», но потом я передумал. в основном потому, что:
а) такого материала дохуя уже (люди! читайте SICP! хотя бы!);
б) те, кому это надо, и так знают, где найти; а кому не надо — те и читать не будут;
в) очень лень разношёрстные заметки, сделаные на помеси русского, английского и эльфийского приводить в нормальный вид.

в основном, конечно, виноват последний пункт. кабы можно было выложить в том виде, как есть… но это X-Rated секрктные материалы, всё равно никто, окромя меня, расшифровать не сможет.

да, компилятор в VM, простой, но достаточно шустрый, бутстрапится сам собой и на себе же написан, с «нормальными» и «гигиеническими» макросами, умеет call/cc. VM и примитивы на сях, остальное на схеме. пишется, кстати, за несколько дней — если знать, как. жаль, что я очень больное на голову (не, в прямом смысле, в голове куча трещин и там танцуют мамонты). а то «у меня ещё столько идей было»…

кстати, посмотрел код. один из весьма редко использующихся операторов — присваивание. после того, как у меня появились named lets, реже встречается только while.

а суть в том, что: «понадобилась однажды техноэльфу Scheme, да маленькая, да чтобы в c/c++ встраивалась». и я понял, отчего почти все embeddable Schemes такие жирные: просто очень трудно остановиться: «вот щаз вот эту фишечку допишу, и у меня СТОЛЬКО всего заработает!»

и всё заверте…

зыж пока держусь в районе 90 кил бинаря и 150 кил бутстрапа в псевдотекстовом псевдокоде.

.
Link6 meows|meow!

про программинг [Dec. 26th, 2009|01:41 pm]
[Tags|, , , ]

как известно (оттуда, оттуда), MIT выкинули же Scheme из 6.001 и захуячили заместо этого бидон.

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

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

конечно, даже идиоты могут писать относительно рабочие программы. наглядное доказательство тому — сегодняшнее состояние софтвера. sapienti sat.

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


зыж если вдруг кто-то таки меня ещё читает, и у кого-нибудь зачешутся лапки написать мне, что хвостовая рекурсия — это просто такие циклы, только написаные через жопу (хвост), то не утруждайте себя: я не буду ни пояснять, ни дискутировать по этому поводу. идите дальше дрочите свои жавы, бидоны и прочие игрушки для недоразвитых..
Link3 meows|meow!

navigation
[ viewing | most recent entries ]