LINUX.ORG.RU

Посоветуйте язык для решения задачи(D vs Haskell vs Python3)

 , , ,


0

3

Необходимо парсить огромное число файлов(1000+) с текстом(txt, html, xml, ...) размером 100kb+ и сохранять результат парсинга.

Какой язык для этого подойдет лучше: D, Python3 или Haskell?

Критерии:

  • Количество сложного/любого кода - минимально
  • Производительность

Заранее спасибо.



Последнее исправление: AoD314 (всего исправлений: 1)

любой, но не эзотерический.

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

При неограниченном количестве памяти да... Один раз, когда делал задание по курсу алгоритмов (на графах) - пришлось heap очень большой для jvm указывать, и максимальный размер стека увеличить. Стоило того. Не представляю, как бы я на сишечке такое писал. %) Хотя реально, конечно.

Хотя, конечно, с np-полными задачами ничто не поможет, там и 4 гигабайта будет мало, и 4 терабайта, и 4 петабайта может оказаться мало, при оценке. =)

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

Ну в сравнении с первую очередь со scala, и другими языками на платформе jvm. За то жабку и ругают, что она медленная + прожорливая.

haskell побыстрее/экономичнее будет? (вроде бы очевидный факт, но я же не проверял...)

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

Писать в функциональном стиле можно ВНЕЗАПНО и на scala, и на python. на паскале уже труднее... не знаю, можно ли. на сишечке можно - но свихнёшься воевать с указателями.

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

Ну тупо пройти от начала массива до обнаружения символа '\0'

Может и можно быстрее, вопросом не интересовался =)

BattleCoder ★★★★★
()

Кстати... если подытожить.

ТС, ты уже определился? Когда такие темы появляются... я вот думаю что за это время можно уже 10 раз попробовать написать на любом ЯП, который под левую пятку попадёт первым (тот же пистон пусть), будет работать с приемлемой производительностью, и переписывать ради призрачной оптимизации всё равно не захочется.

Тот же пистон вроде имеет библиотеки для парсинга xml, написаны они на сишечке - profit?? что ещё надо?

BattleCoder ★★★★★
()

пиши на haskell утри нос тутошним ненавистникам ФП)

на крайняк python

Deleted
()
Ответ на: комментарий от anonymous

Видимо троллинг был слишком тонкий, чтобы анонимус его заметил. Где ты старый ЛОР...

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

В паскале у строки хранится еще длинна. Правда к топику это не имеет отношения. Это просто старая и давно высмеянная отмазка крякеров, на тему, почему онм пишут на дельфи: «строки быстрее».

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

Понятия не имею. Ни разу не сталкивался с необходимостью писать что-то под jvm. Думаю что все языки высокого уровня при наличие статической типизации будут примерно одинаковы по этим параметрам. На яву обычно жалуются из-за того что долго стартует jvm.

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

Уважемый аноним . O(cn)==O(n)

следовательно

O(n/16)==O(n)

ps. печально , что символика такова ибо O(f(n)) часто употребляют в двух различных смыслах - один из них «верхняя асимптота» другой «скорость роста»

qulinxao ★★☆
()

Только perl, проверено.

slovazap ★★★★★
()

Задача настолько проста, что похоже то что знаешь

vertexua ★★★★★
()

Ты совершенно не умеешь спрашивать вопросы.

Показал бы примеры файлов, завтра бы было решение на 25 языках.

anonymous
()

Парсить = преобразовать из формата (txt, html, xml, ...) в другой формат, или какой-то иной смысл. Что будет «результатом парсинга» ? Пример «результата парсинга» для каждого формата исходного файла (txt, html, xml, ...) приведите.

Также посмотрите что умеет делать pandoc, возможно ничего и писать уже не нужно.

http://johnmacfarlane.net/pandoc/

Deleted
()

Из перечисленного тобой - python, но лучше взять perl

Производительность

Будет ограничена вводом-выводом = этот критерий не важный.

no-such-file ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

да там просто граф был очень большой... задача была кажется strongly connected components в нём найти и подсчитать самые большие.

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

go.net/html — довольно спартанская библиотека, а к gokogiri нет документации.
А в остальном — да, отличный вариант.

quantum-troll ★★★★★
()

Haskell + Parsec, если парсер декларативный. Насчет производительности, PyPy должен прекрасно себя чувствовать.

kost-bebix ★★
()
Ответ на: комментарий от qulinxao

Ты мне не про это говори, ты мне объясни в чем суть О-натации, без учата стоимости n, и без учёта того, что в реализации посути и является n.

Я не вижу в ней ни применения, ни маломальской объективности. По мне она бесполезна, даже вредна. Сколько слабых умов она повредила, сколько идиотов в неё верят, сравнивают и т.п. Это пичально. Давай, исцили меня.

anonymous
()

Написание парсеров как таковых очень легко делается с parsec/attoparsec http://book.realworldhaskell.org/read/using-parsec.html смотри как легко !

Алсо, парсек не очень быстр, ибо работает со String (вернее потоками любых объектов, что делает его пригодным для, например, разбора DOM в xml файлах), а вот attoparsec работает с текстом, и он быстр.

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

Суть О-нотации — зависимость скорости работы алгоритма от объёма входных данных.

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

:) разбиение алгоритмов на классы эквивалентности по критерию сложности не зависящего от констрант конкретной железки.

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

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

парсек умеет любой string-like, же, но да аттапарсек быстрее

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

Да, информации про характер парсинга мало, потому пришлось гадать.

kost-bebix ★★
()

Я думаю во многом это будет зависить от того что ты вкладываешь в понятие «результаты парсинга». При прочих равных питон сольёт с обработкой данных из-за своей динамической природы. На счёт скорости парсинга - обычно это делается внешними либами (типа libxml2, но тебе, наверно, xml.sax нужен т.к. оно быстрее).

Ну а хаскель это вообще нечто. Без отдельного вдумчивого изучения я бы в функциональщину не совался, даже если тебе и скажут что твоя задача это две строки на хаскеле :).

true_admin ★★★★★
()

Писал парсер java кода на python 2.7 (minecraft). Скоростью доволен на i7.

Моё мнение - пиши на Python 2.7 с либами для парсинга, скорости тебе точно хватит. 1000+ это не так много как ты думаешь.

Если не прокатит (и ты будешь разочарован) - всегда сможешь переписать на D / JavaScript(NodeJS) / Lua.

Я бы писал на: 1. Python 2. Lua 3. D / c++ (QT)

anonymous
()
Ответ на: Всё просто. от anonymous

Чувак, в С++ «строк» нет. Есть std::basic_string<тип-символов, характеристики-символов, аллокатор>, от которого идут разные строки - string, wstring, u16string, u32string, ну и свои кастомные, если хочется. И у него требование, чтоб длина вычислялась за константу. При этом он обязан(по новому стандарту по крайней мере) хранить \0 в конце.

anonymous
()
Ответ на: комментарий от qulinxao

В gcc есть вложенные функции. В С++ есть лямбды и auto:

auto f = [/*параметры замыкания*/](/*аргументы*/) -> /* тип возвращаемого значения(не обязательно)*/
{
    /*тело*/
};

Дисплеи - это что в данном случае?

anonymous
()
Ответ на: комментарий от qulinxao

Ну и что? В сырцах линуха используется куча расширений - никого это не парит.

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

Позволяет оценить что будет при росте объема данных.

anonymous
()
Ответ на: комментарий от qulinxao

это расширение.

Это реализация. Того что спрашивал.

А ты попробуй попрограммировать на паскале без «расширений».

anonymous
()
Ответ на: комментарий от x4DA

спасибо за ссылку.

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

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

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

в указаном расширении(gcc) вроде они и используются в реализации

qulinxao ★★☆
()

выбрал python.

AoD314
() автор топика

Я пишу такого рода софт для себя на python 2.7. Производительностью доволен.

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

c/c++ не рассматриваю по первому критерию(будет много сложного кода)

Неосилятор? На C++ код будет очень компактным и простым. И быстрее чем на C++ ты ни на чем другом не напишешь.

anonymous
()
Ответ на: комментарий от drakmail

Конечно же Common Lisp! Парсеры - сильная сторона Common Lisp.

Ололо. Бугагашеньки. Сколько мб/сек твой xml dom parser дает на говнолиспеге?

anonymous
()

Неважно, можно на любом. Всё зависит больше от того, кем и как написанное будет использоваться.

Пишешь для себя? Можно, например, писать на том, что хуже знаешь, в целях самообразования. Haskell неплохой выбор: всяко полезный опыт, а питон никуда от тебя не денется. Или вообще новый язык взять, ruby какой-нибудь, или java ;)

Для кого-то, кому потом этим пользоваться, и возможно без тебя дорабатывать? Тогда вряд ли haskell, а вот питон хороший выбор, если только удастся большую часть работы спихнуть на стандартную библиотеку, написанную на C. Так чтобы не пришлось писать затратных алгоритмов на самом питоне – тормозить будет, а чем писать самому сишные вставки – лучше наверное взять D тогда.

Если бы было что-то совсем серьёзное и коммерческое, то тогда скорее всего стоял бы выбор между «низкоуровневыми» языками (C, C++ и вот D) и java, но вряд ли бы ты в этом случае на форуме спрашивал :) Если не очень коммерческое, но всё равно серьёзное, то java отпадает.

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