Sprachen ohne GC



  • dd++ schrieb:

    exotische Ausnahme: Objective-C zur Sprache des Jahres gekürt
    http://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html
    Objective-C kann man nicht ohne GC benutzen

    Doch sicher. Auf dem IPhone gibst es kein GC.



  • Das hat er bestimmt auch nicht ernst gemeint. Denn so wenig Ahnung kann man nicht haben.



  • knivil schrieb:

    Irgendjemand wird jetzt gewiss eine exotische Ausnahme nennen.

    Es gibt zu viele Ausnahmen: Haskell, Scheme, ML, Lisp, ...

    Die erste Sprache die einen GC hatte, bzw. der erste GC überhaupt, war ja wohl für Lisp.



  • Cybertec schrieb:

    knivil schrieb:

    Irgendjemand wird jetzt gewiss eine exotische Ausnahme nennen.

    Es gibt zu viele Ausnahmen: Haskell, Scheme, ML, Lisp, ...

    Die erste Sprache die einen GC hatte, bzw. der erste GC überhaupt, war ja wohl für Lisp.

    Sonst wärs ja auch keine Ausnahme.



  • Das stimmt wohl. Wobei man ja dann anders fragen müsste, nämlich was sind die Ausnahmen die mit GC nativ kompilieren.



  • Cybertec schrieb:

    Das stimmt wohl. Wobei man ja dann anders fragen müsste, nämlich was sind die Ausnahmen die mit GC nativ kompilieren.

    Ausnahmen: Haskell, Scheme, ML, Lisp, ...

    Gibt sogar interpretierte Sprachen ohne GC: Perl (ja, dort ist RAII möglich), tausende Shell-Script-Sprachen.



  • knivil schrieb:

    GC würde mir da einen großen Strich durch die Rechnung machen

    Also es gibt auch Realtime Java ... GCs sind jetzt nicht das Problem.

    Wie du sicher weißt, hat realtime wenig mit low latency zu tun. Und GCs können da ganz sicher ein Problem sein. Je nach Speichermengen, mit denen da herumgeworfen wird, kann es definitiv sinnvoll sein, die Kontrolle über die Speicherverwaltung zu behalten.


  • Mod

    Dann werden wir doch mal konkret, damit die Frage endgültig beantwortet ist. Halbwegs gängige(!) Sprachen die zu nativem Code übersetzt werden:

    • Assembly -> kein GC
    • BASIC -> kein GC
    • C -> kein GC
    • C++ -> kein GC
    • COBOL -> kein GC
    • Delphi/Pascal -> kein GC
    • FORTRAN -> kein GC
    • Lisp -> GC
    • Objective-C -> optionale GC (deprecated!)

    Ich hoffe, ich habe keine wichtige compilierte Sprache vergessen. Ich bin schon runter gegangen zu ein paar Sprachen, die ich exotisch nennen würde (Cobol, Fortran). Was noch seltener ist, darf als Exot gelten, der hier im Thread nicht wichtig ist.



  • BASIC ist eigentlich die klassische Interpretersprache, und hat auch (fürs Stringhandling) einen GC. Was macht die in deiner Liste?

    Was noch seltener ist, darf als Exot gelten, der hier im Thread nicht wichtig ist.

    Nur in dem von deiner komischen Bemerkung aufgespannten Subthread nicht. Der OP macht nicht diese Einschränkung.



  • fdfdg schrieb:

    Wie du sicher weißt, hat realtime wenig mit low latency zu tun. Und GCs können da ganz sicher ein Problem sein.

    Bitte nicht nur den ersten Satz lesen ...

    Ja, ich researche low latency graphics engines und eine GC würde mir da einen großen Strich durch die Rechnung machen. Es sei denn es gibt GC's die für realtime Anwendungen geeignet sind.



  • Bashar schrieb:

    BASIC ist eigentlich die klassische Interpretersprache, und hat auch (fürs Stringhandling) einen GC. Was macht die in deiner Liste?

    Was verstehst du unter "GC" in diesem Kontext? Meine Basic-Zeit ist sehr lang her. Ich kann mich nicht mal dran erinnern, ob es möglich war, dynamisch Speicher zu reservieren. Aber ich hatte irgendwann mal QuickBasic, was mir unter DOS auch exe-Dateien ausspuckte. Das würd mich schwer wundern, wenn es da so etwas wie einen Garbabe Collector gegeben hätte.

    Bzgl Delphi: In den ersten Versionen (Borlands Objekt-Pascal) gab es sicher keine GC. Bei den jüngsten Inkarnationen bin ich mir da aber nicht mehr so sicher.

    Für Haskell benutzt man GC.

    Simula und SmallTalk haben, soweit ich weiß, auch noch GC. Allerdings weiß ich nicht, wie es da mit dem Kompilieren aussieht oder ob das auch interpretiert wird.

    Dass bei Objective-C GC deprecated ist, wusste nicht nicht. Interessant.



  • SeppJ schrieb:

    [*]C++ -> GC wird unterstützt (seit C++11)

    FTFY.

    Ausserdem ist in deiner Liste keine Programmiersprache neuer als 30 Jahre, weshalb sie etwas unrepräsentativ ist.

    Neue native C-like Sprachen (D, Rust, Go, etc.) haben alle einen GC.
    Funktionale Sprachen sind den C-Sprachen schon seit jeher voraus, diese hatten schon früher einen GC. Ein GC ist nämlich schneller als shared_ptr und Voraussetzung für viele nette Sachen wie Closures. GC+RAII=awesome. Haskell hat auch RAII-Strukturen.



  • SeppJ schrieb:

    Dann werden wir doch mal konkret, damit die Frage endgültig beantwortet ist. Halbwegs gängige(!) Sprachen die zu nativem Code übersetzt werden:

    • Assembly -> kein GC
    • BASIC -> kein GC
    • C -> kein GC
    • C++ -> kein GC
    • COBOL -> kein GC
    • Delphi/Pascal -> kein GC
    • FORTRAN -> kein GC
    • Lisp -> GC
    • Objective-C -> optionale GC (deprecated!)

    Ich hoffe, ich habe keine wichtige compilierte Sprache vergessen. Ich bin schon runter gegangen zu ein paar Sprachen, die ich exotisch nennen würde (Cobol, Fortran). Was noch seltener ist, darf als Exot gelten, der hier im Thread nicht wichtig ist.

    Die Threadfrage war aber, ob Sprachen einen GC haben und C++ hat sehr wohl einen Garbage Collector.

    Ob man ihn nutzen muss oder nicht, das wurde nicht gefragt.

    @TS
    Nimm C, dann bist du auf der sicheren Seite.



  • krümelkacker schrieb:

    Dass bei Objective-C GC deprecated ist, wusste nicht nicht. Interessant.

    GC ist beim Eifohn nicht implementiert, damit der Akku länger hält



  • Die Threadfrage war aber, ob Sprachen einen GC haben und C++ hat sehr wohl einen Garbage Collector.

    Ist aber nicht Bestandteil der Sprache.

    @SeppJ: In der Liste fehlt mir ML (Banken) und Erlang (Telekommunikation) mit realtime GC. Streicht man Assembler und COBOL von deiner Liste und nimmt die beiden auf, dann steht es schon 5:3.



  • knivil schrieb:

    Die Threadfrage war aber, ob Sprachen einen GC haben und C++ hat sehr wohl einen Garbage Collector.

    Ist aber nicht Bestandteil der Sprache.

    http://en.cppreference.com/w/cpp/memory/gc/declare_reachable ...



  • C++ hat nen GC schrieb:

    Die Threadfrage war aber, ob Sprachen einen GC haben und C++ hat sehr wohl einen Garbage Collector.

    Ob man ihn nutzen muss oder nicht, das wurde nicht gefragt.

    Unsinn.
    C++ hat keinen GC.
    Es wurden in C++ 11 lediglich ein paar Dinge im Standard auf eine Art und Weise festgelegt, die es einfacher macht nen GC als non-Standard Erweiterung einzubinden.



  • GC ist kein Bestandteil von C++11
    http://www.stroustrup.com/C++11FAQ.html#gc-abi



  • krümelkacker schrieb:

    Bashar schrieb:

    BASIC ist eigentlich die klassische Interpretersprache, und hat auch (fürs Stringhandling) einen GC. Was macht die in deiner Liste?

    Was verstehst du unter "GC" in diesem Kontext? Meine Basic-Zeit ist sehr lang her. Ich kann mich nicht mal dran erinnern, ob es möglich war, dynamisch Speicher zu reservieren.

    Ich habe keine private Definition fuer GC. Ausserdem hab ich doch geschrieben, dass der GC fuers Stringhandling benoetigt wird. Lies einmal einen String von der Tastatur ein, schon hast du deinen dynamischen Speicher.

    Zur GC auf dem C64:

    http://www.c64-wiki.de/index.php/Garbage_Collection

    Aber ich hatte irgendwann mal QuickBasic, was mir unter DOS auch exe-Dateien ausspuckte. Das würd mich schwer wundern, wenn es da so etwas wie einen Garbabe Collector gegeben hätte.

    Weiss ich nicht, aber wenn man BASIC wie zu Grossvaters Zeiten schreibt, meint man sicher einen der alten Dialekte mit Zeilennummern, GOTO und GOSUB und dem ganzen Quark, nicht eine der modernen Varianten. QuickBasic ist ja sogar eine strukturierte Programmiersprache, die mit BASIC ausser der Grundidee nicht mehr viel gemeinsam hat.

    BTW wuerde es mich nicht wundern, wenn QuickBasic fuer Strings trotzdem noch einen GC enthaelt. Oberflaechliches Googeln gibt mir Recht, ich bin aber zu faul, das genau zu recherchieren. Meines Wissens hat aber Visual Basic (vor .NET) keinen GC, sondern Referenzzaehlung. Irgendwann muss MS den Switch gemacht haben, vielleicht ja doch schon bei QuickBasic, vielleicht aber auch erst in dem Moment, in dem ausser Strings auch andere Objekte dynamisch angelegt werden konnten.


  • Mod

    Wieso wird hier bei einer sachlichen Frage so verbissen gekämpft, als ob es darum ginge den Thread zu gewinnen? Es geht hier doch nicht darum, ob es mehr GC-Sprachen gibt als nicht-GC-Sprachen, sondern darum, welche Sprachen GC (auf Sprachlevel) haben und welche nicht.

    Antworten auf viele andere Antworten:

    Bashar schrieb:

    BASIC ist eigentlich die klassische Interpretersprache, und hat auch (fürs Stringhandling) einen GC. Was macht die in deiner Liste?

    Visual BASIC ist das einzige noch nennenswert benutzte BASIC (es wird sogar recht viel benutzt) und wird nativ compiliert. Daher ist es auf der Liste. Stringhandling habe ich nicht dran gedacht, ist das wirklich eine richtige GC? Für andere Daten ist ja schon schwer genug, überhaupt dynamische Allokationen/Pointerstrukturen zu basteln. Wenn man es doch mal hingehackt hat, dann haben diese aber sicher keine automatische GC.
    Man könnte daher jedoch Basic auf GC setzen, da die beschränkten Möglichkeiten dynamischer Allokation, die in Basic nativ unterstützt werden, eine GC haben.

    Bashar schrieb:

    Nur in dem von deiner komischen Bemerkung aufgespannten Subthread nicht. Der OP macht nicht diese Einschränkung.

    Was ist daran so komisch, wenn man nur Sprachen erwähnt, die auch von > 1 Millionen Leute gesprochen werden? Ohne diese Einschränkung gibt es hunderte Sprachen, die wir erwähnen müssten, zu denen man aber auch nur schwer Informationen bekommt. Du darfst natürlich gerne eine Liste machen.

    krümelkacker schrieb:

    Bzgl Delphi: In den ersten Versionen (Borlands Objekt-Pascal) gab es sicher keine GC. Bei den jüngsten Inkarnationen bin ich mir da aber nicht mehr so sicher.

    Die Versionen, die ich kenne (uralt) hatten es jedenfalls nicht. Kurzes googeln hat mir für neuere Versionen nichts anderes gesagt.

    krümelkacker schrieb:

    Dass bei Objective-C GC deprecated ist, wusste nicht nicht. Interessant.

    Da ich Objective-C nicht selber spreche, habe ich einfach mal Google gefragt, das hat mir diese Info geflüstert.

    C++ hat nen GC schrieb:

    Die Threadfrage war aber, ob Sprachen einen GC haben und C++ hat sehr wohl einen Garbage Collector.

    Unsinn. Sachlich schlicht und einfach falsch.

    knivil schrieb:

    @SeppJ: In der Liste fehlt mir ML (Banken) und Erlang (Telekommunikation) mit realtime GC. Streicht man Assembler und COBOL von deiner Liste und nimmt die beiden auf, dann steht es schon 5:3.

    Sind die wirklich verbreitet? Erlang kann ich ja einsehen, aber ML? Ich kann sie gerne auf die Liste aufnehmen, aber Assembler und Cobol sind doch wohl viel weiter verbreitet, die würde ich keinesfalls streichen. Am ehesten noch Cobol, aber Assembler machen noch richtig viele Leute.

    knivil schrieb:

    nimmt die beiden auf, dann steht es schon 5:3.

    Siehe oben: Hab ich was verpasst? 😕 Geht es hier um irgendeinen Punktestand? Es ist eine sachliche Liste nativ compilierter Sprachen, ob sie GC haben oder nicht, kein Wettbewerb.


Anmelden zum Antworten