LibreOffice sous le capot: évoluer vers 4.3.0


Original: https://people.gnome.org/~michael/

 

Aujourd’hui, nous publions LibreOffice 4.3.0, emballé avec une charge de nouvelles fonctionnalités pour les gens de profiter – vous pouvez lire et profiter de tous les bonnes nouvelles sur l’utilisateur caractéristiques visibles de tant de développeurs robustes, mais il ya bien sûr aussi des contributeurs dont le travail est principalement derrière les scènes dans des endroits qui ne sont pas si facile à voir. Ce sont bien sûr toujours une importance vitale pour le projet. Il peut être difficile à extraire ceux des plus de quatorze mille commits depuis LibreOffice 4.2 a ramifié, alors laissez-moi de développer:
Interface utilisateur Dialog / Mise en page

La migration de l’interface utilisateur Glade disposition des widgets VCL basé approche finalement la dernière ligne droite; plus de deux cents boîtes de dialogue ont été convertis cette version; laissant les dialogues finaux plutôt difficile à trouver – aider apprécié. Un grand merci à Caolan McNamara (Red Hat) – pour son travail incroyable ici, et aussi Szymon Kłos, Michal Siedlaczek, Olivier Hallot (EDX), Andras Timar (Collaborative), Jan Holešovský (Collaborative), Katarina Behrens, Thomas Arnhold, Maxim Monastirsky , Manal Alhassoun, Palenik Mihály, et bien d’autres … Merci aussi à nos traducteurs qui ont contribué à la migration des chaînes.

Graph of progress in UI layout conversion

Si vous souhaitez vous impliquer dans la conduite de ce à 100%, la caisse howto Caolan et son grand blog: 99 pour aller à jour (plus que 65) illustré par ceci:

construire des améliorations

Nous avons amélioré beaucoup ce cycle en termes de constructibilité, et la facilité de compréhension – important pour les nouveaux contributeurs.
Support de Visual Studio

Non seulement Jésus Corrius ne ajouter le support initial pour Visual Studio 2013, mais nous avons eu une victoire importante de Honza Havlíček qui (en s’appuyant sur Bjoern Michaelsen (canonique) de travail KDevelop similaire) a mis en œuvre la construction d’un fichier de projet Visual Studio – en permettant bien meilleure construction / débogage vidéo de soutien ou tout simplement: faire vs2012-ide-intégration.
OpenGL comme une dépendance d’exécution

Dans le passé, lorsque nous avions besoin d’un code OpenGL chemin nous lier une bibliothèque partagée séparée pour OpenGL et charger dynamiquement ce composant – comme pour le diaporama OpenGL. En 4.3 nous avons unifié l’ensemble de notre code OpenGL à utiliser glew et maintenant une API central VCL pour initialiser et reliant en OpenGL, ce qui rend beaucoup plus facile à utiliser à l’avenir. Un autre avantage de l’utilisation glew est la capacité de vérifier certaines extensions au moment de l’exécution dynamique pour mieux s’adapter aux capacités de votre plate-forme plutôt que d’avoir à travailler par rapport à une référence.
Mises à jour pré-compilé-têtes / PCH

Thomas Arhnold découvert que nos fichiers de PCH (utilisés pour accélérer la construction de fenêtres) ont peu-pourri, et a fait un nettoyage balayage fin à travers eux. Que du temps de construction nettement réduit pendant un certain nombre de modules.
Graphique de l’accélération de la compilation de l’amélioration des têtes précompilés

Graph of compile-time speedup from improving pre-compiled headers

Mobile réduction taille de code

Beaucoup de travail a été mis en LibreOffice 4.3 pour nous permettre de réduire le code pour s’adapter à une empreinte portable bien. Merci à Matus Kukan (Collaborative) pour diviser un grand nombre de composants UNO dans les différentes fonctions de l’usine – pour permettre à l’éditeur de déchets recueillent composants utilisés ONU. Matus a également créé un script Python solenv / bin / native-code.py à part la construction de listes de composants à lier statiquement dans diverses combinaisons de fonctionnalités. Tor Lillqvist (Collaborative) a fait des re-travail sur ICU pour emballer les assez grandes tables de données dans un fichier au lieu du code. Vincent Saunders (Collaborative) a travaillé immédiatement pour améliorer dwarfprofile pour identifier les gros morceaux de fichier objet et d’où ils viennent. Beaucoup de code de l’accessibilité Jan Holešovský de couplage, et enlevé beaucoup de variables statiques traînant dans le code non nécessaire. Miklos Vajna tourné forme personnalisée OOXML définitions prédéfinies (oox :: DrawingML :: CustomShapeProperties :: PresetsMap) à partir du code généré pour les données produites: qui a permis l’élimination de 50k lignes de code. Merci à Tsahi Glik / CloudOn pour financer ce travail.
Un travail de qualité de code

Il ya eu beaucoup de travail sur la qualité du code et l’amélioration de la maintenabilité et de la propreté du code. Un autre 75 ou si s’engage à corriger les erreurs de cppcheck sont grâce à Julien Nabet, avec l’énorme chinchard de validations quotidiennes pour construire sans compiler avertissements-Werror-mur-Wextra sur chaque plate-forme avec principalement grâce à Tor Lillqvist (Collaborative), Caolan McNamara (Red Hat), et Thomas Arnhold.
affirmer utilisation

Un autre outil que les développeurs utilisent pour s’assurer qu’ils n’introduisent pas de nouveaux bugs est assertions; historiquement la base de code de OOo a eu installations d’assertion personnalisés qui peuvent facilement être ignorés, et si la plupart des développeurs a fait exactement cela; grâce à Stephan Bergmann (Red Hat), nous avons commencé à utiliser l’assertion standard () des macros dans LibreOffice, qui ont l’avantage important qu’ils avortent en fait le programme: si une assertion échoue, les développeurs voient un accident qui est plutôt difficile d’ignorer que du texte imprimé sur le terminal. Merci à tous ceux qui ont affirmé la vérité.
Graph of number of run-time assertions

rocking Coverity

Nous avons été à mâcher par l’énorme quantité de l’analyse de la numérisation Coverity, bien – en particulier Caolan McNamara (Red Hat) a fait un travail impressionnant ici; son blog sur qui est généralement modeste.

Nous avons maintenant une densité de défauts de 0,08 – ce qui signifie bogues 8x à 100.000 lignes de code trouvé par la vérification statique. Cela se compare plutôt favorablement avec le projet open source moyenne de cette taille qui a 65 par 100 000 lignes. Peut-être la chose la plus utile ici est le rapport de Coverity sur de nouvelles questions – dont beaucoup sont un peu plus grave que les quelques derniers plus bas rapports de l’ONU-triage, prioritaires.

Ceci a été réalisé par 2679 commits, 88% d’entre eux de Caolan, puis Norbert Thiebaud, Miklos Vajna (Collaborative), Noel Grandin, Stephan Bergmann (RedHat), Chris Sherlock, David Tardon (RedHat), Thomas Arnhold, Steve Yin (IBM ), Kohei Yoshida (Collaborative), Jan Holešovský (Collaborative), Eike Rathke (RedHat), Markus Mohrhard (Collaborative) et Julien Nabet
L’importation et l’exportation de tests maintenant

Grand crash test import / export de Markus Mohrhard a été élargi à 55 000 documents + problème / bug, qui couvre désormais l’importateur de PDF, et nos accident et de validation nombre de problèmes continuent de chuter. Markus également réécrit et simplifié le script de test en python pour le rendre plus simple; Mais nous souffrons régulièrement de ce test (en cours d’exécution pendant 5 jours et de consommer une machine costaud) enfermer Linux de plusieurs distributons, les versions du noyau, à la fois sur le matériel virtuel et réel; qui a un impact négatif sur l’utilité.
Re-factorisation de grands objets

Dans certains cas, LibreOffice a des classes qui semblent faire «tout» et comprennent l’évier de la cuisine aussi. Merci à Valentin Kettner, Michael Stahl (RedHat) et Bjoern Michaelsen (canonique) pour aider à re-facteur ceux-ci. Par exemple SwDoc (un document de l’écrivain) hérite maintenant de seulement neuf catégories au lieu de dix-neuf ans, et le fichier d’en-tête diminué de plus de trois cents lignes.
corrections Valgrind

Valgrind a continué à être un merveilleux outil pour trouver et isoler les fuites et un mauvais comportement de différents morceaux de code – même si le code-chemins normaux sont désormais plutôt Valgrind propre. Dave Richards de Largo très gentiment nous a donné un peu de temps de CPU sur sa nouvelle machine à 80x CPU Linux pour graver po Nous avons utilisé que pour exécuter le test import / export de Markus sous valgrind, et trouvé et corrigé un certain nombre de questions. valgrind connecte ici. Nous serions très heureux d’aider les autres avec leurs boîtes dans le besoin de tests de charge.
Adresse / fuite Sanitizer

Il ya quelques grandes nouvelles façons de faire (compilation) Code assainissement, et grâce à Stephan Bergmann (RedHat) nous les utilisons avec enthousiasme-fsanitize est disponible pour Clang et gcc 4.9. Il nous permet de faire vérifier la mémoire (comme valgrind) mais avec une visibilité en pile corruption, et de faire que très nettement plus rapide. Quelques détails sur fsanitize pour libreoffice sont disponibles. Beaucoup de fuites et la méchanceté ont été fixés à l’aide de l’outil, grâce à Markus trop Mohrhard, et Caolan McNamara.
Les tests unitaires

Nous avons également construit et exécuté plus de tests unitaires avec LibreOffice 4.3 pour éviter les régressions que nous changeons le code. Grepper pour CPPUNIT_TEST () et CPPUNIT_ASSERT que la dernière fois nous avons continué la tendance de la croissance ici:

Graph of number of unit tests and assertions
Notre idéal est que tous les bogues qui est fixé obtient un test unitaire pour l’arrêter ne se reproduise. Avec 1100 commits, et plus de quatre-vingts committers aux tests unitaires en 4.3 il est difficile d’énumérer toutes les personnes impliquées ici, excuses pour cela; ce qui suit est une liste triée de celles de plus de 20x commits à AQ / répertoires: Miklos Vajna (Collaborative), Kohei Yoshida (Collaborative), Caolan McNamara (RedHat), Stephan Bergmann (RedHat), Jacobo Aragunde Pérez (Igalia), Tomaz Vajngerl (Collaborative), Markus Mohrhard (Collaborative), Zolnai Tamás (Collaborative), Tor Lillqvist (Collaborative), Michael Stahl (RedHat), Alexander Wilms

SAL_OVERRIDE et plus

Traditionnellement C + + a permis ambiguïté significative des méthodes dérogatoires, permettant le mot-clé «virtuel» pour être ignoré dans les remplacements, et en permettant des remplacements accidentellement polymorphes. Pour se préparer à la nouvelle norme C + + ici, nous avons annoté toutes nos méthodes virtuelles qui sont ignorées dans les sous-classes avec la macro SAL_OVERRIDE, de veiller à ce que nous construisons nos vtables correctement. Un grand merci à Noel Grandin, et Stephan Bergmann (RedHat) pour la construction d’un plugin clang pour aider à construire annotation ici avec un autre pour vérifier que le résultat reste constante. C’est Correction de plusieurs bugs de longue date. Comme un bonus lorsque vous lisez le code, il est beaucoup plus facile de trouver la base virtuelle déclaration de méthode: c’est celui qui n’est pas marqué avec SAL_OVERRIDE.
AQ / bugzilla

Ce communiqué de presse de l’équipe d’assurance qualité a augmenté et fait un travail incroyable deux bogues le triage, et aussi de les fermer, nous ramenant ainsi sous le totémique mille bug barrière de non-triage. Actuellement ~ 750 non confirmé qui est le plus bas en plus de deux ans. Merci à tous pour leur excellent travail là, malheureusement, il est plutôt difficile d’extraire des crédits pour confirmer bugs, mais la liste des héros respectif chevauchements avec les non-développeurs / top ferme énumérés ci-dessous.

Nous avions aussi un de nos meilleurs week-ends de chasse bug jamais environ 4,3 voir écriture-up de Joel Madero. L’équipe d’assurance qualité sont également fait un excellent travail avec nos dépôts git bibisect d’isoler les régressions de petits blocs de commits – ce qui rend la vie beaucoup plus facile pour les développeurs.

Une mesure que nous regardons dans l’appel ESC est qui est dans le top dix dans le freedesktop résumé de bug hebdomadaire. Voici une liste des vingt premiers témoins qui ont comparu le plus souvent dans la liste hebdomadaire des meilleurs ferme dix de bogues par ordre de fréquence d’apparition: Jorendc, Kohei Yoshida (Collaborative), Maxim Monastirsky, tommy27, Joel Madero, Caolan McNamara (RedHat ), Foss, Jay Philips, mariosv, Julien Nabet, Sophie Gautier (TDF), Cor Nouws, Michael Stahl (RedHat), Jean-Baptiste Faure, Andras Timar (Collaborative), Adolfo Jayme, ign_christian, Markus Mohrhard (Collaborative), Eike Rathke (RedHat), Urmas. Et grâce aux nombreuses autres qui ont contribué à fermer si de nombreux bugs pour cette version.

Bjoern Michaelsen (Canonical) aussi écrire une belle taxonomie de notre vingt-cinq mille les bugs à ce jour, et à condition que les données de cette belle répartition:

Graph of bug stats over the development of 4.3
nettoyage du code

Le code qui est sale doit être nettoyé – si nous avons fait beaucoup de cela.
La mort définitive de UniString

Alors que nous avons tué notre classe outils dernières / chaîne en 4.2 et passés à nettoyer, OUStrings uniformes partout – nous utilisons toujours quelques quantités de 16 bits pour décrire les décalages de texte ailleurs. Merci à Caolan McNamara (Red Hat) pour enfin permettre l’écrivain d’avoir> 64k paragraphes – une fonctionnalité demandée depuis longtemps par un certain type d’utilisateur, voir le billet de blog liés.
Code VCL / Structure nettoyage

Les bibliothèques de classes Visual – la boîte à outils native LibreOffice n’a pas été donné l’amour qu’elle mérite au cours des dernières années. Un grand merci à Chris Sherlock pour plusieurs centaines de commits – à partir de nettoyage VCL. Cela implique beaucoup de bonnes choses – en indiquant le code d’une structure plus logique donc il est facile de trouver des méthodes; écrit systématiquement documentation doxygen pour les méthodes de l’API, veiller à ce que les méthodes de l’API ont sensibles, des noms descriptifs et de commencer à se détendre quelques décisions de conception existants pauvres; beaucoup apprécié.
Cours allemand Commentaire redux

Nous avons continué à faire des progrès sur la traduction de nos derniers commentaires allemands persistantes dans la base de code de bonne, croquante anglais technique. Un grand merci à Luc Castermans, Sven Wehner, Christian M. Heller, Philipp Weissenbacher, Stefan Ring, Philipp Riemer, Tobias Mueller, Chris Sherlock, Alexander Wilms et autres. Nous avons également réduit le nombre de faux positifs et accéléré le bin / find-allemand-commentaires outil dans ce cycle.
Graphique de lignes restantes de commentaire Allemand pour traduire

Graph of remaining lines of German comment to translate
Code de réusinage automatisé utilisant Clang

Un héros de nettoyage de code est Noel Grandin qui s’améliore constamment le code à bien des égards; par exemple. écrivant le code de double non-nécessaire d’utiliser des emballages standards tels que SimpleReferenceObject. Noel a été fortement impliqué dans les plugins Clang de réécrire une grande partie de notre source d’erreurs binaire format de fichier / flux remplace pStream >> nVar semble une excellente idée jusqu’à ce que vous vous rendez compte que un changement inattendu du type de nVar tweaks loin le fichier le format. Ces opérateurs sont maintenant tous réécrits pour explicites méthodes améliorant la robustesse du code à des changements de type ReadFloat. Noel a également créé des plugins pour inline fonctions membres simples, de détecter le passage inefficace de uno :: Séquence, et OUString. Stephan Bergmann (RedHat) a également écrit un certain nombre d’outils avancés de peluchage, les chèques pour les pointeurs NULL de-référence, attraper rapidement les problèmes de inlining sur Linux qui causent le plus chagrin sur Windows, et ré-écriture des usages non nécessaires de sal_Bool à bool. Stephan a également écrit un plugin pour trouver des fonctions non utilisées et non utilisées dans les fonctions des modèles, ainsi que d’avertissement sur ​​les conversions illicites de littéral bool par exemple si (n == KIND_FOO | | KIND_BAR). Tout cela améliore la lisibilité, la cohérence, la fiabilité et, dans certains cas les performances du code.
Amélioration du cycle de vie

Takeshi Abe a investi beaucoup de temps ce cycle dans l’amélioration de notre objet cycle de vie souvent inutile. Utilisation des pointeurs intelligents non seulement rend le code plus lisible et souvent plus courts, mais aussi exception sécuritaire qui est très utile.
DocTok nettoyage

Ce nettoyage a sauvé près de 80k lignes de code et de faire la base de code plus simple à comprendre grâce à Miklos Vajna (Collaborative), vous pouvez voir l’avant et après les photos sur son blog.
Tenir la ligne sur la performance

La performance est une de ces choses difficiles à garder solide. Il a une habitude inquiétante de peu la pourriture quand votre dos est tourné. C’est pourquoi Matus Kukan (Collaborative) a construit une machine de test qui s’appuie systématiquement LibreOffice et exécute une série de charges de documents, etc conversions sous callgrind. Utilisation CPU de simulation de callgrind a la belle propriété d’assurer un comportement répétitif, et donc de prendre une petite réduction ou l’amélioration de la performance notable et réparable. Il est facile de voir que dans un graphique – admirer la planéité croquant du graphique entre les événements importants. L’axe des X est temps (annoter l’axe avec des mots de git n’est pas tellement photogénique).

Graph of various documents performance

Souvent, nous vérifions que les performances juste avant un communiqué, son intéressant de voir ici la grosse bosse orange d’une fragilité de la performance constatée et fixe en conséquence directe de ces tests. Données de callgrind Raw est disponible pour examen trivial des dernières traces avec un ODS plats des essais précédents.
s’impliquer

J’espère que vous aurez l’idée que plus de développeurs continuent à trouver une maison à LibreOffice et travailler ensemble pour compléter un travail assez important à la fois sous le capot, et aussi sur la surface. Si vous voulez vous impliquer, il ya beaucoup de gens formidables à rencontrer et de travailler aux côtés. Comme vous pouvez le voir les gens à faire un impact énorme à la diversité de LibreOffice (les légendes de couleur sur le droit doivent être lus de gauche à droite, de haut en bas, qui mappe vers le haut dans le tableau):

Graph showing individual code committers per month

Et aussi en termes de diversité de Code commet, nous aimons à voir la contribution des volontaires non affiliés en volume, bien que clairement le volume et l’équilibre change avec les saisons, le cycle de la libération, et les bénévoles de vacances / plans d’affaires:

Graph of number of commits per month by affiliation

Naturellement, nous maintenons une liste de petites bouchées tâches, que vous pouvez utiliser pour participer à notre page facile Hacks, avec des instructions construction / d’installation simples. Il est extrêmement facile à construire LibreOffice, chaque facile hack devrait avoir des pointeurs de code et être autonome tâche bien facile à résoudre. En outre, certains d’entre eux sont vraiment sympa à avoir des caractéristiques ou des améliorations de performance. S’il vous plaît ne considèrent coincé dans quelque chose.

Graph of progress closing easy hacks over time

Une autre chose qui aide vraiment est en cours d’exécution pré-version s’appuie et signaler les bogues juste récupérer et installer une pré-version et vous êtes prêt à contribuer avec le reste de l’équipe de développement.

conclusion

LibreOffice 4.3 est la prochaine dans une série de communiqués qui améliorent progressivement non seulement les caractéristiques, mais aussi le fondement de la suite bureautique du logiciel libre. S’il vous plaît être patient, il n’est que la première d’une longue série 4.3.x de presse mensuelles qui apportera un flux de corrections de bugs et améliorations de la qualité au cours des prochains mois alors que nous commençons à travailler sérieusement sur ​​LibreOffice 4.4.

J’espère que vous apprécierez LibreOffice 4.3.0, merci pour la lecture, et je vous remercie pour le soutien LibreOffice.

Les données brutes pour la plupart des graphiques ci-dessus est disponible.

Comments are closed.