Что “лучшим” является Открытый исходный код lolcode интерпретатор? [закрытый]

давай попробуем! В следующем примере выполняем простое задание двумя различными способами: сначала асинхронно отправляем все задания в очередь .default .concurrent, затем используем DispatchQueue.concurrentPerform.

DispatchQueue.concurrentPerform - очень приятная и простая в использовании конструкция.

import Foundation
import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true

let q = DispatchQueue(label: "internal", qos: .utility, attributes: .concurrent)
func job()->String {
    var sum  = 0
    for i in 1...1000 {
        let r = Int.random(in: 0..<i)
        sum += r
    }
    let res = sum.description
    return res
}

func asyncFoo(on: DispatchQueue, id: Int, completition: @escaping (_ id: Int, _ result: String)->()) {

    on.async {
        let res = job()
        completition(id, res)
    }
}

let group = DispatchGroup()

var start = Date()

for i in 0..<10 {
    group.enter() // enter the group before the task starts
    asyncFoo(on: q, id: i) { (id, result) in
        print("id:", id, i, result)
        group.leave() // leave the group when task finished
    }
}
group.notify(queue: .main) {
    var stop = Date()
    print("all asynchronously dispatched done in", stop.timeIntervalSince(start), "seconds")
    let task: (Int)->() = { i in
        let res = job()
        print("id:", i, res)
    }
    print("continue again ...")
    start = Date()
    DispatchQueue.concurrentPerform(iterations: 10, execute: task)
    stop = Date()
    print("all .concurrentPerform done in", stop.timeIntervalSince(start), "seconds")
    PlaygroundPage.current.finishExecution()
}
print("continue execution ...")

и как насчет результата?

continue execution ...
id: 7 7 251189
id: 2 2 252628
id: 8 8 248525
id: 5 5 248212
id: 0 0 254412
id: 3 3 255094
id: 6 6 260566
id: 1 1 242460
id: 9 9 247018
id: 4 4 246296
all asynchronously dispatched done in 0.10741996765136719 seconds
continue again ...
id: 2 248549
id: 3 245366
id: 7 242868
id: 8 252247
id: 0 250905
id: 4 249909
id: 6 247525
id: 9 246204
id: 1 253908
id: 5 249081
all .concurrentPerform done in 0.05399894714355469 seconds

Если доступно, я предпочитаю использовать .concurrentPerform, но это действительно зависит ... Не существует API, чтобы что-либо изменить в .concurrentPerform, но скорее всего, это будет ваш лучший исполнитель.

19
задан Bill the Lizard 5 August 2012 в 23:40
поделиться

5 ответов

Зависит от Вашего фаворита / "лучший из понимания" язык - например, вот Java и интерпретатор открытого исходного кода Perl.

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

В то время как, возможно, не "лучший", я думаю, что довольно здорово, что кто-то от команды ДОЛЛАРА на самом деле создал интерпретатор LOLCode на основе ДОЛЛАРА с полным доступом к Платформе.NET.

Добавленная Ссылка от Wayback Machine

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

Конечно, без определения "лучших", существует мало способа ответить на этот вопрос с любой уверенностью. Я пишу интерпретатор LOLCODE ( http://pgfoundry.org/projects/pllolcode/ ) для поддержки LOLCODE как языка для записи хранимых процедур в базе данных PostgreSQL. (Да ведь Вы спрашиваете? Поскольку я хотел учиться как.) Этот интерпретатор записан в C и использует Бизона и Flex для парсинга. Они, кажется, "лучший" выбор в этом случае, потому что это - то, что использует сам PostgreSQL. Если Вы более знакомы с, скажем, Perl, основанный на Perl интерпретатор, вероятно, лучше.

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

Я знаю, что это не интерпретатор, но я использовал реализацию Lolcode.net , и у меня она сработала довольно хорошо. Он относительно хорошо соответствует спецификациям , за исключением нескольких вещей (например, массивов).

Кроме того, я заставил его работать в Linux, используя Mono , если совместимость с Linux важна для вы.

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

Моя любимая реализация - LOLPython

Так что большой плюс, если вы фанат Python. :)

И если вы хотите внести изменения в то, что уже определено, это довольно просто. : D

2
ответ дан 30 November 2019 в 05:18
поделиться
Другие вопросы по тегам:

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