Axum - это язык, структурированный таким образом, чтобы упростить безопасное и производительное параллельное программирование. Концепции, смоделированные языком, избегают необходимости явной синхронизации потоков с использованием lock
(в C #), Monitor
, ReaderWriterLockSlim
и т. Д. *
Можно утверждать, что многие идеи в Axum были на языке программирования Erlang с 1986 года - языке, разработанном исследователями, работающими в Швеции для Ericsson, для работы на телефонных коммутаторах и, следовательно, поддержки для огромной пропускной способности при высокой параллельной нагрузке было так важно, что она была разработана для языка. Хотя многие идеи в Axum не новы, они, безусловно, являются новыми для .NET и CLR (по крайней мере, на уровне языка).
Существующие библиотеки .NET, которые содержат некоторые из этих идей:
Как и Эрланг, передача сообщений является центральной концепцией в Axum. Как и Эрланг, Аксуму в значительной степени безразлично, находится ли получатель сообщения в процессе или удаленно. В настоящее время Axum обеспечивает интеграцию с WCF.
Axum отличается от библиотек, упомянутых выше, тем, что включает поддержку этих концепций на уровне языка, а не только посредством использования библиотек. Компилятор Axum имеет дело не только с языком Axum, но также с некоторыми экспериментальными расширениями самого языка C #; а именно ключевые слова isolated
и readonly
.
Добавление новых функций в язык не является чем-то легким. Spec # - это другой язык C # -поддержки, разработанный на MSR (не связанный с параллелизмом). Как видно с поддержкой Code Contracts в .NET 4.0, Microsoft решила предпочесть добавление нового API, а не новых языковых расширений (это выгодно пользователям всех языков в CLR.) Однако в случае Аксум, в языке C # 3.0 недостаточно богатства, чтобы выразить виды ограничений неизменности, требуемые для типов и их членов для действительно безопасного параллельного программирования.
Покопавшись в Эрланге и полюбив то, что я увидел, я очень взволнован тем, куда Аксум может нас отвезти. Некоторые расширения языка C #, предложенные командой, также полезны для обычных проектов C #.
Наконец, я хотел бы отметить, что для Эрланга есть нечто большее, чем просто хорошая модель параллелизма. Erlang - строгий функциональный язык программирования. Он поддерживает код с горячей заменой, что означает, что система может быть обновлена без остановки (желательная функция телефонного коммутатора или любой другой системы 24x7). Я слышал отчет крупной британской телекоммуникационной организации, которая в течение года работала на коммутаторе и не смогла направить четыре звонка за это время. Erlang имеет и другие характеристики, такие как удаленная обработка исключений.