1

基本的に、私は楽しみのために自分のデザインの言語のために小さくてひどく非効率的な通訳を書いてきました。F#で記述します。奇妙な部分は、私のバージョンのループのように"loop true do 0"(無限のループに変換される)、解釈するための長いコードを与えると、ネットワークに接続しようとすることです。ファイアウォールがそれに気づき、何をすべきかを尋ねてくるので、私は知っています。これは意図的なものではなく、プログラムに1行のネットワークコードが含まれていません。実験として、インタープリターのループコードを、永遠のF#whileループに変更したので、永久にループし、インタープリターの処理は実行されませんでしたが、効果はありませんでした。

私がネットワーク関連のものを言うとき、私はこれらの2つのアドレスの1つに接続することについて話している: 224.0.0.252 そして 239.255.255.250

これをグーグルで調べたところ224.0.0.252、LLMNR(Link Local Multicast Name Resolution)と239.255.255.250関係があり、SSDP(Simple Service Discovery Protocol)と関係があることがわかりましたが、それが何を意味するのかわかりません。

私のプログラムがこれを行っている理由を誰かが知っていますか?

編集:

ループコードは次のようになります(意図的に、それを実行したのが私のコードであるかどうかを確認するため):

and loopExec scope state cond body =
    while true do ()
    GNil

whileループのどこかに接続しようとします。私がこれを持っている前に:

and loopExec scope state cond body =
    let myig _ = ()
    while (exec scope state cond) <> GBool(false) do
        myig <| exec (pushScope scope) state body
    GNil

scopeが現在のスコープ、stateが現在の状態、condが条件と本体であり、condがtrueである限り評価する必要があります。myigは基本的に、問題が何であるかについてのアイデアが不足しているため、独自の無視関数を作成しました。execは、condまたはbodyでコードを実行します。

それは最高のコードではありません、私はそれを知っています。

編集2:

プログラム全体のエントリポイントに永遠のループを挿入しましたが、それでも実行されました...デバッグモードとリリースモードの両方でテストされました。

// Entrypoint of the program
[<EntryPoint>]
let main args =
    while true do ()
    // Display the greeting message thing
    displayHelp()
    // Prompt the user for code
    Console.Write("> ");
    let mutable inp = readCode()
    let mutable runCode = true
    let state = new Interpreter.State()
    while inp.Trim() <> "#exit" do
        if not (isValidLine inp) then
            if runCode then
                execCode state inp
            else
                printfn "Result: %A\n" (parseString inp)
        elif inp = "#help" then
            displayHelp()
            printfn ""
        elif inp = "#ast" then
            runCode <- false
        elif inp = "#run" then
            runCode <- true
        elif inp = "#names" then
            showNames state
        Console.Write("> ")
        inp <- readCode()
    // Ask the user to press enter before exiting
    printfn "[PRESS ENTER TO EXIST]"
    Console.Read() |> ignore
    Environment.ExitCode
4

0 に答える 0