Jump to content

Go (golang) Bindings?


Recommended Posts

Hi,

 

ich bin auf der Suche nach Go Bindings für meinen Tinkerforge Stack.

 

Go hat für mich viele Vorteile, die es insb. für den Einsatz auf kleinen Linux-Platformen (RasbPi u.ä.) aufdrängen. Go erzeugt statische Binaries ohne externe Abhängigkeiten, die Ausführung ist extrem effizient und das Nebenläufigkeitskonzept sowie die Speicherverwaltung machen das Programmieren extrem einfach.

 

Es gab früher, mit dem alten Protokoll, mal eine ziemlich verständliche Anleitung zum Schreiben eigener Bindings, aber mit der neuen Protokollversion ist das etwas komplizierter geworden und die bestehenden Bindings sind teilw. sehr sprachspezifisch.

 

Gibts diese Anleitung denn für die aktuelle Protokollversion noch oder sind ggf. sogar Bindings für Go in Arbeit?

Link zu diesem Kommentar
Share on other sites

Es sind aktuell keine Go Bindings in Arbeit. Allerdings steht es bei uns auf der Liste als möglicher Kandidat.

 

Es ist relativ einfach C und Go zu mischen: http://golang.org/cmd/cgo/

 

Ich könnte mir vorstellen das du ohne riesigen Aufwand die C Bindings in Go nutzen könntest (habe ich nicht getestet).

Link zu diesem Kommentar
Share on other sites

Danke für die schnelle Antwort. cgo möchte ich gerne vermeiden, weil man sich damit einige Probleme aus der C-Welt ins Haus holt vor denen Go einen normalerweise beschützt ;)

 

Gibt es denn das Tutorial zum erstellen eigener Bindings noch irgendwo?

Oder ist das mit der neuen Protokollversion nicht mehr sinnvoll möglich?

Link zu diesem Kommentar
Share on other sites

Eine Spezifikation des Protokolls gibt es hier: http://www.tinkerforge.com/de/doc/Low_Level_Protocols/TCPIP.html

 

Für unser Generator-Framework gibt es aktuell leider keine richtige Dokumentation. Ganz grob gibt es zwei Teile:

 

  • Funktionen/Klassen welche die Kommunikation steuern und Pakete auslesen usw. Diese werden händisch geschrieben.
  • Funktionen/Klassen welche die eigentliche API abbilden. Diese werden generiert.

 

Finden kannst du die Generatoren unter https://github.com/Tinkerforge/generators

 

Ich würde mir eine Programmiersprache aussuchen die ich kenne und die ähnlich zu Go ist. Diese kann man dann solange umändern bis am Ende Go bei rauskommt ;D. Also die Funktionen stück für stück übersetzen. Am besten angefangen bei den Funktionen welche direkt auf dem Socket arbeiten, da kann man dann sofort testen und hat direkt erste Erfolgserlebnisse. Einem Brick eine (handgeschriebene) Nachricht schicken und die Antwort darauf wieder auslesen bekommt man in 15 Minuten hin.

 

Also z.B. für C (https://github.com/Tinkerforge/generators/tree/master/c) ist der erste Teil in der ip_connection.c/h (https://github.com/Tinkerforge/generators/blob/master/c/ip_connection.c) und der zweite Teil wird über die generate_c_bindings.py generiert (https://github.com/Tinkerforge/generators/blob/master/c/generate_c_bindings.py)

 

Das sind die beiden Dinge die du grundsätzlich schreiben musst um Bindings zu generieren. Wenn das veröffentlicht werden soll müssen natürlich auch noch ein Dokumentationsgenerator sowie die Beispiele geschrieben werden. Das ist dann aber nur Fleißarbeit.

Link zu diesem Kommentar
Share on other sites

Wenn du Interesse daran hast Go Bindings zu erstellen, die wir dann nachher auch weiterverwenden können, dann solltest du dich an der Struktur aller bestehenden Bindings orientieren. Wenn die Struktur der API und die Struktur der Implementierung aller Bindings gleich (oder zumindest sehr ähnlich ist) dann sind sie einfacher zu verstehen und zu pflegen.

 

Wenn du Fragen zu den Interna der Bindings und der Generatoren hast, dann immer nur aus damit :)

Link zu diesem Kommentar
Share on other sites

  • 2 weeks later...

Danke für die Hinweise.

 

Ich werde mich an den Go Bindings versuchen, aber ich will nichts versprechen, da ich nichts weiß wie viel Zeit ich dafür erübrigen kann.

 

Alles was ich mache, pushe ich zu GitHub: https://github.com/gittex/generators

 

Falls sich jemand für den Fortschritt interessiert.

 

Wenn dann noch Fragen auchtauchen melde ich mich hier.

Link zu diesem Kommentar
Share on other sites

  • 2 years later...
  • 7 months later...
  • 11 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...