LINUX.ORG.RU
ФорумTalks

Десятое правило Гринспена в действии!

 , , ,


0

3

Сидел я значит, ковырял openwrt, полез в фаил /etc/hotplug.json, надо было мне обрабатывать событие по хотплагу своим особым путём. Что-то мне содержимое этого фаила начало напоминать:

http://git.openwrt.org/?p=openwrt.git;a=blob;f=package/system/procd/files/hot...

Начал писать и до меня дошло! Если немножко поправить синтаксис... Да это же...

(
	( "case" "ACTION" (
		"add" (
			( "if"
				( "and"
					( "has" "MAJOR" )
					( "has" "MINOR" )
				)
				(
					( "if"
						( "or"
							( "eq" "DEVNAME"
								( "null" "full" "ptmx" "zero" )
							)
							( "regex" "DEVNAME"
								( "^gpio" "^hvc" )
							)
						)
						(
							( "makedev" "/dev/%DEVNAME%" "0666" )
							( "return" )
						)
					)
					( "if"
						( "or"
							( "eq" "DEVNAME" "mapper/control" )
							( "regex" "DEVPATH" "^ppp" )
						)
						(
							( "makedev" "/dev/%DEVNAME%" "0600" )
							( "return" )
						)
					)
					( "if"
						( "has" "DEVNAME" )
						( "makedev" "/dev/%DEVNAME%" "0644" )
					)
				)
			)
			( "if"
				( "has" "FIRMWARE" )
				(
					( "exec" "/sbin/hotplug-call" "%SUBSYSTEM%" )
					( "load-firmware" "/lib/firmware" )
					( "return" )
				)
			)
		)
		"remove" (
			( "if"
				( "and"
					( "has" "DEVNAME" )
					( "has" "MAJOR" )
					( "has" "MINOR" )
				)
				( "rm" "/dev/%DEVNAME%" )
			)
		)
	} )
	( "if"
		( "eq" "SUBSYSTEM" "platform" )
		( "exec" "/sbin/hotplug-call" "%SUBSYSTEM%" )
	)
	( "if"
		( "and"
			( "has" "BUTTON" )
			( "eq" "SUBSYSTEM" "button" )
		)
		( "exec" "/etc/rc.button/%BUTTON%" )
	)
	( "if"
		( "eq" "SUBSYSTEM"
			( "net" "input" "usb" "usbmisc" "ieee1394" "block" "atm" "zaptel" "tty" "button" )
		)
		( "exec" "/sbin/hotplug-call" "%SUBSYSTEM%" )
	)
	( "if"
		( "and"
			( "eq" "SUBSYSTEM" "usb-serial" )
			( "regex" "DEVNAME"
				( "^ttyUSB" "^ttyACM" )
			)
		)
		( "exec" "/sbin/hotplug-call" "tty" )
	)
)

... LISP! Кривой, убогий и в JSON синтаксисе. От так вот...

Опять забыли JSON в XML засунуть.

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

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

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

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

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

Что будет, когда ты заметишь аналогии между XML и S-exps...

Это как раз таки не будет удивительно.

Удивительным является то, что этого до сих пор не случилось %)

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

Но зачем? Если уже есть широко используемый ими же lua? Если уж так хотели лисп, могли бы tinyscheme или подобный вкатать.

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

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

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

на openwrt? c procd? Тогда ты просто не замечал ибо внутренности openwrt.

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

могли бы tinyscheme или подобный вкатать.

Могли бы, но зачем? У них там используется всего несколько операторов, и это логично, что они написали свой вычислитель, который кушает не s-exps, а json. Все правильно сделали, я считаю.

grouzen ★★
()

Так форматируют только мудаки. И раз уж там ничего кроме строк нет, давай уберем кавычки, однозначность от этого не сломается. Наконец, уберем лишние скобки, которые там остались из-за убожестваособенностей JSON.

(case ACTION
  add (if (and (has MAJOR) (has MINOR))
        (if (or (eq DEVNAME (null full ptmx zero))
                (regex DEVNAME (^gpio ^hvc)))
          (makedev /dev/%DEVNAME% 0666)
          (return))
        (if (or (eq DEVNAME mapper/control)
                (regex DEVPATH ^ppp))
          (makedev /dev/%DEVNAME% 0600)
          (return))
        (if (has DEVNAME)
          (makedev /dev/%DEVNAME% 0644))
        (if (has FIRMWARE)
          (exec /sbin/hotplug-call %SUBSYSTEM%)
          (load-firmware /lib/firmware)
          (return)))
  remove (if (and (has DEVNAME)
                  (has MAJOR)
                  (has MINOR))
           (rm /dev/%DEVNAME%)))
(if (eq SUBSYSTEM platform)
  (exec /sbin/hotplug-call %SUBSYSTEM%))
(if (and (has BUTTON)
         (eq SUBSYSTEM button))
  (exec /etc/rc.button/%BUTTON%))
(if (eq SUBSYSTEM
        (net input usb usbmisc ieee1394 block atm zaptel tty button))
  (exec /sbin/hotplug-call %SUBSYSTEM%))
(if (and (eq SUBSYSTEM usb-serial)
         (regex DEVNAME (^ttyUSB ^ttyACM)))
  (exec /sbin/hotplug-call tty))

В таком виде он даже приятнее оригинального.

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

Так форматируют только мудаки.

уточняю - ленивые мудаки.

давай уберем кавычки, однозначность от этого не сломается.

Если буквоедствовать, строковые параметры оставить в кавычках, но это несущественно.

В таком виде он даже приятнее оригинального.

согласен.

Dark_SavanT ★★★★★
() автор топика

Прочти басню Крылова «Мартышка и Очки» и не поминай 10-ое правило всуе. Хинт: лисп, он не про скобки.

seg-fault
()
Ответ на: комментарий от seg-fault

не поминай 10-ое правило всуе. Хинт: лисп, он не про скобки.

Хинт: 10-е правило вообще про половину Common Lisp.

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

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

staseg ★★★★★
()
Ответ на: комментарий от seg-fault

Лисп, как и любой другой язык программирования, он про представление алгоритмов и данных тем или иным способом. У товарищей при реализации своего велосипеда получился интерпретатор крайне похожий на Лисп. Отличная иллюстрация десятого правила, буквально дословная

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

Ладно, принято:) 10-ое правило просто шире и не про то что есть видимое сходство. Лисперы, кстати, скобок в упор не видят.

seg-fault
()
Ответ на: комментарий от seg-fault

там дело не в скобках было, а как раз в семантике написанного.

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

согласен! любой язык без goto ущербен по определению и годится только для изобретения костылей, реализующих функционал goto

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