F# предоставляет Вам автоматический параллелизм?

Я предполагаю, что вы должны нажимать эти кнопки последовательно.

Создайте 2 логические переменные в вашем ViewController и 2 метода IBAction, по одной для каждой кнопки. Когда кнопка A или B нажата, установите для соответствующего логического значения значение true. Когда вторая кнопка (A или B) нажата, проверьте, является ли булева переменная другой кнопки истинной. Если да, запустите переход программно.

Вы можете создать этот переход между двумя контроллерами представления в раскадровке. Не забудьте дать segue подходящее имя.

Вот пример кода.

 class MyViewController: UIViewController {

        var buttonAIsTapped: Bool = false
        var buttonBIsTapped: Bool = false

        override func viewDidLoad() {
            super.viewDidLoad()
        }

        @IBAction func buttonATapped(_ sender: UIButton) {
            buttonAIsTapped = true
            if buttonBIsTapped == true {
               self.performSegue(withIdentifier: "SegueName", sender: self)
        }
        @IBAction func buttonBTapped(_ sender: UIButton) {
            buttonBIsTapped = true
            if buttonAIsTapped == true {
               self.performSegue(withIdentifier: "SegueName", sender: self)
        }
    }
17
задан Joan Venge 25 March 2009 в 17:50
поделиться

8 ответов

Нет, я боюсь нет. Учитывая, что F# не является чистым функциональным языком (в самом строгом смысле), было бы довольно трудно сделать так, я верю. Основной способ хорошо использовать параллелизм в F# состоит в том, чтобы использовать Асинхронные Рабочие процессы (главным образом через Асинхронный модуль, которому я верю). TPL (Библиотека Параллели Задачи), который начинается с.NET 4.0, собирается выполнить подобную роль в F# (хотя особенно это может использоваться на всех языках.NET одинаково хорошо), хотя я не могу сказать, что я уверен точно, как это собирается интегрироваться с существующей асинхронной платформой. Возможно, Microsoft будет просто советовать использованию TPL для всего, или возможно они уедут и как опция, и каждый в конечном счете станет фактическим стандартом...

Так или иначе вот является несколько статей об асинхронном программировании / рабочими процессами в F# для запущения Вас.

15
ответ дан 30 November 2019 в 12:14
поделиться

F# не делает это автоматическим, это просто помогает.

Еще один шанс связаться с разговором о PDC Luca. Восемь минут, запускающихся в 52:20, являются потрясающей демонстрацией асинхронных рабочих процессов F#. Это качается!

8
ответ дан 30 November 2019 в 12:14
поделиться

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

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

3
ответ дан 30 November 2019 в 12:14
поделиться

Как другие упомянутые, F# автоматически не масштабируется через ядра и все еще потребует платформы, такой как порт ParallelFX, который упомянул Josh.

F# обычно связывается с потенциалом для параллельной обработки, потому что это принимает значение по умолчанию к объектам, являющимся неизменным, устраняя необходимость блокировки для многих сценариев.

2
ответ дан 30 November 2019 в 12:14
поделиться

Нет это не будет. Необходимо все еще явно упорядочить вызовы к другим потокам с помощью одного из многих механизмов, поддерживаемых F#.

1
ответ дан 30 November 2019 в 12:14
поделиться

На аннотациях чистоты: Контракты Кода имеют Чистый атрибут. Я не забываю слышать, что некоторые части BCL уже используют это. Потенциально, этот атрибут мог использоваться платформами распараллеливания также, но я не знаю о такой работе над этой точкой. Кроме того, я' даже уверенный, как хорошо контакты кода применимы из F#, так много неизвестных здесь.

Однако, будет интересно видеть, как весь этот материал объединяется.

2
ответ дан 30 November 2019 в 12:14
поделиться

Мое понимание - то, что это не будет, но Параллельные Расширения, которые будут изменяться для создания этого потребляемым F#. То, которое не заставит его автоматически мультираспараллелить его, должно сделать очень легким достигнуть.

1
ответ дан 30 November 2019 в 12:14
поделиться

Ну, у Вас есть свой ответ, но я просто хотел добавить, что я думаю, что это - старшее значащее ограничение F#, происходящего от того, что это - гибридный обязательный/функциональный язык.

Я хотел бы видеть некоторое расширение F#, который объявляет, что функция чиста. Таким образом, это не имеет никаких побочных эффектов, которые не обозначены типом функции. Идея состояла бы в том, что функция чиста, только если она ссылается другой "известный - чистые" функции. Конечно, это только было бы полезно, если бы было затем возможно потребовать, чтобы делегат, переданный как параметр функции, сослался на чистую функцию.

1
ответ дан 30 November 2019 в 12:14
поделиться
Другие вопросы по тегам:

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