Программерское

Nov 01, 2009 20:56

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

> = <<5,1,2,3,4,5,6>>

Интересно, а существует в каком-нибудь другом языке еще более удобный и простой разбор бинарных данных?

dev

Leave a comment

kurilka November 1 2009, 19:45:12 UTC
Т.е. А матчится, и тут же является длиной след. поля?
А спецзаписей я вообще не припомню где-либо (хотя я этим не сильно и занимаюсь).

Reply

side2k November 1 2009, 19:48:14 UTC
Т.е. А матчится, и тут же является длиной след. поля?

Да. Я написал чисто попробовать. А оно сработало 8)
В итоге разбор FT 1.2 пакета(в сравнении с аналогичным кодом в дельфе) - по сути одна строчка.
Я ее разбил на несколько только чтоб читать удобнее, иначе вылазить за край 8)

Reply

kurilka November 1 2009, 19:53:42 UTC
не понял про сравнение с дельфи: в эрланге строчка, а там?

Reply

side2k November 1 2009, 19:58:50 UTC
А там процедурка в 111 строк.
Строго говоря, в эрланге тоже не одна строчка, а, наверное, пара десятков(ну кейсы там всякие и т.п.). Все равно разница впечатляет. Как и элегантность кода.

Reply

kurilka November 1 2009, 20:05:56 UTC
вот какбы чёткое сравнение (конкретный алгоритм, сравнение в числе строк) было бы неплохой иллюстрацией удобства эрланга.
плюс вопрос - после реализации на эрланге ты бы смог улучшить дельфовую версию?

Reply

side2k November 1 2009, 20:10:40 UTC
после реализации на эрланге ты бы смог улучшить дельфовую версию?

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

Reply

kurilka November 1 2009, 20:44:35 UTC
т.е. ты увидев другой взгляд на задачу ничего не смог подчерпнуть?

Reply

side2k November 1 2009, 20:47:39 UTC
Странный у тебя вывод.
Я почерпнул. Просто в дельфе подобное не реализовать. Т.е. реализовать-то можно, конечно - с костылями, что определенно не будет улучшением.

Reply

kurilka November 1 2009, 20:53:53 UTC
Почему ты так думаешь?
И почему ты думаешь, что твоё дельфовое решение является чем-то совершенно отличным от кода на эрланге?
Байты там другого размера?
Скажем, ты можешь сказать, во что на дельфе выльется кусок приведённый выше?
Про "не реализовать" - не аргумент, языки тьюринг-полные, так что реализуемо в любом случае.
Ну уж тем более современные языки во многом очень подобны, а паттерн-матчинг вполне себе ложится на "традиционные" языки.

Reply

side2k November 1 2009, 20:57:44 UTC
Ты опять нападаешь с непонятной мне целью.
Паттерн-матчинг в дельфе(как мне видится) можно реализовать только через дополнительную функцию (что-нибудь вроде match_pattern(Pattern,Value):array of TVarValue). Код самой функции и разбор выданных ей результатов - это нехилая дополнительная нагрузка.

Reply

kurilka November 1 2009, 21:25:34 UTC
Да не нападаю я :)
Почему мои вопросы ты так воспринимаешь?
По-моему как раз из рассмотрения вопросов проистекает вменяемое понимание и, если хочешь, инсайты о сущности обсуждаемого.
Про нагрузку не понял, про дополнительную функцию тоже.
Из твоего предложения похоже что ты не совсем понимаешь вопрос - я не хочу повторения эрланговского кода 1-в-1, а повторение его функционала.

Reply

side2k November 1 2009, 21:29:44 UTC
Функционал - это получение из определенных начальных данных определенного результата.
И в дельфе и в эрланге я один и тот же функционал реализовал.
На моем уровне знания этих языков и опыта - и эрланговский и дельфийский варианты являются наиболее оптимальными, каждый для своего языка.

Reply

kurilka November 1 2009, 21:39:11 UTC
А на вопрос не сможешь ответить?
Могу иначе задать: как ты будешь решать задачу, которая решается паттерн-матчингом на языке, где его нет (ну и нельзя добавить, как в лиспе), типа на паскале/си?
Если в этом вопросе видишь нападку - не отвечай, я не обижусь :)

Reply

side2k November 1 2009, 21:45:30 UTC
Буду решать задачу другим способом.
Или есть такие задачи, которые решаются только паттерн-матчингом?

Reply

kurilka November 1 2009, 21:53:17 UTC
Лёня, вопрос был "как?". Естественно, если ПМ нет, то им ты решить задачу не сможешь, ну мыж тут не в логике упражняемся по-моему?
Если раскрывать мои "коварные планы", то я просто лишь хотел показать, что есть ПМ, и что его впоне можно переносить на "обычные" языки (пусть результат и будет выглядеть не столь живописно), а результат, скорее всего, будет не очень уступать твоему оптимальному, а местами и совсем не будет.
В принципе есть более высокоуровневая мысль - можно знать языки и программить на них в рамках их терминов, а можно разбирать общие подходы и их аналоги между языками и в результате получать "больший арсенал" даже на традиционных языках.

Reply

side2k November 1 2009, 22:01:14 UTC
Конкретный вариант можно назвать только в условиях конкретной задачи.
Например, для разбора бинарных строк в дельфе я пользуюсь циклом в виде конечного автомата.

Reply


Leave a comment

Up