Соответствующий язык высокого уровня для работы с двоичными данными - PullRequest
4 голосов
/ 22 апреля 2010

Мне нужно написать небольшой инструмент, который анализирует текстовый ввод и генерирует некоторые двоичные данные.Я предпочел бы держаться подальше от C и тому подобного, в пользу более высокого уровня (необязательно) более безопасного, более выразительного и более быстрого в освоении языка.

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

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

Спасибо.

Ответы [ 6 ]

4 голосов
/ 22 апреля 2010

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

3 голосов
/ 23 апреля 2010

Я второй голос за Эрланга; несмотря на свои странности, он имеет отличную поддержку контроля двоичных данных на уровне битов. (Как и должно быть; это язык телекоммуникаций.) Еще один язык, на который стоит обратить внимание, это PADS , более специализированный язык (также от телекоммуникационной индустрии), разработанный для высокоскоростной обработки специальные данные . Я считаю, что PADS поддерживает двоичные данные, но я не могу поклясться в этом.

2 голосов
/ 03 ноября 2010

Ada имеет отличную поддержку для такого рода низкоуровневых представлений данных, как вы описали, в виде предложений представления для типов данных. См. Например

http://www.adaic.org/standards/05rm/html/RM-13-5-1.html

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

2 голосов
/ 29 апреля 2010

Если вы хотите остаться в Python, вы можете выбрать модуль bitstring , который избавляет от большинства трудностей при работе с двоичными данными.двоичные структуры, так что, возможно, стоит взглянуть, если Erlang не сработает для вас!

0 голосов
/ 03 ноября 2010

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

0 голосов
/ 02 ноября 2010

IMP, быстрее использовать язык, который вы уже знаете.Если вы не хотите изучать новый язык для развлечения.

...