Смешивание Erlang и Haskell

Я думаю, что это более читаемо, учитывая намерение:

$('someTableSelector').children( 'tr:not(:first)' ).remove();

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

, Если у Вас был элемент TBODY, можно сделать это:

$("someTableSelector > tbody:last").children().remove();

, Если у Вас есть THEAD или элементы TFOOT, необходимо будет сделать что-то другое.

52
задан Paul Delhanty 13 September 2009 в 14:31
поделиться

5 ответов

Многие люди, занимающиеся Haskell и Erlang, заинтересованы в модели, в которой Erlang контролирует распространение, в то время как Haskell запускает узлы разделяемой памяти параллельно, выполняя всю обработку чисел / логику.

Отправной точкой для этого является библиотека haskell-erlang: http://hackage.haskell.org/package/erlang

И у нас есть аналогичные усилия в стране Ruby через Hubris: http: // github.com / mwotton / Hubris / tree / master

Теперь вопрос состоит в том, чтобы найти кого-то, кто действительно протолкнет взаимодействие Erlang / Haskell, чтобы выяснить сложные проблемы.

31
ответ дан 7 November 2019 в 09:34
поделиться

CLR поддерживает оптимизацию хвостового вызова с явный код операции tail (используемый F #), эквивалент которого JVM (пока) не имеет, что ограничивает реализацию такого стиля языка. Использование отдельных AppDomain s позволяет CLR выполнять «горячую» замену кода (см., Например, этот пост в блоге , показывающий, как это можно сделать).

Учитывая, что Саймон Пейтон Джонс работает прямо по коридору от Дона Сайма и команды F # в Microsoft Research, было бы большим разочарованием, если бы мы в конце концов не увидели IronHaskell с каким-то официальным статусом. IronErlang был бы интересным проектом - самой большой частью работы, вероятно, было бы портировать планировщик с зелеными потоками, не становясь таким тяжелым, как механизм Windows Workflow, или не нужно было запускать виртуальную машину BEAM поверх CLR.

2
ответ дан 7 November 2019 в 09:34
поделиться

Вам будет интересно провести время, смешивая сборку мусора между Haskell и Erlang. Erlang использует кучу для каждого процесса и копирует данные между процессами - поскольку в Haskell даже нет концепции процессов, я не уверен, как бы вы сопоставили этот «универсальный» сборщик мусора между ними. Более того, для лучшей производительности Erlang использует множество распределителей, каждый со слегка измененным поведением, которое, я уверен, повлияет на подсистему сборки мусора.

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

Итог - охват различия! НЕ запускать все в одном процессе дает огромные преимущества, особенно с точки зрения надежности. Кроме того, я думаю, что это немного наивно ожидать, что один язык / виртуальная машина прослужит вам всю оставшуюся жизнь (если вы не планируете: а) прожить короткое время или б) стать своего рода монахом кода, который работает ТОЛЬКО на единый проект). Разработка программного обеспечения - это умственная ловкость и желание использовать лучшие доступные инструменты для создания быстрого и надежного кода.

5
ответ дан 7 November 2019 в 09:34
поделиться
  1. Вы можете использовать процесс OTP gen_supervisor для отслеживания экземпляров Haskell, которые вы создаете с помощью open_port (). В зависимости от того, как «порт» завершился, вы сможете перезапустить его или решить, что он остановился намеренно, и позволить соответствующему процессу Erlang тоже умереть.

  2. Fugheddaboudit. Даже эти независимые от языка виртуальные машины, о которых вы говорите, иногда имеют проблемы с передачей данных между языками. Вы должны просто каким-то образом сериализовать данные между ними: база данных, XML-RPC, что-то в этом роде.

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

тогда вы сможете перезапустить его или решить, что он остановился специально, и позволить соответствующему процессу Erlang тоже умереть.

  • Fugheddaboudit. Даже эти независимые от языка виртуальные машины, о которых вы говорите, иногда имеют проблемы с передачей данных между языками. Вы должны просто каким-то образом сериализовать данные между ними: база данных, XML-RPC, что-то в этом роде.

  • Кстати, идея единой платформы на всю оставшуюся жизнь, вероятно, также непрактична. Вычислительные технологии и мода меняются слишком часто, чтобы можно было ожидать, что вы всегда сможете использовать только один язык. Сам ваш вопрос указывает на это: ни один язык не делает все, что мы хотели бы, даже сегодня.

    тогда вы сможете перезапустить его или решить, что он остановился специально, и позволить соответствующему процессу Erlang тоже умереть.

  • Fugheddaboudit. Даже эти независимые от языка виртуальные машины, о которых вы говорите, иногда имеют проблемы с передачей данных между языками. Вам просто нужно каким-то образом сериализовать данные между ними: база данных, XML-RPC, что-то в этом роде.

  • Между прочим, идея единой платформы на всю оставшуюся жизнь, вероятно, также непрактична. Вычислительные технологии и мода меняются слишком часто, чтобы можно было ожидать, что вы всегда сможете использовать только один язык. Сам ваш вопрос указывает на это: ни один язык не делает все, что мы хотели бы, даже сегодня.

    Даже эти независимые от языка виртуальные машины, о которых вы говорите, иногда имеют проблемы с передачей данных между языками. Вам просто нужно каким-то образом сериализовать данные между ними: база данных, XML-RPC, что-то в этом роде.

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

    Даже эти независимые от языка виртуальные машины, о которых вы говорите, иногда имеют проблемы с передачей данных между языками. Вам просто нужно каким-то образом сериализовать данные между ними: база данных, XML-RPC, что-то в этом роде.

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

    Вычислительные технологии и мода меняются слишком часто, чтобы можно было ожидать, что вы всегда сможете использовать только один язык. Сам ваш вопрос указывает на это: ни один язык не делает все, что мы хотели бы, даже сегодня.

    Вычислительные технологии и мода меняются слишком часто, чтобы можно было ожидать, что вы всегда сможете использовать только один язык. Сам ваш вопрос указывает на это: ни один язык не делает все, что мы хотели бы, даже сегодня.

    4
    ответ дан 7 November 2019 в 09:34
    поделиться

    Как dizzyd упомянул в своем комментарии, не все данные в сообщениях копируются, большие двоичные файлы существуют вне куч процесса и не копируются.

    Использование другой структуры памяти, чтобы избежать разделения на -process heaps, безусловно, возможен и был реализован в ряде более ранних реализаций. Хотя наличие единственной кучи делает передачу сообщений очень , она вызывает ряд других проблем, в основном из-за того, что сборка мусора становится более сложной, поскольку она должна быть интерактивной и глобально не прерываться, поэтому вы не можете использовать то же самое. более простые алгоритмы, такие как модель кучи для каждого процесса.

    Пока мы используем неизменяемые структуры данных, нет проблем с надежностью и безопасностью. Решение о том, какие модели памяти и сборщика мусора использовать, является большим компромиссом, и, к сожалению, существует универсальная лучшая модель.

    Хотя Haskell и Erlang являются функциональными языками, они во многих отношениях очень разные языки и имеют очень разные реализации. Было бы сложно придумать машину "Эрскелл" (или Хасланг), которая могла бы эффективно обрабатывать оба языка. Я лично считаю, что лучше держать их отдельно и убедиться, что у вас действительно хороший интерфейс между ними.

    4
    ответ дан 7 November 2019 в 09:34
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: