Jump to content

Go (golang) Bindings?


tex

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 to comment
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 to comment
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 to comment
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 to comment
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...