Hinweis: Der folgende Beitrag kann kontroverse Meinungen enthalten. Bitte beachten Sie, dass dies nur meine Meinung ist und nicht dazu gedacht ist, jemanden zu beleidigen.
Ich programmiere in der einen oder anderen Form seit ungefähr 1999. Ich habe zuerst R verwendet und dann später, ungefähr 2004, hauptsächlich auf Python umgestellt.
Für viele wissenschaftliche Anwendungen, zum Beispiel für die Simulation, einschließlich MCMC, sind sowohl R als auch Python zu langsam und müssen beschleunigt werden. Die übliche Vorgehensweise ist das Erweitern mit C oder C ++. Das habe ich sowohl für R als auch für Python getan, indem ich die C-API von R mit C ++ und die Boost-Python-Bibliothek mit Python verwendet habe.
Aus verschiedenen Gründen ist diese Kombination jedoch nicht die ideale Lösung. Was ist bei der Programmierung wichtig, insbesondere bei Algorithmen? Ausdruckskraft und Schnelligkeit, die natürlich zusammenhängen. Je ausdrucksvoller eine Sprache ist, desto schneller kann man darin schreiben.
1) Was die Ausdruckskraft angeht, sind meiner Meinung nach weder R noch Python wirklich ideal, um wissenschaftliche Algorithmen zu schreiben. Sie sind nicht eng mit dem zugrunde liegenden Algorithmus verknüpft. Beide sind jedoch deutlich besser als C ++.
2) Ich schreibe gerne in Python, einer angenehmen Sprache, obwohl sie, wie oben erwähnt, nicht ideal für algorithmische Arbeiten ist. Wenn man jedoch aufgrund von Geschwindigkeitsproblemen mit einer Python / C ++ - Kombination arbeiten muss, wird diese Mischung erheblich unangenehmer. Was normalerweise passiert ist, dass ich zuerst in Python schreibe und wenn ich etwas habe, das gut funktioniert, stelle ich oft fest, dass es zu langsam ist (für einen subjektiven Wert von zu langsam). Ich stehe dann vor der Entscheidung, ob ich unangemessen viel Zeit damit verbringen soll, es in C ++ umzuschreiben oder die Langsamkeit in Kauf zu nehmen. Im Nachhinein habe ich oft das Gefühl, ich hätte die Langsamkeit besser ertragen können, zumal die erzielten Beschleunigungen unvorhersehbar sind. Auch die Boost Python-Schnittstelle zwischen den beiden ist ein erheblicher Wartungskopfschmerz, und Code in zwei sehr unterschiedlichen Sprachen zusammenzukleben, lenkt nur ab. Keine Kritik an Boost Python beabsichtigt, es ist so mächtig wie man es sich vorstellen kann und funktioniert die meiste Zeit ziemlich einfach.
In einer idealen Welt mit unbegrenzter Zeit und unbegrenzten Ressourcen wäre keines dieser Probleme eine große Sache. In wissenschaftlichen Projekten, an denen ich gearbeitet habe, habe ich jedoch die folgenden Erfahrungen gemacht.
Unabhängig davon, ob ich Mitarbeiter an dem Projekt habe oder nicht, scheine ich immer den größten Teil des Computing zu erledigen. An insgesamt 5 bedeutenden Projekten war nur eine Person maßgeblich an einem Projekt beteiligt. Diese eine Person hat mehr getan, als an sich zu ziehen. er tat so viel wie ich oder mehr. In allen anderen Fällen, einschließlich Projekten mit mehreren Mitarbeitern, habe ich (praktisch) die gesamte Rechenarbeit erledigt. Obwohl ich sagen kann, dass ich nicht mit den besten Mitarbeitern gesegnet bin (es scheint eine Mischung aus Faulheit und Inkompetenz zu sein), ist mir nicht klar, ob sich diese Situation in Zukunft ändern wird.
Das rechnergestützte wissenschaftliche Arbeiten ist ein enormer Aufwand, und wenn ich das Verhalten meiner Mitarbeiter nicht ändern kann, kann ich meine Arbeitsweise ändern. Die wichtigste Verbesserung wäre, die Dinge schneller zu erledigen. Das bringt mich hier zu der Hauptüberlegung, dass ein Sprachwechsel zu etwas weniger Orthodoxem hilfreich sein kann. Basierend auf früheren Untersuchungen sind Common Lisp und Ocaml die wahrscheinlichsten Kandidaten in der Reihenfolge ihrer Wahrscheinlichkeit. Ich habe jahrelang darüber nachgedacht, aber in letzter Zeit ernsthafter darüber nachgedacht.
Soweit ich weiß, verwenden nur wenige Leute entweder CL oder Ocaml für wissenschaftliche Berechnungen. Bei der Suche auf dieser Website habe ich zwei Verweise auf CL (einer war meiner) und einer auf Ocaml (meiner) gefunden. Ich hatte im Laufe der Jahre ein paar ermutigende Kontakte zu abenteuerlustigen Menschen, die am Rande arbeiten. 2008 stieß ich auf eine Rezension von Peter Seibels "Practical Common Lisp" (das ich besitze) von Tamas K. Papp. Dies erregte meine Aufmerksamkeit, da es für Lisp eine der wenigen Erwähnungen des wissenschaftlichen Rechnens war, die mir im Internet begegnet waren. Ich schrieb an Tamas, der sofort hilfsbereit und ermutigend antwortete. Um ihn zu zitieren
Meine Programmierproduktivität hat sich mit Lisp wahrscheinlich verzehnfacht, aber das hat ungefähr ein Jahr gedauert und ich lerne immer noch (es ging mir aber nach 2 Monaten ganz gut). Wenn Sie also an etwas zeitkritischem arbeiten, verschieben Sie den Wechsel.
Sie sollten überlegen, Leute zu fragen, ich bin nicht der einzige, der über diese Dinge Bescheid weiß, andere machen wissenschaftliches Rechnen mit Lisp.
Er hat auch einen Blog und eine GitHub-Seite .
Eine andere Person, mit der ich kurz korrespondierte (im Dezember 2006), war Ira Kalet , die Common Lisp im Kontext der Radioonkologie verwendet hat.
Vielleicht gibt es andere, die wissenschaftliches Rechnen mit Lisp betreiben, aber ich kenne niemanden.
Das häufigste Problem, das Menschen mit CL anführen, ist das Fehlen von Bibliotheken. Dies ist ein schwerwiegendes Problem beim Allzweck-Computing, aber möglicherweise nicht so sehr beim wissenschaftlichen Computing, insbesondere von Grund auf, wenn Algorithmen implementiert werden. Insbesondere kann ich die meiste Zeit mit einer grundlegenden Mathematikbibliothek auskommen, einschließlich Wahrscheinlichkeitsverteilungsfunktionen, einer mehrdimensionalen Arraybibliothek und einem grundlegenden Satz von Containern, z. B. Map, Set, List usw., wie sie in den C ++ und Python-Standardbibliotheken enthalten sind.
Ich weiß noch weniger über Ocaml als über CL, habe das aber als Alternative reingeworfen. Es ist angeblich sehr schnell, wird von französischen Forschern einmalig kostenlos implementiert und scheint die beste der ML-Sprachfamilie für das wissenschaftliche Rechnen zu sein.
Abschließend frage ich mich, ob andere Erfahrung damit haben und welche Gedanken sie haben, wenn überhaupt.
BEARBEITEN: Ich interessiere mich hauptsächlich für Erfahrungen aus erster Hand im Zusammenhang mit den Themen, die ich oben besprochen habe. Wenn Sie z. B. Python und C ++ (oder R und C ++) verwendet haben und auf eine dunkelere Sprache umgestiegen sind, würde mich Ihre Erfahrung am meisten interessieren.