Homepage von Basti1012 = ,Hauptmenü
Hier im Forum bekommt ihr bei euren fragen schnelle hilfe.Hier geht es rund um das Web SeitenProgrammieren.Alles rund ums Javascript,Html,Php,Css und Sql.Auf fast allen Fragen haben wir eine Antwort.
Der Soforthilfe-chat verspricht das ,was sein Name sagt. Hier sind Leute Online die sofort ihre hilfe anbieten.Seht in der OnlineListe nach und wenn einer Online ist werdet ihr auch antwort bekommen. Admine ,Moderatoren und Helfer sind unsere Spezialisten in Sachen Web Programierung


(Foto: ronstik/Shutterstock)

Compiler sind so kompliziert, dass nur die nerdigsten Nerds in der Lage sind, überhaupt irgendwas daran zu verstehen, richtig? Falsch. In diesem Projekt lernt ihr, wie ihr selber einen bauen könnt.

Ein Compiler ? oder Kompilierer ? ist ein Computerprogramm, das Quellcode einer bestimmten Programmiersprache in eine Form übersetzt, die von einem Computer ausgeführt werden kann. So oder so ähnlich lautet die gängige Definition des Wortes. Was das die meisten von euch praktisch angeht? Nichts. Die Mehrheit muss sich in ihrem täglichen Job nicht damit auseinandersetzen, was ein Compiler macht. Aber: Compiler sind überall. Viele der Tools, die ihr jeden Tag verwendet, basieren auf von Compilern entlehnten Konzepten.

Compiler sind gar nicht so kompliziert

Compiler sind kompliziert? Sind sie. Das muss aber nicht unbedingt sein. In dem mit ?The super tiny Compiler? betitelten Projekt findet ihr eine detaillierte Anleitung, wie ihr euren eigenen, klitzekleinen Kompilierer bauen könnt. Mit JavaScript, eine neue Programmiersprache muss also auch keiner von euch lernen. Ganz nebenbei lernt ihr, wie ein Compiler funktioniert und was eigentlich dahintersteckt. Das Ganze ist nämlich ziemlich einfach und gar nicht so kompliziert, wie ihr vielleicht glaubt, ist Jamie Kyle, der Autor des Projekts, überzeugt.

Von Lisp zu C

Der klitzekleine Compiler, den ihr bauen werdet, kompiliert Lisp-ähnliche Funktionsaufrufe zu C-ähnlichen Funktionsaufrufen. Wer weder Lisp noch C beherrscht, muss sich davon aber nicht abschrecken lassen, für euch gibt?s im Projekt ein ? zugegebenermaßen sehr ? kurzes Intro dazu. Lisp und C zu lernen, ist aber auch nicht Sinn und Zweck der Übung. Um dem Tutorial zu folgen, soll es genügen, wenn ihr wisst, wie in beiden Sprachen die Syntax zur Addition und Subtraktion ganzer Zahlen lautet.

3 Schritte: Parsen, Transformieren und Code generieren

Anhand der vorgestellten ? allerdings unvollständigen ? Codebeispiele demonstriert Kyle die Hauptbestandteile moderner Compiler; genau diese Codebits wird euer Compiler nämlich am Ende kompilieren. Am Ende gibt es für die meisten Compiler nämlich drei Stadien: Parsen, Transformation und Code-Generation. Parsen bedeutet einfach, dass der Code zu einer abstrakteren Repräsentation seiner selbst umgewandelt wird. Im zweiten Schritt, den Kyle Transformation nennt, wird diese abstrakte Repräsentation so manipuliert, dass sie eben das macht, was der Compiler will. Im dritten Schritt, der Code-Generation, wird dieser transformierte Code in neuen Code umgewandelt, in diesem Fall zu C-ähnlichem Code. Jetzt wo ihr diese Basics verstanden habt, könnt ihr euren eigenen Compiler bauen ? im Projekt auf GitHub findet ihr alles, was ihr dafür braucht.

Passend dazu: Dieses Repository listet Tutorials für einfach alles



PHP 7 Migration

Nun war es also Zeit, diesen beschaulichen Server auf PHP7 zu heben.

Die Installation

… lief straight forward, wie man es gewohnt ist. Hier läuft ein Apache 2 mit mod_php auf (aktuell) Ubuntu 15.04, also das absolute Standardsetup. Da PHP7 standardmäßig noch nicht in ubuntu enthalten ist, müssen wir vom ppa von ondrej Gebrauch machen, welches sowohl PHP5.6 als auch PHP7 beinhaltet und regelmäßig aktualisiert wird.

apt-get -y purge php5 libapache2-mod-php5 php5 php5-cli php5-common
apt-get --purge autoremove
apt-get update
apt-get install python-software-properties
add-apt-repository ppa:ondrej/php-7.0
sudo apt-get install php7.0 php7.0-dev php7.0-mysql php7.0-gd php7.0-curl php7.0-sqlite php7.0-intl
php -v
service apache2 restart

Läuft, bei mir folgende Ausgabe:

PHP 7.0.1-4+deb.sury.org~vivid+1 (cli) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

Probleme & Fallstricke

Imagemagick

Da es noch kein php7.0-imagemagick gibt, war eine händische Installation nötig:

apt-get install imagemagick
cd /tmp
wget http://pecl.php.net/get/imagick-3.4.0RC2.tgz
tar xvzf imagick-3.4.0RC2.tgz
cd imagick-3.4.0RC2
phpize
./configure
make install
echo extension=imagick.so >> /etc/php/7.0/cli/php.ini
echo extension=imagick.so > /etc/php/7.0/apache2/conf.d/20-imagick.ini
service apache2 restart

mcrypt

Ursprünglich habe ich php7.0-mcrypt mitinstalliert, welches sich dann per Warning geäußert hat, dass es bereits geladen wurde.

Module 'mcrypt' already loaded in Unknown on line 0

Die Migration

WordPress 4.4 verträgt sich gut mit PHP7, zumindest gilt das für den Core. 2 Probleme gab es bei den Plugins:

w3 total cache (aktuell in Version 0.9.4.1) schmeißt einen Haufen Warnings und Fehler, sodass ich es erstmal deaktiviert habe.

Nicht so einfach gestaltete sich das zweite problematische Plugin CodeColorer, welches ich für das Syntax Highlighting verwende. Da es seit über 2 Jahren nicht mehr angepasst wurde, ist eine PHP7 Kompatibilität auch nicht direkt zu erwarten gewesen. Problem: Der /e Modifier in preg_replace ist seit PHP5.5 deprecated.

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in ...

Also frisch ans Werk und alle preg_replace-Vorkommen mit dem /e modifier auf das nun zu verwendende Callback-Format umgestellt:

Alt:

$content = preg_replace('#(\s*)(\[enlighter[^\s\]_]*(?:_[^\s\]]*)?[^\]]*\].*?\[/enlighter\1\])(\s*)#sie', '$this->PerformProtectComment(\'\\2\', $content, \'\\1\', \'\\3\');', $content);

Neu:

$content = preg_replace_callback('#(\s*)(\[enlighter[^\s\]_]*(?:_[^\s\]]*)?[^\]]*\].*?\[/enlighter\1\])(\s*)#si', function($matches)
{
	return $this->PerformProtectComment($matches[2], $content, $matches[1], $matches[3]);
}, $content);	

Relevante Änderungen in PHP7

Ich habe die relevantesten Änderungen in PHP7 in Präsentationsform für meine Lehrveranstaltung „Entwicklung webbasierter Anwendungen“ an der Hochschule Darmstadt zusammengefasst. Die Präsentation darf gerne verwendet werden (auf Anfrage schicke ich auch gerne die ppt).

Für mich sind das:

An weggefallenen oder nun veralteten Dingen ist eigentlich nichts von großer praktischer Relevanz.

Ganz lustig ist der „rant“ über das neue „division by zero“ Verhalten. Seit PHP7 ist das Ergebnis beim Teilen durch 0 „INF“ bzw. „-INF“. Eine Warning gibt es zusätzlich noch, vor PHP7 kam als Ergebnis „false“ heraus. Nach IEEE754 stellt sich die Sache aber nicht ganz so einfach dar. Da es die Warning nach wie vor gibt, sollte auch diese Umstellung keine großen Probleme verursachen.

In closing

Auf Arbeit fahren wir einen Multi PHP-Ansatz, um mehrere PHP Versionen mit Fast CGI parallel laufen zu lassen. Das ist sehr praktisch für eine schrittweise Migration. Symfony ist ja auch schon seit geraumer Zeit voll PHP7-fähig. Allein aus Gründen des gesunkenen Speicherverbrauchs und der besseren Laufzeitperformance ist man ja quasi schon zum Update gezwungen ;-).

Umwetter Warnumgen und Wetter vorschau


 Datenbank unwetter warnunngen aktualiesiert 19Datank unwetter optiion aktualiesiert