Ответ 1
[...] существуют ли операции с использованием языка, основанного на блокировке, который вообще не переводится в систему на основе ponylang?
Весь смысл использования ссылочных возможностей в Pony заключается в том, чтобы помешать вам делать вещи, которые возможны и даже тривиальны, на других языках, например, разделять список между двумя потоками и одновременно добавлять к нему элементы. Итак, да, в таких языках, как Java, вы можете обмениваться данными между потоками таким образом, который невозможно в Пони.
Кроме того, существуют ли такие операции, которые не могут быть переведены в эффективные конструкции в ponylang?
Если вы спрашиваете, могут ли языки с блокировкой быть более эффективными в некоторых ситуациях, чем пони, тогда я так думаю. Вы всегда можете создать ситуацию, в которой есть преимущества N потоков и 1 блокировки, и хуже, когда вы используете модель актера, которая заставляет вас передавать информацию в сообщениях.
Это не значит, что во всех случаях модель актера превосходит всех. Это другая модель concurrency, и проблемы решаются по-разному. Например, чтобы вычислить значения N и скопировать результаты в список:
- В потоковой модели вы бы
- создать пул потоков,
- создать потокобезопасный список,
- Создайте N задач, совместно использующих список, и
- дождитесь завершения N задач.
- В актерской модели вы бы
- создать актер Ожидание значений N,
- создайте N актеров B, разделяющих актера A, и
- дождитесь, когда A создаст список.
Очевидно, что каждая задача добавит значение в список, и каждый актер B отправит значение актеру A. В зависимости от того, как передаются сообщения между участниками, может быть медленнее отправлять значения N, чем блокировать N раз. Обычно это будет медленнее, но, с другой стороны, вы никогда не получите список с непредвиденным размером.