Nimrod

Pascal, Basic und andere nicht aufgelistete
Antworten
jeanluc
Beiträge: 33
Registriert: Mo Apr 22, 2013 10:18 pm

Nimrod

Beitrag von jeanluc » Mo Nov 11, 2013 7:15 pm

Was haltet ihr von nimrod (http://nimrod-code.org/) ?

Mein Pro/Contra:

[+]
- Sprachelemente aus Python (u.a. Einrückungen) und wohl auch Pascal.
- Statisch typisiert.
- Compiler generiert C Code.
- Anbindung zu C mittels c2nim (noch nicht getestet).
- Garbage Collector (kann man auch negativ sehen).
- Schnelle Ausführung (Overhead, aber hey es ist dann ein C-Kompilat).
- Relativ umfangreiche Standard-Bibliothek.
- Objektorientierung (ich brauch und will es trotzdem nicht).
- Traced und non-traced pointer. Schlüsselwörter "ref" und "ptr".
- Generizität (wers braucht...)

[-]
- Syntax "var varname : Typ" kann ich nicht ab. Besser wäre einfach "Typ varname".
- Konvention Großbuchstabe T für eigenen Datentypen finde ich suboptimal.
- Vermengung von struct / type / object.
- Sprachumfang meines Erachtens zu groß. Z.B. let und constant. Keep it simple !
- Generizität (konnte ich schon unter Java nicht leiden).

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Nimrod

Beitrag von cloidnerux » Mo Nov 11, 2013 7:51 pm

Das Problem mit allen Sprachen in diesen Nischen ist, dass dir die Möglichkeit fehlt ein sinnvolles großes Projekt auf zu ziehen und auf der anderen Seite die vorteile durch bessere Syntax und Paradigmen durch das Mangeln an Community und Anwendung fehlt.
Für all deine kleinen Probleme und Algorithmen kann da super Ergebnisse erzielen, Arbeitest du aber dann mit mehreren Zusammen und musst das Projekt größer Aufziehen, stößt man an die grenzen, vor allem wenn nicht alle damit Entwickeln wollen.
Daher entfällt ein Großteil der Vorteile in der Praxis aufgrund mangelnder Nutzbarkeit.

Ich finde die Konzepte und Ideen hinter den Programmiersprachen interessant, das warum man jetzt etwas auf diese Art und Weise gelöst hat ist spannend. Aber die Zeit die ich investiere um eine Sprache zu lernen kann auch darin investieren meine Probleme in den mir bisher bekannten Sprachen zu lösen.

Daher für mich auch die Frage: Was macht Nimrod besser als C#, C/C++ oder Python, sodass es sich lohnt zu lernen?
Redundanz macht wiederholen unnötig.
quod erat expectandum

jeanluc
Beiträge: 33
Registriert: Mo Apr 22, 2013 10:18 pm

Re: Nimrod

Beitrag von jeanluc » Mo Nov 11, 2013 11:11 pm

Das soll jetzt nicht wieder in eine allgemeine Diskussion ausarten. Ich finde, die von dir genannten Sprachen haben alle ihre Vorteile/Nachteile.

An Nimrod "neuartig" ist der Ansatz die Welten von u.a. Python und C zu vereinen. Bisher ist das "Teil", wie du geschrieben hast, eher etwas für die Nische und kaum lohnenswert zu lernen. Ich bin schon dabei einen simplen Transcompiler zu schreiben, der mir die Syntax von var und proc() aufhübscht :mrgreen:

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Nimrod

Beitrag von Xin » Di Nov 12, 2013 10:22 am

jeanluc hat geschrieben:Was haltet ihr von nimrod (http://nimrod-code.org/) ?
Nopes, aber beim Überfliegen sind mir schon einige Konzepte aufgefallen, die mir gefallen.
jeanluc hat geschrieben:- Statisch typisiert.
Der Trend geht ja bei neuen Sprachen in eine andere Richtung... eine dynamisch typisierte Sprache ist aber vorrangig einfacher zu implementieren, das als Design-Vorteil zu verkaufen klingt aber besser. :-D

Statisch typisiert ist doch sehr gut!
jeanluc hat geschrieben:- Garbage Collector (kann man auch negativ sehen).
Garbage Collectoren sind bei modernen Programmiersprachen überflüssig. Bedauerlicherweise haben wir so wenige.
jeanluc hat geschrieben: [-]
- Syntax "var varname : Typ" kann ich nicht ab. Besser wäre einfach "Typ varname".
Das ist Pascal-Syntax. Die mochte ich auch nie. Seitdem ich mich mehr mit Programmiersprachen beschäftige, mag ich die Pascal-Syntax aber lieber als die C-Syntax.
Warum? Der Variablenname steht an einer klar definierten Stelle: 4 Zeichen nach dem Beginn der Zeile. In der C-Syntax musst Du erstmal gucken, was zum Typ gehört und was nicht.
jeanluc hat geschrieben:- Generizität (konnte ich schon unter Java nicht leiden).
OOP ist ein nützliches, aber gehyptes Design Pattern. Generische Programmierung ist die Zukunft.


cloidnerux hat geschrieben:Das Problem mit allen Sprachen in diesen Nischen ist, dass dir die Möglichkeit fehlt ein sinnvolles großes Projekt auf zu ziehen und auf der anderen Seite die vorteile durch bessere Syntax und Paradigmen durch das Mangeln an Community und Anwendung fehlt.
Mit der Philosophie wären wir nie von Assembler weg gekommen.
cloidnerux hat geschrieben:Ich finde die Konzepte und Ideen hinter den Programmiersprachen interessant, das warum man jetzt etwas auf diese Art und Weise gelöst hat ist spannend. Aber die Zeit die ich investiere um eine Sprache zu lernen kann auch darin investieren meine Probleme in den mir bisher bekannten Sprachen zu lösen.
Ich kann nur jedem raten, sich alle ein bis zwei Jahre eine Programmiersprache anzugucken, die er nicht kennt und die nach Möglichkeit anders funktioniert als der Kram, mit dem man seine bekannten Probleme löst. Ich habe die Entscheidung C++ zu programmieren nie bereut, C++ ist im Hintergrund durchaus sehr aktiv und in den letzten Jahren geht man da auch große, selbstbewusste Schritte nach vorne. Aber C++ ist eine gewachsene Sprache. Um das zu erkennen und einschätzen zu können, sollte man sich durchaus mit akademischen Sprachen und Alltagssprachen beschäftigen. Entweder erkennt man dann, dass man manche (Teil-)Probleme mit einer akademischen Sprache besser lösen kann (Ich generiere über 3MB C++ Quelltext mit Python, weil es zu lange dauern würde, ihn zu schreiben und zu warten) oder man kann für seine Alltagssprache ein Idiom ableiten.
jeanluc hat geschrieben:Das soll jetzt nicht wieder in eine allgemeine Diskussion ausarten. Ich finde, die von dir genannten Sprachen haben alle ihre Vorteile/Nachteile.
Naja, manche Sprachen haben auch nur Nachteile im Vergleich zu anderen Sprachen. Die Vorteile müssen die Nachteile auch aufwiegen.
jeanluc hat geschrieben:An Nimrod "neuartig" ist der Ansatz die Welten von u.a. Python und C zu vereinen. Bisher ist das "Teil", wie du geschrieben hast, eher etwas für die Nische und kaum lohnenswert zu lernen. Ich bin schon dabei einen simplen Transcompiler zu schreiben, der mir die Syntax von var und proc() aufhübscht :mrgreen:
Bitte schreib doch was über Deine Erfahrungen mit Nimrod (kleine Beispielquellcodes?). Ich bin ja bekennender Programmiersprachenfetischist. ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

jeanluc
Beiträge: 33
Registriert: Mo Apr 22, 2013 10:18 pm

Re: Nimrod

Beitrag von jeanluc » Do Nov 14, 2013 6:10 pm

Hier mal ein Beispiel, Erzeugung eines vollständigen Binärbaums, in Abhängigkeit von der gegebenen Tiefe "num".

Code: Alles auswählen

# This is a comment

type
  TNode = object
    id : int
    child_l : PNode
    child_r : PNode
 
  PNode = ref TNode
 
var 
  counter = 0
  wurzel: PNode = nil

proc create_node(l: PNode, r: PNode): PNode =
  
  result = PNode(id: counter, child_l: nil, child_r: nil)
  #new(result)
  
  result.id = counter
  result.child_l = nil
  result.child_r = nil

  result.child_l = l
  result.child_r = r
  inc(counter)

  return result

 
proc make_tree(depth: int): PNode =
  if depth > 1:
    result = create_node(make_tree(depth - 1), make_tree(depth - 1))
  else:
    result = create_node(nil, nil)
 
when isMainModule:
  var num = 24


  wurzel = make_tree(num)
  echo("Knoten: ", counter)
  echo(wurzel.child_l.child_l.child_l.id, wurzel.child_r.child_r.child_r.id)

Ob man zwingend mit nil initialisieren muss, weiß ich grad nicht. Ich habe es einfach mal gemacht. Das Schlüsselwort "ref" steht für einen "traced" pointer. Alternativ kann man non-traced Pointer mittels "ptr" verwenden.

Hier meine äquivalente Version in C, welche ich ein paar Wochen zuvor geschrieben habe: http://bpaste.net/show/149664/

Antworten