Die Programmiersprache C++ gehört immer noch zu den wichtigsten Programmiersprachen überhaupt. Gerade im Embedded Bereich vollzieht sich langsam die Abkehr von C zu C++ und ist dort alternativlos. Es hatte jedoch jahrelang den Anschein, als würde diese Sprache seit Jahren nicht weiterentwickelt und von den Features und Ausdrucksmöglichkeiten hinter neueren Sprachen zurückzufallen. In diesem Vortrag zeige ich an Codebeispielen, welche Revolution tatsächlich seit C++11 stattgefunden hat und dass die Sprache keinesfalls mehr mit der zu vergleichen ist, die man vielleicht vor Jahren kennen (und vielleicht hassen) gelernt hat. Die Umgestaltung der Sprache ist dabei keineswegs abgeschlossen sondern zeigt weitere, vielversprechende Konzepte am Horizont.
Die Programmiersprache C++ gehört immer noch zu den wichtigsten Programmiersprachen überhaupt. Gerade im Embedded Bereich vollzieht sich langsam die Abkehr von C zu C++ und ist dort alternativlos. Es hatte jedoch jahrelang den Anschein, als würde diese Sprache seit Jahren nicht weiterentwickelt und von den Features und Ausdrucksmöglichkeiten hinter neueren Sprachen zurückzufallen. In diesem Vortrag zeige ich an Codebeispielen, welche Revolution tatsächlich seit C++11 stattgefunden hat und dass die Sprache keinesfalls mehr mit der zu vergleichen ist, die man vielleicht vor Jahren kennen (und vielleicht hassen) gelernt hat. Die Umgestaltung der Sprache ist dabei keineswegs abgeschlossen sondern zeigt weitere, vielversprechende Konzepte am Horizont.
Este documento resume los elementos clave de un texto narrativo, incluyendo los acontecimientos, personajes, ambiente, tiempo, espacio y estructura de la narración. Explica conceptos como la focalización, tipos de narradores, y clasifica los géneros narrativos por extensión e incluye ejemplos de autores ecuatorianos contemporáneos.
El documento describe una iniciativa llamada "Incubadora de gestores" que permite a inversores individuales gestionar su propia cuenta como si fuera un fondo de cobertura y hacerse visibles a la industria. Carlos Fernández es un trader particular que decide unirse a la incubadora para demostrar sus habilidades. Primero se registra en la red social Unience y se une al grupo Incubadora de gestores. Luego nombra su fondo "Carlos Fund Management" y proporciona detalles sobre su estrategia y rendimientos pasados. Ahora podrá operar
Los vasos sanguíneos se clasifican en tres grupos: arterias, venas y capilares. Las arterias transportan sangre oxigenada desde el corazón, las venas transportan sangre desde los capilares de regreso al corazón, y los capilares conectan las arteriolas con las vénulas para intercambiar oxígeno y nutrientes con los tejidos.
Este documento describe cómo las nuevas tecnologías de la información y la comunicación (TIC) están transformando la educación, pasando de un aprendizaje basado en la transmisión a uno más interactivo e inmersivo. Señala que la generación nacida entre 1999 y antes utiliza internet de forma natural en su aprendizaje y que las TIC ofrecen nuevos espacios educativos como la educación a distancia y las redes sociales. Finalmente, pregunta sobre los cambios educativos y movimientos sociales que han surgido con las TIC.
El documento describe un proyecto del gobierno venezolano para interconectar las escuelas públicas a través de la instalación de equipos de computación e internet. El proyecto busca mejorar la gestión administrativa de las escuelas y apoyar procesos educativos mediante el acceso a recursos digitales. Se espera que la iniciativa promueva una educación más inclusiva y alinee el sistema educativo con las necesidades de la sociedad moderna.
Este documento presenta los principios básicos de las bases de datos relacionales. Explica conceptos como tablas, dominios, claves, nulos y restricciones. También cubre la transformación de esquemas entidad-relación a modelos relacionales, así como la normalización de esquemas para evitar problemas como la duplicación de datos. El documento está licenciado bajo Creative Commons para su uso no comercial compartiendo bajo la misma licencia.
Este documento resume los conceptos clave de sistemas normativos, tipos de normas, moral, ética y derecho. Explora las teorías sobre lo que es bueno y por qué debemos hacer el bien, así como los diferentes tipos de deberes. También discute la ética pública versus la moral privada, la Declaración Universal de los Derechos Humanos y el problema del multiculturalismo.
La crisis financiera mundial comenzó en 2008 y afectó a Fannie Mae y Freddie Mac, las cuales sufrieron grandes pérdidas debido al aumento de la morosidad en préstamos hipotecarios en EE.UU. El gobierno de EE.UU. rescató a estas empresas debido a su papel central en el mercado de vivienda estadounidense y para evitar un colapso del sistema financiero. La crisis se debió a bajas tasas de interés, préstamos de alto riesgo, falta de regulación y la titulización de pré
El documento describe la experiencia de una compañía en trabajos con financiamiento multilateral en países como Haití, Colombia y Uruguay. Actualmente tienen su sede en Haití, donde han abierto puertas a otros proyectos financiados por agencias multilaterales y bilaterales. La compañía ofrece consultoría a otras empresas para identificar oportunidades en proyectos con este tipo de financiamiento. Algunos objetivos son consolidarse como proveedor de organismos internacionales y hacer seguimiento de proyectos financiados para anticipar oportunidades.
Oracle es una base de datos relacional que almacena los datos en tablas relacionadas entre sí. Los datos se almacenan físicamente en archivos y de forma lógica mediante espacios de tablas, lo que permite almacenar diferentes tipos de datos de forma separada. Oracle también proporciona herramientas para administrar, analizar y optimizar los datos y modelos de datos almacenados.
Asistentes virtuales y chatbots.
Factory: Desarrollo de software a medida.
Play: Videojuegos y realidad virtual.
D3: Diseño, desarrollo y data.
X: Experiencia de usuario y diseño.
Anthropic: Inteligencia artificial y machine learning.
Modular: Soluciones digitales modulares.
El documento describe las líneas de trabajo y objetivos de una Unidad de Trabajo Social (UTS) desde una perspectiva comunitaria. La UTS utiliza visitas domiciliarias, atención grupal y trabajo comunitario para apoyar a la población general y a colectivos específicos como personas mayores y perceptores de renta mínima de inserción. El enfoque comunitario permite optimizar recursos y ofrecer una intervención más beneficiosa para la ciudadanía.
Este documento describe la historia y evolución de la universidad en el Perú. Comenzó con la creación de la Universidad Nacional Mayor de San Marcos en 1551 por los españoles para formar sacerdotes y abogados. Otras universidades como San Cristóbal de Huamanga y San Antonio Abad siguieron. La universidad colonial era elitista y se centraba en la filosofía, teología y derecho canónico. En el siglo XVIII, las ideas de la Ilustración llevaron a algunas reformas, pero la universidad permaneció anquilos
Flickr es una herramienta en línea gratuita que permite subir, compartir y almacenar fotos. Ofrece una versión gratis con límite de 100 MB de carga mensual y 200 imágenes visibles, y una versión de pago Pro sin límites de almacenamiento, ancho de banda o videos. Los usuarios pueden comentar, organizar y editar fotos compartidas. Para acceder a Flickr, los usuarios deben registrarse con correo electrónico y contraseña y luego pueden personalizar su perfil y galería.
Code Days 2019, München: Vortrag von Johannes Weigend (@JohannesWeigend, Technischer Geschäftsführer bei QAware)
=== Dokument bitte herunterladen, falls unscharf! Please download slides if blurred! ===
Abstract:
Programmiersprachen für die Cloud - Java und Go im Vergleich
Java ist nach dem Tiobe Index 2018 unangefochten Platz 1 bei den weltweit eingesetzten Programmiersprachen. Java ist ausgereift, stabil und verfügt über ein immenses Open Source Ökosystem. Was will man mehr? Obwohl Java gerade für die Backend Entwicklung attraktiv ist, hat Google 2008 eine eigene Programmiersprache Open Source gestellt: Golang oder kurz Go. Der Vortrag beleuchtet die Stärken und Schwächen von Go gegenüber Java, gibt Hinweise für welche Projekte Go eine gute Alternative ist, und wie ein Best of Breed Ansatz aussehen kann. Interessant an Go ist, dass die Grundbausteine von Cloud Plattformen wie OpenShift oder die Google Container Plattform mit Go erstellt wurden. Docker, Kubernetes, Helm, Grafana oder Prometheus ‒ alles ist mit Go programmiert. Die Fragen aus der Sicht von Java-Experten sind: Was macht Go für die Cloud so interessant? Gibt es Funktionen, die Java Programmierer kennen sollten, und wenn ja, welche?
Am 27. April 2011 referiert Informatik-Student Marcus Riemer zu seiner Evaluierung der C++-Algorithmenbibliothek LEDA. Der Vortrag startet um 17 Uhr in Hörsaal 5.
Die Algorithmenbibliothek LEDA (Library of Efficient Data types and Algorithms) entstand am Max-Planck-Institut für Informatik in Saarbrücken unter der Leitung von Prof. Kurt Mehlhorn. Sie wird seit Jahren kommerziell vertrieben. Der Referent studiert an der FH Wedel Informatik und hat mehrjährige C++-Erfahrung. Er führte eine ausführliche Evaluierung durch und vergleicht die Ergebnisse mit der C++-Standardbibliothek und der Open-Source-Bibliothek Boost.
Este documento resume los elementos clave de un texto narrativo, incluyendo los acontecimientos, personajes, ambiente, tiempo, espacio y estructura de la narración. Explica conceptos como la focalización, tipos de narradores, y clasifica los géneros narrativos por extensión e incluye ejemplos de autores ecuatorianos contemporáneos.
El documento describe una iniciativa llamada "Incubadora de gestores" que permite a inversores individuales gestionar su propia cuenta como si fuera un fondo de cobertura y hacerse visibles a la industria. Carlos Fernández es un trader particular que decide unirse a la incubadora para demostrar sus habilidades. Primero se registra en la red social Unience y se une al grupo Incubadora de gestores. Luego nombra su fondo "Carlos Fund Management" y proporciona detalles sobre su estrategia y rendimientos pasados. Ahora podrá operar
Los vasos sanguíneos se clasifican en tres grupos: arterias, venas y capilares. Las arterias transportan sangre oxigenada desde el corazón, las venas transportan sangre desde los capilares de regreso al corazón, y los capilares conectan las arteriolas con las vénulas para intercambiar oxígeno y nutrientes con los tejidos.
Este documento describe cómo las nuevas tecnologías de la información y la comunicación (TIC) están transformando la educación, pasando de un aprendizaje basado en la transmisión a uno más interactivo e inmersivo. Señala que la generación nacida entre 1999 y antes utiliza internet de forma natural en su aprendizaje y que las TIC ofrecen nuevos espacios educativos como la educación a distancia y las redes sociales. Finalmente, pregunta sobre los cambios educativos y movimientos sociales que han surgido con las TIC.
El documento describe un proyecto del gobierno venezolano para interconectar las escuelas públicas a través de la instalación de equipos de computación e internet. El proyecto busca mejorar la gestión administrativa de las escuelas y apoyar procesos educativos mediante el acceso a recursos digitales. Se espera que la iniciativa promueva una educación más inclusiva y alinee el sistema educativo con las necesidades de la sociedad moderna.
Este documento presenta los principios básicos de las bases de datos relacionales. Explica conceptos como tablas, dominios, claves, nulos y restricciones. También cubre la transformación de esquemas entidad-relación a modelos relacionales, así como la normalización de esquemas para evitar problemas como la duplicación de datos. El documento está licenciado bajo Creative Commons para su uso no comercial compartiendo bajo la misma licencia.
Este documento resume los conceptos clave de sistemas normativos, tipos de normas, moral, ética y derecho. Explora las teorías sobre lo que es bueno y por qué debemos hacer el bien, así como los diferentes tipos de deberes. También discute la ética pública versus la moral privada, la Declaración Universal de los Derechos Humanos y el problema del multiculturalismo.
La crisis financiera mundial comenzó en 2008 y afectó a Fannie Mae y Freddie Mac, las cuales sufrieron grandes pérdidas debido al aumento de la morosidad en préstamos hipotecarios en EE.UU. El gobierno de EE.UU. rescató a estas empresas debido a su papel central en el mercado de vivienda estadounidense y para evitar un colapso del sistema financiero. La crisis se debió a bajas tasas de interés, préstamos de alto riesgo, falta de regulación y la titulización de pré
El documento describe la experiencia de una compañía en trabajos con financiamiento multilateral en países como Haití, Colombia y Uruguay. Actualmente tienen su sede en Haití, donde han abierto puertas a otros proyectos financiados por agencias multilaterales y bilaterales. La compañía ofrece consultoría a otras empresas para identificar oportunidades en proyectos con este tipo de financiamiento. Algunos objetivos son consolidarse como proveedor de organismos internacionales y hacer seguimiento de proyectos financiados para anticipar oportunidades.
Oracle es una base de datos relacional que almacena los datos en tablas relacionadas entre sí. Los datos se almacenan físicamente en archivos y de forma lógica mediante espacios de tablas, lo que permite almacenar diferentes tipos de datos de forma separada. Oracle también proporciona herramientas para administrar, analizar y optimizar los datos y modelos de datos almacenados.
Asistentes virtuales y chatbots.
Factory: Desarrollo de software a medida.
Play: Videojuegos y realidad virtual.
D3: Diseño, desarrollo y data.
X: Experiencia de usuario y diseño.
Anthropic: Inteligencia artificial y machine learning.
Modular: Soluciones digitales modulares.
El documento describe las líneas de trabajo y objetivos de una Unidad de Trabajo Social (UTS) desde una perspectiva comunitaria. La UTS utiliza visitas domiciliarias, atención grupal y trabajo comunitario para apoyar a la población general y a colectivos específicos como personas mayores y perceptores de renta mínima de inserción. El enfoque comunitario permite optimizar recursos y ofrecer una intervención más beneficiosa para la ciudadanía.
Este documento describe la historia y evolución de la universidad en el Perú. Comenzó con la creación de la Universidad Nacional Mayor de San Marcos en 1551 por los españoles para formar sacerdotes y abogados. Otras universidades como San Cristóbal de Huamanga y San Antonio Abad siguieron. La universidad colonial era elitista y se centraba en la filosofía, teología y derecho canónico. En el siglo XVIII, las ideas de la Ilustración llevaron a algunas reformas, pero la universidad permaneció anquilos
Flickr es una herramienta en línea gratuita que permite subir, compartir y almacenar fotos. Ofrece una versión gratis con límite de 100 MB de carga mensual y 200 imágenes visibles, y una versión de pago Pro sin límites de almacenamiento, ancho de banda o videos. Los usuarios pueden comentar, organizar y editar fotos compartidas. Para acceder a Flickr, los usuarios deben registrarse con correo electrónico y contraseña y luego pueden personalizar su perfil y galería.
Code Days 2019, München: Vortrag von Johannes Weigend (@JohannesWeigend, Technischer Geschäftsführer bei QAware)
=== Dokument bitte herunterladen, falls unscharf! Please download slides if blurred! ===
Abstract:
Programmiersprachen für die Cloud - Java und Go im Vergleich
Java ist nach dem Tiobe Index 2018 unangefochten Platz 1 bei den weltweit eingesetzten Programmiersprachen. Java ist ausgereift, stabil und verfügt über ein immenses Open Source Ökosystem. Was will man mehr? Obwohl Java gerade für die Backend Entwicklung attraktiv ist, hat Google 2008 eine eigene Programmiersprache Open Source gestellt: Golang oder kurz Go. Der Vortrag beleuchtet die Stärken und Schwächen von Go gegenüber Java, gibt Hinweise für welche Projekte Go eine gute Alternative ist, und wie ein Best of Breed Ansatz aussehen kann. Interessant an Go ist, dass die Grundbausteine von Cloud Plattformen wie OpenShift oder die Google Container Plattform mit Go erstellt wurden. Docker, Kubernetes, Helm, Grafana oder Prometheus ‒ alles ist mit Go programmiert. Die Fragen aus der Sicht von Java-Experten sind: Was macht Go für die Cloud so interessant? Gibt es Funktionen, die Java Programmierer kennen sollten, und wenn ja, welche?
Am 27. April 2011 referiert Informatik-Student Marcus Riemer zu seiner Evaluierung der C++-Algorithmenbibliothek LEDA. Der Vortrag startet um 17 Uhr in Hörsaal 5.
Die Algorithmenbibliothek LEDA (Library of Efficient Data types and Algorithms) entstand am Max-Planck-Institut für Informatik in Saarbrücken unter der Leitung von Prof. Kurt Mehlhorn. Sie wird seit Jahren kommerziell vertrieben. Der Referent studiert an der FH Wedel Informatik und hat mehrjährige C++-Erfahrung. Er führte eine ausführliche Evaluierung durch und vergleicht die Ergebnisse mit der C++-Standardbibliothek und der Open-Source-Bibliothek Boost.
LINQ - Einheitlicher Datenzugriff in .NETGFU Cyrus AG
Auch mit Objektorientierung gibt es immer noch eine große Kluft zwischen Programmen, die in einer Hochsprache geschrieben wurden und den Daten, die diese Programme bearbeiten.
In Hochsprachen wie C# oder VB verwenden Entwickler spezialisierte Datentypen, Objekte, Methodenaufrufe und hochgradig optimierte Compiler, während beim Datenzugriff alles auf ein paar Strings reduziert wird, die SQL-Abfragen beinhalten.
Entwickler arbeiten hierbei mit zwei total unterschiedlichen Paradigmen (Syntax von SQL und der bevorzugten Programmiersprache) sowie Typsystemen und konvertieren also ständig Daten zwischen zwei verschiedenen Domänen. Diese Unstimmigkeit ist Ursache für menschliche Fehler und verschwendet Zeit.
LINQ ist Microsoft Antwort auf dieses Dilemma. Die Veranstaltung zeigt die Konzepte und Möglichkeiten der neuen .NET-Schnittstelle.
Die Idee hinter LINQ
Die verschiedenen Varianten
- LINQ to Objects
- LINQ to SQL
- LINQ to DataSet
- LINQ to XML
- LINQ to Entity
- LINQ to .....
Kurze Syntax-Übersicht
Praktische Beispiele LINQ To Objects
Kurz-Video LINQ to SQL
Fazit und Ausblick
LAIK: A Library for Fault Tolerant Distribution of Global DataDai Yang
LAIK is an ongoing library for proactive and reactive fault tolerance in HPC applications. It provides index space management and load balancing for existing and new HPC applications.
Slides für meinen Workshop bei der BASTA Spring 2014 in Darmstadt. Hier eine Beschreibung des Workshopinhalts: Es ist schwierig genug, die Anforderungen der Kunden und Kollegen im Alltag zu erfüllen. Da bleibt nicht immer genug Zeit, um auch noch up to date zu bleiben was Neuerungen in C# betrifft. Wenn Ihnen dieses Problem bekannt vorkommt, kann dieser Workshop helfen. Wir widmen einen ganzen Tag besserem C#. Rainer Stropek, bekannter BASTA!-Speaker und Microsoft MVP, zeigt Ihnen, was C# mittlerweile leisten kann. Der Schwerpunkt im Workshop liegt diesmal auf folgenden Themen:
Coding und Design Guidelines – Best und Worst Practices, um besseren C#-Code zu schreiben.
Deep Dive in Lambdas und Linq – was hinter den Kulissen geschieht, wo sie helfen und wo sie mehr schaden als zu nützen.
Parallele und asynchrone Programmierung mit Task Parallel Library (TPL) und async/await – praktische Anwendung am Server und im Full-Client
Modularisierung von .NET-Anwendungen mit NuGet, MEF und Portable Class Libraries (PCL)
Neuerungen in Visual Studio 2013 für C#-Entwickler – alle Beispiele werden mit Visual Studio 2013 gezeigt. Sie erfahren dabei, was VS2013 an Verbesserungen für C#-Entwickler bringt.
Rainer Stropek setzt bei den Teilnehmern C#-Wissen zumindest auf dem Level von Version 2, idealerweise auch ein wenig Version 3, voraus. Ein eigener Laptop ist nicht Voraussetzung. Alle Konzepte werden anhand vieler Live-Coding-Beispiele erklärt. Zusätzlich erhalten alle Teilnehmer eine umfangreiche Präsentation als Zusammenfassung der gezeigten Themen.
Mathematikunterricht in 1zu1 Ausstattungen.pptxFlippedMathe
Wie geht guter Mathematikunterricht? Und jetzt auch noch mit Tablet/Laptop? In dieser Fortbildung soll es genau darum gehen.
Sebastian Schmidt kennt vielleicht nicht Ihre persönliche Antwort auf guten (digitalen) Mathematikunterricht, aber er hat seit 2013 versucht, mit digitalen Hilfsmitteln seinen Unterricht kompetenzorientierter zu gestalten. Die Digitalisierung von Unterricht hat immer die Problematik, das Lernen der Schülerinnen und Schülern aus dem Fokus zu verlieren. Diese sollen digital mündig werden und gleichzeitig Mathematik besser verstehen.
In dieser eSession werden zahlreiche Methoden, Konzepte und auch Tools vorgestellt, die im Mathematikunterricht des Referenten erfolgreich eingesetzt werden konnten. Nicht alles kann am nächsten Tag im Unterricht eingesetzt werden, aber man erhält einen Überblick, was möglich ist. Sie entscheiden dann selbst, worauf Sie Ihren Fokus legen und wie Sie selbst in die 1:1-Ausstattung starten.
Lassen Sie sich überraschen und nehmen Sie mit, was für Sie sinnvoll erscheint. Auf der Homepage von Sebastian Schmidt gibt es neben Links und Materialien zur Fortbildungen auch Workshops fürs eigene Ausprobieren. https://www.flippedmathe.de/fortbildung/mathe-ws/
Teaching and Learning Experience Design – der Ruf nach besserer Lehre: aber wie?Isa Jahnke
Der Ruf danach, dass es bessere Lehre geben muss oder das Lehre verbessert werden sollte, ist nicht neu. Es gibt auch schon seit längerer Zeit Rufe danach, dass Lehre der Forschung in Universitäten gleichgestellt werden soll. (Und in den letzten Jahren ist in Deutschland auch einiges an positiven Entwicklungen geschehen, z.B. durch die Aktivitäten des Stifterverbands). Wie kann die Verbesserung der Lehre weitergehen? Fehlt etwas in dieser Entwicklung? Ja, sagt dieser Beitrag, der zum Nachdenken und Diskutieren anregen soll. In diesem Beitrag wird ein forschungsbasierter Ansatz zur Diskussion gestellt. Es wird argumentiert, dass Lehre nur dann besser wird, wenn es mit den Prinzipen der Wissenschaft und Forschung angegangen wird (d.h. gestalten, Daten erheben, auswerten, verbessern). Es benötigt neue Verhaltensregeln oder -prinzipien bei der Gestaltung von Lehrveranstaltungen. Das bedeutet zum Beispiel das Prinzipien der Evidenzbasierung und wissenschaftliche Herangehensweisen im Lehr-Lerndesign als zentrales Fundament etabliert werden sollte. Evidenzbasierung hier meint, folgt man der Logik der Forschung, dass Lehrveranstaltungen als Intervention verstanden werden. Mit dieser Intervention werden Studierende befähigt, bestimmte vorab festgelegte Kompetenzen zu entwickeln. Und die Frage, die sich bei jeder Lehr-Lernveranstaltung dann stellt, ist, ob diese Objectives bzw. Learning Outcomes auch erreicht wurden. Klar ist, dass die subjektive Lehrevaluation der Studierenden oder auch die Notengebnung nicht ausreichen, um diese Frage zu beantworten. Hierfür gibt es eine Reihe von Methoden, die genutzt werden können, z.B. aus dem Bereich des User- / Learning Experience Design. Diese Methoden umfassen unter anderem Usability-Tests, Learner Experience Studies, Pre-/Post-Tests, und Follow-up Interviews. Diese können zur Gestaltung und Erfassung von effektiven, effizienten und ansprechenden digitalen Lerndesigns verwendet (Reigeluth 1983, Honebein & Reigeluth, 2022).
Der Beitrag will die Entwicklung zur Verbesserung von Lehre weiter pushen. Neue Ideen in die Bewegung bringen. Als Gründungsvizepräsidentin der UTN hab ich die Chance, hier ein neues Fundament für eine gesamte Uni zu legen. Wird das Gelingen? Ist dieser Ansatz, den ich hier vorstelle, eine erfolgsversprechende Option dafür? Hier können sich die TeilnehmerInnen an dieser Entwicklung beteiligen.
7. Vorlesung Compilerbau,Wintersemester 2008/09
Definition„Zeigeranalyse“
Einfach? Man schaue sich die letzte Zuweisung an …
7
➀ Zeigeranalyse: Nutzen, Einsatzgebiete, Beispiele
❛❛Worauf zeigt ein Zeiger/Objektvariable?
p = q;
r = p.val;
p = q;
r = p.f();
... f(){return this.val}
p = q;
r = p.f(p);
... f(){if p.equals(“Caesar”)
return p
else
return this.val}
Alias Inter-Prozedural Kontext-sensitiv
Unentscheidbar (im allgemeinen)
nicht approximierbar mit beschränktem Qualitätsverlust
lange keine skalierbaren Algorithmen für (kontext-sensitive) Zeigeranalyse
8. Vorlesung Compilerbau,Wintersemester 2008/09
Definition„Zeigeranalyse“
Zeigeranalyse: worauf zeigen die Zeiger eines Programs
kontext-sensitiv – berücksichtigt unterschiedliche Aufrufkontexte
Unifikations-basiert vs. Inklusions-basiert
8
➀ Zeigeranalyse: Nutzen, Einsatzgebiete, Beispiele
n = f(o);
m = f(p);
... f(i){return i};
!" #"
$" %"
!" #"
$" %"
kontext-insensitiv kontext-sensitiv
n = o;
m = p;
m = q;
n = m;
!" #"
$" %"
%"
!" #"
$" %"
%"
Unifikations-basiert Inklusions-basiert
9. Vorlesung Compilerbau,Wintersemester 2008/09
Einsatz: Methodenaufruf
Methodenaufruf in OO-Programmen: Java, C++ (nur virtual)
Zeigeranalyse: liefert präzisen Typ des Objekts
hier: o Typ T, sein präziser Typ ist T2
falls Typ eindeutig: unbedingter Sprung zur Methode
hier: Sprung zum Code von m in T2
Ersparnis: Analyse des Typs von o zur Laufzeit & Verwendung der Methodentabelle
wichtiger Bestandteil in Compilern für C++, Java (insbes. auch JIT)
9
➀ Zeigeranalyse: Nutzen, Einsatzgebiete, Beispiele
T o = new T1();
o = l.transform(o);
o.m();
T l(T o){return new T2()}
10. Vorlesung Compilerbau,Wintersemester 2008/09
Einsatz: Alias-Analyse
Zeigeralias verbreitet in C, C++, Java
Zeiger verweisen auf das gleiche (Heap-) Objekt
Änderungen an dem Objekt betreffen Wert alle beteiligten Zeiger
Erkennung von Zeigeralias nötig, z.B., für
Propagation von Konstantenwerten (u.U. sogar Einsparen von Variablen) über Zeiger
statische Berechnung von Sprungadressen (bei Verwendung von Funktionszeigern)
10
➀ Zeigeranalyse: Nutzen, Einsatzgebiete, Beispiele
p.val = 1;
q.val = 2;
x = p.val;
q = new Value();
p = q;
q = new Value();
p = new Value();
x = 2
x = 1
p Alias von q
11. Vorlesung Compilerbau,Wintersemester 2008/09
Einsatz: Fehlererkennung
Ziel: Auffinden von„verdächtigen“ Codefragmenten
Zugriff auf bereits freigegebenen Speicher → Aliasanalyse
„schmutzige“ Verwendung von Eingaben → z.B. SQL Injection
Pufferüberlauf beim Zugriff auf Arrays → dynamische Bereichstests
aber: verhältnismäßig teuer → statische Analyse zur Minimierung der Bereichstests
11
➀ Zeigeranalyse: Nutzen, Einsatzgebiete, Beispiele
q = new Value();
p = q;
delete p;
delete q;
12. Vorlesung Compilerbau,Wintersemester 2008/09
Einsatz: SQL Injection
„Schmutzige“ (tainted) Verwendung von Eingaben in SQL Anfragen
Benutzereingabe (z.B. aus Webformular) wird direkt verwendet zur
Konstruktion von eingebetteten Datenbankanfragen (z.B. über JDBC)
z.B. Variablen $n und $p für Benutzername und Passwort
12
➀ Zeigeranalyse: Nutzen, Einsatzgebiete, Beispiele
SELECT balance FROM Account
WHERE name = ‘$n’ and password = ‘$p’
SELECT balance FROM Account
WHERE name = ‘Julius Caesar’ ‐‐’ and password = ‘...’
Angreifer: als Benutzername einen Ausdruck
mit Symbolen oder Wörtern, die in SQL spezielle Bedeutung haben
z.B. Kommentarzeichen‘‐‐’
13. Vorlesung Compilerbau,Wintersemester 2008/09
Einsatz: Pufferüberlauf
Problem: Eingaben (oder Ergebnisse), die Pufferplatz überschreiten
typisch: String als Zeichen-Array mit fixer Größe k, Eingabe > k
Lösung: dynamische Überprüfung der Puffer/Array Grenzen
in Java automatisch durch Compiler garantiert
Problem: naives Einfügen bei allen Arrayzugriffen sehr teuer
Lösung: Zeigeranalyse, um festzustellen, wo Überlauf möglich
z.B. bei Benutzereingaben, nicht begrenzten Schleifen, etc.
13
➀ Zeigeranalyse: Nutzen, Einsatzgebiete, Beispiele
16. Vorlesung Compilerbau,Wintersemester 2008/09
Intra-Prozedurale Analyse
Intra-Prozedural: innerhalb einer Prozedur
keine Aufrufe anderer Prozeduren / Methoden / etc.
Pointer- bzw. Objektvariablen zeigen auf Heap-Objekte; liegen auf Stack
Heap-Zeiger zeigen auf andere Heap-Objekte
16
o1: p = new A();
o2: q = new A();
p.f = q;
r = p.f;
s = r;
!" #$"
%" #&"
'"
("
)"
➁ Interprozedurale, kontext-sensitive Zeigeranalyse
Heap-Objekt
Objektvariable
17. Vorlesung Compilerbau,Wintersemester 2008/09
Aufrufgraphen
Inter-Prozedural: auch Datenfluß zwischen mehreren Prozeduren
Technik: Aufrufgraph aufstellen
Aufrufgraph := Graph (N, E) für ein Programm P, so dass
es für jede Prozedur p in P einen Knoten np ∈ N gibt
es für jeden Aufrufpunkt c in P einen Knoten nc ∈ N gibt
falls ein Aufrufpunkt c eine Prozedur p aufrufen kann
gibt es eine Kante von nc nach np
17
➁ Interprozedurale, kontext-sensitive Zeigeranalyse
18. Vorlesung Compilerbau,Wintersemester 2008/09
Beispiel Aufrufgraph
18
Name + Signatur class A {
A val;
int f(A a){return 1}
A f(A a) {
c1: return a.f(val);
}
static void main() {
val = new B();
val.val = this;
c2: val.f(new A());
}
}
class B extends A {
A f(A a){
c3: return val.f(a);
}
}
➁ Interprozedurale, kontext-sensitive Zeigeranalyse
!"#$%
!"#$
!"#$
%"#$
&'$
&($
&)$
!
*+,
+ Intra + Inter
19. Vorlesung Compilerbau,Wintersemester 2008/09
Kontext-Sensitive Analyse
mehrere Aufrufe der gleichen Funktion
unterschiedliche Parameter (u.a. Kontexte)
kontext-insensitive Analyse
kann Parameter nicht propagieren bei
mehreren Aufrufen der gleichen Funktion
einfach & billig zu realisieren (Aufrufgraph)
kontext-sensitive Analyse
präziser, hier z.B. Eliminierung der Aufrufe
durch Parameterpropag.: X[i] = 16;
bis 2004: kein„präziser“, sklalierbarer Alg.
19
➁ Interprozedurale, kontext-sensitive Zeigeranalyse
for(i=0; i<1012; i++) {
c1: t1 = g(0);
c2: t2 = g(4);
c3: t3 = g(9);
X[i] = t1+t2+t3;
}
int g(int v) {
c4: return f(v);
}
int f(int v) {
return (v + 1);
}
20. Vorlesung Compilerbau,Wintersemester 2008/09
Kontext-Sensitive Analyse
Idee:„Klonen“
20
➁ Interprozedurale, kontext-sensitive Zeigeranalyse
for(i=0; i<1012; i++) {
c1: t1 = g(0);
c2: t2 = g(4);
c3: t3 = g(9);
X[i] = t1+t2+t3;
}
int g(int v) {
c4: return f(v);
}
int f(int v) {
return (v + 1);
}
for(i=0; i<1012; i++) {
c1: t1 = g1(0);
c2: t2 = g2(4);
c3: t3 = g3(9);
X[i] = t1+t2+t3;
}
int g1(int v) {
c4.1: return f1(v); }
int g2(int v) {
c4.2: return f2(v); }
int g3(int v) {
c4.3: return f3(v); }
int f1(int v) {
return (v + 1);}
int f2(int v) {
return (v + 1);}
int f3(int v) {
return (v + 1);}
24. Vorlesung Compilerbau,Wintersemester 2008/09
Kontext-Sensitive Analyse durch Klonen
Hoffnungslos? – typisches Program ~1014 Pfade, nur 1 Byte pro Klon
256 TBi Speicher > 12fache der Größe der“Library of Congress”
so viel Speicher verbraucht so viel Energie wie ~120 Haushalte
Sequentielles Lesen von Festplatte: ~70 Tage
Trotzdem: Es geht mit folgender Beobachtung:
Viele der Pfade sind weitgehend identisch, Kontexte sehr ähnlich
Datenstruktur, die die hoch-redundante Aufrufgraph Relation kompakt
kompakt (“exponentially more succinct”) darstellen kann
Lösung: Binary Decision Diagram (Binäre Entscheidungsdiagramm)
24
➁ Interprozedurale, kontext-sensitive Zeigeranalyse
34. Vorlesung Compilerbau,Wintersemester 2008/09
Geordnete, reduzierte BDDs (ROBDDs)
Binary Decision Diagram (BDD) :=
gerichteter, azyklischer Graph mit Wurzel bestehend aus
einer oder zwei Blättern (keine ausgehenden Kanten), die mit 0 bzw. 1 gelabelt sind;
jeder andere Knoten ist ein Variablenknoten u mit genau 2 ausgehenden
Kanten low(u) und high(u) und einer Variablen var(u) als Label
Geordnetes BDD :=
auf allen Pfaden von der Wurzel kommen Variablen in gleicher Ordnung vor
Reduziertes BDD :=
unique – var(u) = var(v) ∧ low(u) = low(v) ∧ high(u) = high(v) u = v
non-redundant – ∀ u: low(u) ≠ high(u)
34
➂ Skalierung durch Binary Decision Diagrams (BDDs)
35. Vorlesung Compilerbau,Wintersemester 2008/09
Variablenordnung in BDDs
Problem: Größe & Form hängt von Reihenfolge der Variablen ab
35
➂ Skalierung durch Binary Decision Diagrams (BDDs)
!"#
!$#
!%#
&# "#
!'#
!"#
!$#
!%#
&# "#
!'#
!$#
!'#
x1 ∧ x2 ∨ x3 ∧ x4
x1 < x2 < x3 < x4
x1 < x3 < x2 < x4
37. Vorlesung Compilerbau,Wintersemester 2008/09
Variablenordnung in BDDs
Schlimmer:
Bestimmen der optimalen Variablenordnung für eine gegebene boolesche
Funktion ist NP-vollständig
Bestimmen selbst einer um einen konstanten Faktor c > 1 schlechteren
Ordnung ist noch NP-vollständig (also APX-hart)
In der Praxis: Zahlreiche, effiziente Heuristiken
große Zahl von BDD-Libraries → http://en.wikipedia.org/wiki/Binary_decision_diagram
Kanonisches ROBDD zu jeder booleschen Funktion f(x1, …, xn)
gibt es genau ein ROBDD mit Variablenordnung x1 < … < xn
daher: effizienter Equivalenztest
37
➂ Skalierung durch Binary Decision Diagrams (BDDs)
40. Vorlesung Compilerbau,Wintersemester 2008/09
Manuelle Zeigeranalyse mit BDDs
Implementierung komplex, fehleranfällig, schwer zu optimieren
daher: deklarative Spezifikation, automatische Transformation in BDDs
40
➃ Deklarative Spezifikation mit Datalog
>50
Seiten,
SAS 2002 ~ 15 Zeilen, PLDI 2004
41. Vorlesung Compilerbau,Wintersemester 2008/09
Spezifikationssprache: Datalog
Datalog: (rekursive) Logik über Relationen mit endlicher Domain
siehe zweiter Teil der Vorlesung, hier nur intuitive Behandlung
Semantik: wenn Konjunktion der Atome im Rumpf war ist, dann auch Kopf
Variablen entsprechend instantiiert, jede Var. im Kopf auch im Rumpf
41
➃ Deklarative Spezifikation mit Datalog
vPointsTo(q, o).
Assignment(p, q).
vPointsTo(V1, O) :‐ Assignment(V1, V2),
vPointsTo(V2, O).
Prädikat- (Relations-) Symbol
Fact
Regel (Kopf :- Rumpf)
keine Funktionssymbole;
nur stratifizierte Negation
42. Vorlesung Compilerbau,Wintersemester 2008/09
Extraktion von Fakten
Zurück zum Beispielprogram (intra-prozedural):
42
o1: p = new A();
o2: q = new A();
p.f = q;
r = p.f;
s = r;
!" #$"
%" #&"
'"
("
)"
vPointsTo(p, o1).
vPointsTo(q, o2).
Store(p, f, q).
Load(p, f, r).
Assign(s, r).
➃ Deklarative Spezifikation mit Datalog
Ziel:
44. Vorlesung Compilerbau,Wintersemester 2008/09
Zugriff auf Heapzeiger
Ableitbar aus Belegung von Objektvariablen (vPointsTo) &
Heapzeigern (hPointsTo) sowie Heapzugriffen (Load)
44
➃ Deklarative Spezifikation mit Datalog
vPointsTo(Var2, Obj2) :‐ Load(Var1, Att, Var2),
vPointsTo(Var1, Obj1),
hPointsTo(Obj1, Att, Obj2).
Load(p, f, r).
vPointsTo(p, o1).
hPointsTo(o1, f, o2). ∧
→
vPointsTo(r, o2).!" #$"
#%"
&"
!"
wegen
r = p.f;
45. Vorlesung Compilerbau,Wintersemester 2008/09
Alias-Auflösung
Ableitbar aus Belegung von Objektvariablen (vPointsTo) &
Heapzuweisungen (Store)
45
➃ Deklarative Spezifikation mit Datalog
vPointsTo(Var1, Obj) :‐ Assign(Var1, Var2),
vPointsTo(Var2, Obj).
Assign(s,r).vPointsTo(r, o2).
∧
→
vPointsTo(s, o2).
wegen
s = r;
!" #$"
%" #&"
'"
("
!"
46. Vorlesung Compilerbau,Wintersemester 2008/09
Vollständiger Analysalgorithmus
Das wars … damit haben wir einen Zeigeranalysalgorithmus
der schneller oder gleich-schnell wie manuelle Ansätze ist
46
➃ Deklarative Spezifikation mit Datalog
hPointsTo(Obj1, Att, Obj2) :‐ Store(Var1, Att, Var2),
vPointsTo(Var1, Obj1),
vPointsTo(Var2, Obj2).
vPointsTo(Var2, Obj2) :‐ Load(Var1, Att, Var2),
vPointsTo(Var1, Obj1),
hPointsTo(Obj1, Att, Obj2).
vPointsTo(Var1, Obj) :‐ Assign(Var1, Var2),
vPointsTo(Var2, Obj).
47. Vorlesung Compilerbau,Wintersemester 2008/09
Gleich schnell?
Übersetzung der Datalog Spezifikation in BDDs
Datalog → relationale Algebra → BDDs → Domain-optimierte BDDs
Details siehe:
J. Whaley and M. S. Lam. Cloning-based context-sensitive pointer alias analysis using
binary decision diagrams. In Proc. ACM Conf. on Programming Language Design and
Implementation (PLDI), 2004. ACM.
Implementiert in bddbddb
Datalog Engine basierend auf BDDs
http://bddbddb.sourceforge.net/
47
➃ Deklarative Spezifikation mit Datalog
53. Vorlesung Compilerbau,Wintersemester 2008/09
Literatur zur Interprozeduralen Zeigeranalyse
Basiswissen:
Aho, Lam, Sethi, Ullman: “Compilers”, 2nd Edition, Kapitel 12
M. S. Lam, J. Whaley, V. B. Livshits, M. C. Martin, D. Avots, M. Carbin, and
C. Unkel. Context-sensitive program analysis as database queries. In Proc. ACM
Symp. on Principles of Database Systems (PODS), 2005. ACM.
Weiterführende Literatur:
V. T. Chakaravarthy and S. Horwitz. On the non-approximability of points-to
analysis. Acta Inf., 38(8):587–598, 2002.
J. Whaley and M. S. Lam. Cloning-based context-sensitive pointer alias analysis
using binary decision diagrams. In Proc. ACM Conf. on Programming
Language Design and Implementation (PLDI), 2004. ACM.
53
Fragen