Sprachen ohne GC



  • 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.



  • SeppJ schrieb:

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

    in Objective-C ist GC direkt in die Sprache integriert. man kann mit oder ohne GC programmieren. auf dem Eifohn kann man nur ohne GC abeiten, damit der Akku länger hält

    http://cocoasamurai.blogspot.de/2010/12/objective-c-memory-management-garbage.html



  • Geht es hier um irgendeinen Punktestand? Es ist eine sachliche Liste nativ compilierter Sprachen, ob sie GC haben oder nicht, kein Wettbewerb.

    Nein, kein Wettbewerb. Jedoch laesst "gaengig" viel Spielraum. Leider kann ich nicht sagen, ob ML wirklich "gaengig" ist oder Erlang kompiliert oder interpretiert wird.


  • Mod

    dd++ schrieb:

    SeppJ schrieb:

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

    in Objective-C ist GC direkt in die Sprache integriert. man kann mit oder ohne GC programmieren. auf dem Eifohn kann man nur ohne GC abeiten, damit der Akku länger hält

    http://cocoasamurai.blogspot.de/2010/12/objective-c-memory-management-garbage.html

    Ich dachte da an:
    http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html
    (Ganz unten, leider kein direkter Link)

    knivil schrieb:

    Erlang kompiliert oder interpretiert wird.

    Zumindest ist es eher üblich, Erlang zu compilieren, auch wenn es bestimmt auch Interpreter gibt.

    Jedoch laesst "gaengig" viel Spielraum.

    Dann werfe ich mal das oben schon genannte Kriterium "wird von > 1 Million Menschen benutzt" in den Raum. Wobei in Retrospektive 1 Million sehr hoch klingt, da ich mal schätzen würde, dass es bloß ~10 Millionen Programmierer auf der Welt gibt. Sagen wir > 200,000 Menschen.



  • SeppJ schrieb:

    Wieso wird hier bei einer sachlichen Frage so verbissen gekämpft, als ob es darum ginge den Thread zu gewinnen?

    Weil deine erste Antwort unsachlich war und alle aufspringen, um dir zu widersprechen. Reine Vermutung.

    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.

    Dann schreib doch Visual BASIC, damit das klar ist. Es gibt so viele Basic-Implementationen, die möglicherweise alle was anderes machen.

    Überhaupt ist die Eigenschaft, eine Garbage Collection zu haben, in der Regel eine Frage der Implementation und nicht der Sprache. -- edit: Das ist natürlich i.A. falsch, da die Sprache bestimmt, ob man manuelle Speicherfreigaben machen muss.

    Stringhandling habe ich nicht dran gedacht, ist das wirklich eine richtige GC?

    Keine Ahnung, wann ist eine GC richtig? Jedenfalls dauert das auf dem C64er ein paar Minuten bis angeblich Stunden (siehe mein Link vorhin). Richtige Zeigergraphen gibts da natürlich nicht, also ist die Verfolgung der erreichbaren Objekte ziemlich trivial, es dürfte eher das Kompaktifizieren sein, was lange dauert.

    Visual Basic hat wie gesagt keinen GC. Visual Basic.NET hat dagegen logischerweise einen. Und wird eigentlich auch nativ compiliert, wenn auch über den Zwischenschritt der CIL.

    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?

    Dass die Frage nicht nach Mainstream-Sprachen, sondern nach Sprachen gestellt war. Auch dürfte der Informationsgehalt einer Antwort, die sich nur auf Sprachen bezieht, die eh jeder kennt, trivialerweise sehr gering sein.

    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.

    knivil hat doch schon angefangen. Ich glaube auch nicht, dass es auf eine umfassende Liste wirklich ankommt.



  • Bashar schrieb:

    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

    Krass. Da hab' ich nie etwas von mitbekommen, obwohl ich für diese Kiste mal Basic-Programme bastelte. Die Frage, was "GC" hier im Kontext bedeutet, zielte aber auch darauf ab, dass ich das Problem, Zeichenketten zu verwalten, längst nicht so schwer einschätze wie das, was "richtige GCs" tun, wenn sie auch noch Kreise finden wollen etc. Deswegen weiß ich nicht so richtig, ob der Begriff da für die Basic-Implementierung auf dem C64 da passt.



  • dd++ schrieb:

    SeppJ schrieb:

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

    in Objective-C ist GC direkt in die Sprache integriert. man kann mit oder ohne GC programmieren. auf dem Eifohn kann man nur ohne GC abeiten, damit der Akku länger hält

    http://cocoasamurai.blogspot.de/2010/12/objective-c-memory-management-garbage.html

    Zeig uns mal die Sprachmittel, bitte?



  • Viele Konzepte sind gar nicht in der Sprachdefinition selbst festgelegt, sondern werden erst durch das Framework, also etwa Cocoa oder GNUStep, ermöglicht. Insbesondere ist das gesamte Laufzeitsystem nicht im Compiler implementiert, sondern besteht aus C-Funktionen. ... Daher ist eine Darstellung ohne das entsprechende Laufzeitsystem kaum denkbar und nicht sinnvoll. Originäre Objective-C-Schlüsselwörter erkennt man indessen an dem vorangestellten @.

    http://de.wikipedia.org/wiki/Objective-C



  • dd++ schrieb:

    Viele Konzepte sind gar nicht in der Sprachdefinition selbst festgelegt, sondern werden erst durch das Framework, also etwa Cocoa oder GNUStep, ermöglicht. Insbesondere ist das gesamte Laufzeitsystem nicht im Compiler implementiert, sondern besteht aus C-Funktionen. ... Daher ist eine Darstellung ohne das entsprechende Laufzeitsystem kaum denkbar und nicht sinnvoll. Originäre Objective-C-Schlüsselwörter erkennt man indessen an dem vorangestellten @.

    http://de.wikipedia.org/wiki/Objective-C

    Nun das der GC nicht Bestandteil der Sprache ist, weiß ich, wie du es mit dem Kommentar auch belegst - gut das wir darüber geredet haben, jetzt weiß du es auch.



  • SeppJ schrieb:

    Ich dachte da an:
    http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html
    (Ganz unten, leider kein direkter Link)

    sieht so aus, als hätte Apple nach jahrzehntelanger intensiver Forschung herausgefunden, daß GC nicht so die optimale Technik für die Softwareentwicklung ist

    Zeus schrieb:

    Nun das der GC nicht Bestandteil der Sprache ist, weiß ich, wie du es mit dem Kommentar auch belegst - gut das wir darüber geredet haben, jetzt weiß du es auch.

    solche Wortspielchen scheinen dir große Freude zu bereiten, das freut mich

    GC gehört genauso zu Objective-C wie unique_ptr und shared_ptr zu C++. beides ist Bestandteil des Standard Laufzeitsystems der jeweiligen Programmiersprache

    in C++ kann man auch GC verwenden. dazu benötigt man aber 3trd party Tools und Libs. deshalb ist GC kein Bestandteil von C++



  • dd++ schrieb:

    sieht so aus, als hätte Apple nach jahrzehntelanger intensiver Forschung herausgefunden, daß GC nicht so die optimale Technik für die Softwareentwicklung ist

    Hätten sie mich mal gleich gefragt.



  • dd++ schrieb:

    Zeus schrieb:

    Nun das der GC nicht Bestandteil der Sprache ist, weiß ich, wie du es mit dem Kommentar auch belegst - gut das wir darüber geredet haben, jetzt weiß du es auch.

    solche Wortspielchen scheinen dir große Freude zu bereiten, das freut mich

    GC gehört genauso zu Objective-C wie unique_ptr und shared_ptr zu C++. beides ist Bestandteil des Standard Laufzeitsystems der jeweiligen Programmiersprache

    in C++ kann man auch GC verwenden. dazu benötigt man aber 3trd party Tools und Libs. deshalb ist GC kein Bestandteil von C++

    Okok ich geb auf, du hast natürlich Recht. Der GC der erst seid ObjC 2.0 (2007) über ein Compilerflag anschaltbar ist und in den den nächsten Version wahrscheinlich zugunsten von ARC entfernt wird, ist ein integrativer Bestandteil der Sprache.


Anmelden zum Antworten