2009-01-10 3 views
10

Ich möchte nur all die kleinen Probleme wissen, die zwischen Ihnen und Ihrer endgültigen Lösung entstanden sind, als Sie Neuling waren.Lernen Erlang? speedbump thread, common, small problems

Zum Beispiel ist hier die erste speedbumps ich hatte:

  1. Verwendung controlling_process (Sockel, Pid), wenn Sie in mehreren Threads laichen ab. Rechtes Paket zum richtigen Thread.
  2. Sie beginnen mit einem anderen Server zu sprechen? Denken Sie an net_adm: ping ('car @ bsd-server'). in der Schale. Sonst wird keine Kommunikation durchkommen.
  3. Timer: Schlaf (10), wenn Sie nichts tun wollen. Immer nützlich beim Debuggen.
+0

Gute Frage Joe, aber Sie sollten entweder Ihre Antworten als Antworten oder halten Sie sie in Ihrer Frage, nicht beides. Vorzugsweise sollten sie Antworten sein. – ryeguy

Antwort

1

controlling_process()

Verwendung controlling_process (Sockel, Pid), wenn Sie in mehreren Threads laichen ab. Rechtes Paket zum richtigen Thread.

1

net_adm: ping()

Sie auf einen anderen Server im Gespräch gehen zu beginnen? Denken Sie an net_adm: ping ('car @ bsd-server'). in der Schale. Sonst wird keine Kommunikation durchkommen.

0

timer: Schlaf()

Pause für X ms.

0

Die Sache, die mich am meisten Zeit gekostet hat, war nur die Idee, meinen Code vollständig um Funktionsaufrufe und Nachrichtenübergabe zu strukturieren. Der Rest fiel entweder einfach von dort ab (Laichen, entfernte Knoten) oder fühlte sich an wie das übliche Zeug, das man in irgendeiner neuen Sprache lernen muss (Syntax, stdlib).

2

Integrieren Sie es in msvc 6, so konnte ich den Editor verwenden, und sehen Sie die Ergebnisse im Ausgabefenster.

habe ich ein Werkzeug, mit

Befehl - Pfad

Argumente erlc - + DEBUG_INFO $ (Dateiname) $ (FileExt)

Initial Verzeichnis - $ (fileDir)

Geprüft Verwenden Sie das Ausgabefenster.

5
  • Learning in der Standarddokumentation

    zu durchsuchen Wenn Sie lernen, wie die OTP-Dokumentation organisiert ist es viel einfacher zu finden, wird das, was Sie suchen (Sie neigen müssen lernen, welche Anwendungen bereitzustellen, die Module oder Arten von Modulen).

    Auch das Durchsuchen der Dokumentation für Anwendungen ist oft recht lohnend - ich habe auf diese Weise viele wirklich nützliche Codes entdeckt - sys, dbg, toolbar usw.

  • Der Unterschied zwischen Schale und erlang Modul erlang

    Shell erlang einen etwas anderen Dialekt ist Erlang Modul. Sie können keine Modulfunktionen definieren (nur Spaß), Sie müssen Datensatzdefinitionen laden, um mit Datensätzen arbeiten zu können (rr/1) und so weiter. Erlanges Erlangung von Erlang-Code in Bezug auf anonyme Funktionen ist etwas schwierig, aber wichtig für die Arbeit an Produktionssystemen mit einer Remote-Shell.

    Erlernen der Interaktion zwischen der Shell und den {start, spawn} _link ed-Prozessen - Wenn Sie Shell-Code ausführen, der abstürzt (eine Ausnahme auslöst), wird der Shell-Prozess beendet und die Ausgangssignale an alle verknüpften Objekte gesendet. Dies wird wiederum den neuen gen_server herunterfahren, an dem Sie gerade arbeiten. ("Warum wird mein Server-Prozess halten verschwinden?")

  • Der Unterschied zwischen erlang Ausdrücke und guard Ausdrücke

    Garde Ausdrücke (when-Klauseln) sind nicht Erlang Ausdrücke. Sie mögen ähnlich aussehen, aber sie sind sehr unterschiedlich. Guards können keine beliebigen Erlang-Funktionen aufrufen, sondern nur Guard-Funktionen (length/1, die Typprüfungen, element/2 und einige andere, die in der OTP-Dokumentation spezifiziert sind). Wärter gelingen oder versagen und haben keine Nebenwirkungen. Erlang Ausdrücke können andererseits tun, was sie mögen.

  • -Code Laden

    Ausarbeiten, wann und wie Code-Upgrades arbeiten, um die Beschwörung eines gen_server zu bekommen auf die neueste Version eines Callback-Modul (code:load(Mod), sys:suspend(Pid), sys:change_code(Pid, Mod, undefined, undefined), sys:resume(Pid).) zu aktualisieren.

    Der Code-Server-Pfad (code:get_path/0) - Ich kann nicht zählen, wie oft ich auf undefinierte Funktionsfehler stieß, die sich als vergessen herausstellen, ein ebin-Verzeichnis zum Code-Suchpfad hinzuzufügen.

  • Gebäude erlang Code

    eine nützliche Kombination von EDie Ausarbeiten (make:all/0 und erl -make) und Gnu Make dauerte ziemlich lange Zeit (etwa drei Jahren so weit :).

    Mein aktuelles Lieblingsmakefiles kann http://github.com/archaelus/esmtp/tree/master

  • Erlang-Verteilung

    Erste Knotennamen, dns, Cookies und die ganzen Rest rechts, um die anderen Knoten zu net_adm:ping/1 in die Lage sein zu erkennen. Das braucht Übung.

  • Remote-Shell-IO Feinheit

    Remembering group_leader()-io:format Anrufe auf dem entfernten Knoten laufen zu übergeben, so dass die Ausgabe in der Shell erscheint anstatt auf mysteriöse Weise verschwindet (ich glaube, der SASL Bericht Browser rb noch ein Problem hat mit einigen seiner Ausgabe an den falschen Knoten sendet, wenn über einen Remote-Shell-Verbindung verwendet)

2
  • Debugging ist hart. Alles, was ich zu tun weiß, ist, Anrufe in meinem Code an "error_logger: info_msg" zu hängen.
  • Docs waren fleckig - sie sind korrekt, aber sehr, sehr knapp.
  • Das ist meine eigene Schuld, aber: Ich fing an zu programmieren, bevor ich eunit verstand, also ist viel Code schwieriger zu testen, als es sein sollte.