Scala und c++



  • Hallo,

    ich programmiere jetzt seit ca 2 Jahren und habe sehr viele Sprachen gelernt. Aus irgenteinem Grund mag ich es neue Sachen zu lernen.

    Seit kurzem bin ich auf Scala gestoßen und habe mich in die Sprache verliebt.
    Ich möchte nun erstmal bei einer Sprache bleiben um Erfahrung zu sammeln.

    Doch ich habe noch ein paar Fagen.

    1. Wann sollte man Scala bzw C++ benutzen? (Anwendungsgebiete)

    2. Lohnt es sich C++ und Scala zu verbinden zB wie Lua und c++ es machen?

    3. Wie sehr hat sich C++ in den letzten Jahren verändert? Wenn ich C++ code sehe sieht es sehr verbose aus.



  • kantaki schrieb:

    ich programmiere jetzt seit ca 2 Jahren und habe sehr viele Sprachen gelernt. Aus irgenteinem Grund mag ich es neue Sachen zu lernen.

    Wenn jemand in zwei Jahren sehr viele Sprachen lernt, riskiert er keine Sprache richtig zu können.

    "irgendeinem"... scnr...

    kantaki schrieb:

    Seit kurzem bin ich auf Scala gestoßen und habe mich in die Sprache verliebt.
    Ich möchte nun erstmal bei einer Sprache bleiben um Erfahrung zu sammeln.

    Doch ich habe noch ein paar Fagen.
    1. Wann sollte man Scala bzw C++ benutzen? (Anwendungsgebiete)

    Ich selbst kann Dir zu Scala noch nicht viel sagen, ich lerne Scala selbst zur Zeit - bin aber aus Zeitmangel noch nicht weit gekommen.

    kantaki schrieb:

    2. Lohnt es sich C++ und Scala zu verbinden zB wie Lua und c++ es machen?

    Scala kompiliert in die Java-VM, die Verbindung von Java zu C++ geht über JNI und das ganze ist machbar, aber unschön.

    kantaki schrieb:

    3. Wie sehr hat sich C++ in den letzten Jahren verändert? Wenn ich C++ code sehe sieht es sehr verbose aus.

    "verbose"?

    Was heißt "in den letzten Jahren"? Es gibt jetzt C++11, was aber nicht alle Compiler vollständig schlucken. Sogesehen hat sich alleine aus Kompatiblitätsgründen in den letzten zwei Jahren nicht viel getan.

    Wenn Dir C++ zu geschwätzig ist, was ja gerade das Argument für Scala ist, so kannst Du sicherlich Dich erstmal auf Scala fokussieren. Auch wenn Du Dich in C++ offenbar nicht verliebt hast, hat C++ allerdings den Vorteil, dass viele Leute mitreden können.

    Wenn ich Scala lerne, dann tue ich das, weil mich die Konzepte hinter Scala interessieren. Aber mein Fokus liegt auf C++. Sollte Scala irgendwann mal irgendwen interessieren, so ist es sicher nicht verkehrt, Scala-Kenntnisse zu haben, doch aktuell wirst Du vermutlich leichter mit Leuten in Kontakt kommen, die C++-Kenntnisse haben. Das muss man nicht lieben, ist aber trotzdem praktisch.

    Ansonsten wirst Du selbst, wenn Du zwei Jahre nur C++ gemacht hast, kaum C++ können. In C++ verliebt man sich, wenn man verstanden hat, dass C++ erst da anfängt, wo die anderen aufhören.



  • ja wirklich richtig gut kann kein keine Programmiersprache. Es hat sich nur falsch angefühlt sich direkt auf eine Programmiersprache fest zu legen.

    Angefangen habe ich mit c++, c#, java, php, lua, python, javascript und jetzt scala.

    Scala werde ich sowieso lernen da ich mich in nächster Zeit auf Webdevelopment konzentrieren möchte und das "Lift"(Scala webframework) ist einfach awesome.

    Ich hatte c++ nur noch nie richtig eine Chance gegeben. C++ würde mir im vielen Bereichen mehr helfen, da C++ einfach so verbreitet ist. Zum Beispiel möchte ich vielleicht in 1-2 Jahren ein Spiel mit Cryengine oder Unreal4 programmieren und da würde mir Scala nicht all zu viel bringen.

    Was sind denn die großen Vorteile von C++?



  • kantaki schrieb:

    ja wirklich richtig gut kann kein keine Programmiersprache. Es hat sich nur falsch angefühlt sich direkt auf eine Programmiersprache fest zu legen.

    Man muss entscheiden, was man nimmt... wenn Du in allen Sprachen ein Hello World schreiben kannst, dann ist das auch was, aber eben nichts, was wen interessiert...

    kantaki schrieb:

    Angefangen habe ich mit c++, c#, java, php, lua, python, javascript und jetzt scala.

    104 / 8 => 13 Wochen pro Sprache.

    In zwei Jahren wirst Du kaum verstehen können, was C++ eigentlich auszeichnet. ^^
    Mit zwei Jahren Programmiererfahrung wirst Du nichtmals die Grenzen von Java erreicht haben. Wenn Du gut bist, hast Du vielleicht schon PHP verflucht.

    kantaki schrieb:

    Scala werde ich sowieso lernen da ich mich in nächster Zeit auf Webdevelopment konzentrieren möchte und das "Lift"(Scala webframework) ist einfach awesome.

    Inzwischen mache ich Webdevelopment mit C++... dafür definiert man mich gerne als verrückt, aber irgendwas ist ja immer...

    kantaki schrieb:

    Ich hatte c++ nur noch nie richtig eine Chance gegeben. C++ würde mir im vielen Bereichen mehr helfen, da C++ einfach so verbreitet ist. Zum Beispiel möchte ich vielleicht in 1-2 Jahren ein Spiel mit Cryengine oder Unreal4 programmieren und da würde mir Scala nicht all zu viel bringen.

    Locker blieben... Bevor Du den ultimative Ego-Shooter schreibst, versuch Dich mal mit einem Vokabeltrainer... 😉

    kantaki schrieb:

    Was sind denn die großen Vorteile von C++?

    http://www.proggen.org/doku.php?id=start:cppjava



  • Xin schrieb:

    kantaki schrieb:

    Scala werde ich sowieso lernen da ich mich in nächster Zeit auf Webdevelopment konzentrieren möchte und das "Lift"(Scala webframework) ist einfach awesome.

    Inzwischen mache ich Webdevelopment mit C++... dafür definiert man mich gerne als verrückt, aber irgendwas ist ja immer...

    Echt? Wie machst Du das?



  • werrterscvsc schrieb:

    Xin schrieb:

    kantaki schrieb:

    Scala werde ich sowieso lernen da ich mich in nächster Zeit auf Webdevelopment konzentrieren möchte und das "Lift"(Scala webframework) ist einfach awesome.

    Inzwischen mache ich Webdevelopment mit C++... dafür definiert man mich gerne als verrückt, aber irgendwas ist ja immer...

    Echt? Wie machst Du das?

    Zuerst über CGI, dann habe ich mir eine entsprechende Lib angeguckt (libcgi afair). Das geht auch alles, aber kam mir irgendwie doch frickelig vor.
    Also habe ich mich dann darauf berufen, dass ich inzwischen ein akzeptables eigenes Framework habe und ein billiger Webservice, der einfach eine Seite ausliefert, etwa 2 Bildschirmseiten C-Code ist. Also nix... Das musste ich früher als Tutor unterrichten, die Quellen waren also auch schon da. Ein billiger Webservice auf 2 Seiten ist natürlich nicht schön, funktioniert aber.

    Den Service dann in "schön" übertragen, alle erforderlichen Daten in entsprechende Hashmaps gepackt, das ganze in eine Klasse "HttpResult" verpackt, die ich nun an eine "Responder"-Klasse übergebe, die je nach Anfrage-Typ einen "Renderer" aufruft. Dieser Renderer ist wiederum eine C++-Klasse, die von "HttpResult" URL, POST- und GET-Variablen, sowie Session-Variablen erfragen kann und sich dann überlegen kann, was sie damit anfangen soll. Das sieht dann aus wie PHP, ist aber C++ - also erstmal typsicher.
    Für Datenbanken hatte ich vorher schon passendes: die Fähigkeit zur Persistenz über MySQL können Datenklassen von einem Template quasi erben, sie müssen halt noch darüber informieren, in welche Tabelle sie geschrieben werden sollen, bzw. welche Member überhaupt gespeichert werden sollen. Der Rest ist lediglich die Information, dass dieser Datensatz jetzt in der Datenbank zu landen hat.
    Das ist jedenfalls einfacher, als das was ich früher in PHP schreiben durfte.

    Das klingt erstmal nach mehr Aufwand, ich bin mir allerdings sicher, dass ich - gerade im Vergleich zu PHP - nun deutlich aufholen kann und dass es mir aufgrund geringerer Rechenlast erspart, frühzeitig auf größere Server ausweichen zu müssen, was sich auch finanziell positiv bemerkbar machen wird. Zumal ich an den Hürden, die mir PHP abnimmt, mit meinem eigenen Webservice schon vorbei bin.

    Von den Renderern gibt es einen FileTransmitter, der z.B. einfach Grafiken übermittelt - oder eben auch Html-Dateien und einen spezialisierten Renderer, der Wiki-Texte zu HTML übersetzt.
    Aktuell arbeite ich an Caching und Versionierung von Content, wofür ich ein entsprechendes Fileformat entwickle. Das meiste will ich gar nicht erst umständlich in eine Datenbank packen.

    Die erste Website, die ich auf dem System testweise hosten will, dürfte noch dieses Jahr online gehen.
    Eigentlich müsste ich das Ding nur noch als Debian-Paket packen und auf einem Server installieren, meine alte (noch php-freie) Homepage läuft jedenfalls zu Hause bereits.



  • kantaki schrieb:

    2. Lohnt es sich C++ und Scala zu verbinden zB wie Lua und c++ es machen?

    Nein, dazu seh ich irgendwie überhaupt keinen Grund. Wie soll das sinnvoll gehen? Ich mische ab und zu Java und Scala in einem Projekt, das geht ganz gut, aber die IDE Unterstützung ist mangelhaft. Aebr wenn du C++ und Scala mischen willst, müssten das zwei komplett getrennte Projekte sein, die z.B. über Webservices kommunizieren. Alles andere, wie z.B. JNI bringt gar nichts.



  • Xin schrieb:

    http://www.proggen.org/doku.php?id=start:cppjava

    +1
    Klasse Artikel, spricht mir aus dem Herzen 😉



  • Ich programmiere seit 2 Jahren so gut wie täglich und nebenbei lerne ich Sprachen die mich interessieren.
    so großartig unterscheiden sich die meißten imperativen Sprachen nicht von einander und es ist relativ einfach sich andere anzueignen.

    Es gibt immer ein paar Sachen die mich auf dauer nerven.
    zb

    Java: Kein Lambda, kein Overloading, bin kein Fan von Interfaces bzw Boilercode,
    Generics => zB Keine Types bei Runtime.

    C#: Crossplatform nur mit mono, .NET für windows.

    Python: Viel Konvention, "schlechterer" IDE support als zb Java/c# etc

    PHP: meh..

    Lua,C++: Zu wenig Erfahrung um die Cons zu sehen.

    Scala: Tools, längere Compiletime als Java (~20x länger?).

    Wie lange dauert es eigentlich bis der neuste Standard komplett von den Compilern unterstüzt wird?

    Könnte mir jemand einen kleinen C++ Codeschnipsel posten zB irgentein elegant gelöstest Problem? Am liebsten mit den neusten Features.



  • Xin schrieb:

    http://www.proggen.org/doku.php?id=start:cppjava

    *Kopfschütteln* Stellt sich als Profi hin, schreibt wie ein Amateur. Sachliche Kritik an Systemdesign zwischen C++ und Java würde angemessen sein, aber nicht diesen Bullshit.



  • Zeus schrieb:

    Xin schrieb:

    http://www.proggen.org/doku.php?id=start:cppjava

    *Kopfschütteln* Stellt sich als Profi hin, schreibt wie ein Amateur. Sachliche Kritik an Systemdesign zwischen C++ und Java würde angemessen sein, aber nicht diesen Bullshit.

    proggen.org hat ein Wiki, um die Qualität von Artikeln zu kontinuierlich verbessern. Sachliche und konstruktive Kritik ist also sehr willkommen und wird in der Regel auch zeitnah in die Artikel eingearbeitet.

    Solange diese Kritik nicht qualitativer als "schreibt wie ein Amateur ... diesen Bullshit" ist, joah... sehe ich noch keinen Handlungsbedarf. Aber dennoch danke für Dein Feedback.



  • Xin schrieb:

    Zeus schrieb:

    Xin schrieb:

    http://www.proggen.org/doku.php?id=start:cppjava

    *Kopfschütteln* Stellt sich als Profi hin, schreibt wie ein Amateur. Sachliche Kritik an Systemdesign zwischen C++ und Java würde angemessen sein, aber nicht diesen Bullshit.

    proggen.org hat ein Wiki, um die Qualität von Artikeln zu kontinuierlich verbessern. Sachliche und konstruktive Kritik ist also sehr willkommen und wird in der Regel auch zeitnah in die Artikel eingearbeitet.

    Solange diese Kritik nicht qualitativer als "schreibt wie ein Amateur ... diesen Bullshit" ist, joah... sehe ich noch keinen Handlungsbedarf. Aber dennoch danke für Dein Feedback.

    Ja, klar ein blinder kann auch nicht sehen. Dein Artikel trivialisert auf einfachen Featurevergleich zwischen zwei Programmiersprache. Das Programmiersprache ein komplexes System ist, dass Änderung vom Design sensible ist, damit Auswirkungen auf andere Aspekte hat, wird garnicht eingegangen. Nach dem Motto C++ hat Mehrfachvererbung sowie Template und Java nicht. Dabei wird nicht untersucht, dass solche Sprachfeature innerhalb von Java nötig sind, sondern weil Sie in C++ vorhanden ist, abgeleitet, dass die Änderung nur zur Vereinfachung von C++ gemacht wurden. Der Abschnitt zu GC ist auch falsch oder nur richtig wenn du Stoppende-GC meinst. Generics sind keine Template: 1) Template sind mächtiger. 2) Generics als Type umgekehrt zu Templates verhalten.



  • Zeus schrieb:

    Ja, klar ein blinder kann auch nicht sehen. Dein Artikel trivialisert auf einfach Featurevergleich zwischen zwei Programmiersprache.

    Das sehe ich nicht so, die Auswirkung der unterschiedlichen Features werden auch bewertet. Und zwar so, wie ich es für richtig erachte.
    Darum steht als erster Satz des Artikels, dass es sich um meine persönliche Meinung handelt.
    Es steht jedem frei anderer Meinung zu sein, bisher sind die Reaktionen allerdings größtenteils positiv.

    Zeus schrieb:

    Das eine Programmiersprache ein komplexes System ist, welche Designänderung auswirkungen andere Aspekte des System hat wird garnicht eingegangen. Nach dem Motto C++ hat Mehrfachvererbung sowie Template und Java nicht.

    Die Designänderung von Java durfte ich als Java-Entwickler schon in der Realität sehen. Mehrfachvererbung fehlt.

    Wie möchtest Du denn, dass ich auf die Designveränderungen eingehe? Gibt es etwas, was ich positiv hervorheben sollte, wo ich Java unrecht tue?

    Zeus schrieb:

    Dabei wird nicht untersucht, dass solche Sprachfeature innerhalb von Java nötig sind, sondern weil Sie in C++ vorhanden ist, abgeleitet dass die Änderung nur zur Vereinfachung von C++ gemacht wurde.

    Mit C# konnte ich das Diamantproblem mal nachbauen. Versehentlich(!).
    Ich fand das witzig, weil das ja eigentlich gar nicht geht... das ist mir in C++ noch nie passiert, denn C++ hilft mir das zu vermeiden.

    Du kannst mir gerne erklären, weshalb "solche" Sprachfeature nötig sind. Interfaces kann ich in C++ nachbilden, sind also kein Mehrwert von Java, es handelt sich also in Java tatsächlich um einen Mangel an Mehrfachvererbung. Warum der Mangel eines sinnvollen Features ein Feature sein soll, hätte ich gerne mal genauer erklärt.

    Zeus schrieb:

    Der Abschnitt zu GC ist auch falsch oder nur richtig wenn du Stoppende-GC meinst.

    Da Java stoppt und sich der Artikel um Java kümmert und nicht um GCs allgemein...

    In einem Artikel über GCs kann man das gerne ausführlicher machen, aber Smart-Pointer würde ich jetzt auch nicht als Lösung/GC bezeichnen, zumal sich damit genauso ein "stoppendes" Verhalten konstruieren lässt.

    Zeus schrieb:

    Generics sind keine Template: 1) Template sind mächtiger. 2) Generics als Type umgekehrt zu Templates verhalten.

    Bei 2) verstehe ich Deine Aussage nicht. Du verhältst Dich umgekehrt zu mir - aber die Aussage hat auch wenig Substanz. 😉

    Auf die Tatsache, dass Templates mächtiger als Generics sind, gehe ich gar nicht ein - es widerspricht auch nicht der Aussage des Artikels.

    Allgemein gehe ich auf Generics/Templates nicht groß ein, weil - wie Du richtig sagst, Generics keine Templates sind und Templates keine Generics. Würde ich schreiben, dass Java keine Templates kann, grätscht mir jeder Java-Fan - und das zu recht! - ein, dass C++ keine Generics kennt.

    Der Mangel an Features in Java ist hingegen unbestreitbar: Kein Const-Correctness, keine Mehrfachvererbung, dafür krankt es am Sprachdesign: überall fliegen Exceptions, zur Laufzeit kann man sich nicht auf einen überschaubaren Ereignishorizont verlassen.

    Java ist vom Sprachkonzept her eine Katastrophe, wenn man es gegen C++ vergleicht - insbesondere wenn man berücksichtigt, dass Java nicht die Sprache ist, die OOP in eine C++-Artige Syntax holte oder mit der OOP-Designpatterns ausprobiert wurden. Man hätte echte C++-Probleme lösen können, man hat das Potential einer angeblichen C++-Nachfolgesprache nutzen können.
    Hat man aber nicht.

    Wenn ich etwas in dem Artikel konkret verbessern kann, bin ich für Hinweise dankbar. Hinweise wie 'Abschnitt ist falsch oder nur richtig im Java-Kontext' sind bei einem Java-Artikel einfach nicht hilftreich. Welches konkrete "solche" Sprachfeature meinst Du wäre nötig? Was konkret sind diese "anderen Aspekte", auf die Du Dich beziehst.

    Sag mir konkret, worauf ich eingehen sollte, dann kann ich sehen, ob der Artikel hier verbessert werden kann/sollte.



  • Xin schrieb:

    Warum der Mangel eines sinnvollen Features ein Feature sein soll, hätte ich gerne mal genauer erklärt.

    Ach, damit kannst du den Java Leuten nicht kommen, die freuen sich ja auch, dass sie keine unsigned Typen haben. 🤡



  • Xin schrieb:

    Zeus schrieb:

    Der Abschnitt zu GC ist auch falsch oder nur richtig wenn du Stoppende-GC meinst.

    Da Java stoppt und sich der Artikel um Java kümmert und nicht um GCs allgemein...

    Java stoppt überhaupt nix, du willst mir weiß machen, dass es keine pauseless JVM gibt?

    Da du mein Post sogerne zerfetzt, bin ich mal raus, bye.



  • Zeus schrieb:

    Xin schrieb:

    Zeus schrieb:

    Der Abschnitt zu GC ist auch falsch oder nur richtig wenn du Stoppende-GC meinst.

    Da Java stoppt und sich der Artikel um Java kümmert und nicht um GCs allgemein...

    Java stoppt überhaupt nix, du willst mir weiß machen, dass es keine pauseless JVM gibt?

    Ich will Dir überhaupt nichts weismachen, aber dass Du als Javaentwickler nicht davon ausgehen darfst, realtimefähige Anwendungen zu schreiben, ist Dir sicher bewusst?
    Und diejenigen, die es doch versuchen, entfernen als erstes die Abhängigkeit vom GC, damit der nicht dazwischen funkt.

    Und wie gemütlich der GC ist, sah ich mal bei einer Angriffssimulation für Kriegsschiffe - also einem Testprogramm, in dem dafür Algorithmen getestet wurden. Als mir ein Kollege sein Produkt zeigte, kam es zur Garbage-Collection-Katastrophe: Die Rakete kam, der GC sprang an, Java stockte... eine echte Rakete hätte in dem Moment wohl nicht gewartet... wir fanden das alle sehr lustig. 🙂
    Man erklärte mir sofort, dass die Simulation ausdrücklich weitergeben wird unter der Prämisse, dass man das Programm nicht in echt benutzt... es ist halt nur eine Testsimulation für Algorithmen.

    Schon irgendwie eine Ironie, Software zu entwickeln, bei der vertraglich geregelt wird, dass sie nicht ernsthaft benutzt wird...

    Zeus schrieb:

    Da du mein Post sogerne zerfetzt, bin ich mal raus, bye.

    Liefere mir etwas konkretes, womit man sich beschäftigen kann. Ich stelle Dir lediglich Fragen, wenn das bei Dir schon unter "zerfetzen" läuft, dann solltest Du einen eigenen Artikel schreiben.
    Oder besser doch nicht, schließlich könnte jemand vorbei kommen und Dir etwas wie "schreibt wie ein Amateuer" oder "Bullshit" schreiben - das wäre ja quasi eine Kriegserklärung? 😉

    Also ruhig Blut... wenn Du mir konkret helfen kannst, den Artikel zu verbessern, gerne. Wenn nicht, bleibt er so.
    Bye.



  • Xin schrieb:

    Ich will Dir überhaupt nichts weismachen, aber dass Du als Javaentwickler nicht davon ausgehen darfst, realtimefähige Anwendungen zu schreiben, ist Dir sicher bewusst?

    Ich bin kein Java-Entwickler.



  • Ich will Dir überhaupt nichts weismachen, aber dass Du als Javaentwickler nicht davon ausgehen darfst, realtimefähige Anwendungen zu schreiben, ist Dir sicher bewusst?

    Es gibt doch tausende realtimefähige Anwendungen in Java bzw JVM.

    twitter, fouresquare. (Webanwendungen)
    Android (C++/Java)
    Minecraft
    ...



  • kantaki schrieb:

    Ich will Dir überhaupt nichts weismachen, aber dass Du als Javaentwickler nicht davon ausgehen darfst, realtimefähige Anwendungen zu schreiben, ist Dir sicher bewusst?

    Es gibt doch tausende realtimefähige Anwendungen in Java bzw JVM.

    twitter, fouresquare. (Webanwendungen)
    Android (C++/Java)
    Minecraft
    ...

    Realtime bedeutet, dass die Software ein klar definiertes Laufzeitverhalten _garantiert_.

    Sobald Du einen GC dazwischen schaltest, ist das Laufzeitverhalten nicht garantiert, daraus folgt: sobald Du Java nutzt, garantierst Du gar nichts mehr, bzw. darfst erstmal mächtig Aufwand betreiben.

    Das spielt bei einem Texteditor oder einer Händi-App keine Rolle, dann ruckelt es halt mal. Den meisten Usern ist das egal, ob Whats App in Echtzeit reagiert, solange es nicht durchgehend als "träge" registriert wird. Der Mensch toleriert da relativ große Zeitspannen. "Zukunft" beginnt für den Menschen erst in etwa 300ms. Wenn ein einzelner Buchstabe dann mal was länger braucht, weil zwischendurch der GC stottert... innerhalb von 300ms sind Einzel-Ereignisse "gegenwärtig".

    Ob Dein Tweet 300ms Sekunden früher oder später gesendet wird, spielt keine Rolle - das wirst Du vermutlich gar nicht bemerken. Ob dein Airbag 300ms früher oder später auslöst... hier wirst Du mit etwas Glück noch einen Unterschied bemerken können.
    Hier kann eine Realtimeanwendung Vorteile bringen. ;->




Log in to reply