Liens connexes

Dépêche modérée par

Dépêche éditée par

: Le language de programmation ooc sorti en version 0.2

Posté par Amos Wenger (Jabber id, page perso, ). Modéré le 26 juin 2009.
19
Aujourd'hui est sorti la version 0.2 du langage de programmation ooc.

ooc est un langage de programmation libre, orienté objet, compilé, et portable. Il se veut léger, rapide, pratique et surtout libre !

Un des buts d'ooc est de combiner les avantages de langages de haut niveau comme Java ou C# avec la rapidité du C. Pour ce faire, les fichiers sources .ooc sont traduits en C, puis compilés avec GCC, ICC (Intel), ou n'importe quel compilateur C99.

ooc est orienté objet, profite du ramasse-miettes conservatif Boehm (garbage collector), organise les classes en paquetages, gère automatiquement les dépendances et toutes les bibliothèques C sont utilisables nativement.

> Lire la suite (173 commentaires, moyenne: 2).   [dépêche : 1096 caractères]

Malgré la jeunesse relative du langage (5 mois) et de son compilateur, il est déjà très utilisable. Son SDK (bibliothèque standard) contient quelques classes pour les entrées/sorties, la manipulation de chaîne de caractères, la gestion du temps, etc.

L'implémentation de référence du compilateur est codée en Java, donc il est assez portable. Cependant, des binaires sont construits pour Linux et Windows avec GCJ (le compilateur Java de la famille GNU), donc il n'y a pas besoin du JRE pour faire fonctionner le compilateur. En outre, les programmes produits sont en C99 pur, ils ne nécessitent donc pas Java du tout.

La version 0.2 du langage et de son compilateur introduisent les changements suivants :

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Hmmm

Posté par dest () le 26/06/2009 à 14:59. (lien). Évalué à 3.

En gros, c'est une surcouche haut niveau du C. Un peu comme OCAML sauf qu'OCAML est un langage formel et ça, ça apporte vraiment de la sécurité pour développer nos applications et éviter d'avoir des trous partout.

C'est pas pour rien qu'on parle de plus en plus d'approches formelles.

De plus OCAML dispose d'un garbage collector très puissant, c'est objet, y'a des exceptions, c'est fortement typé, pas de buffer overflow,... (liste non exhaustive).

Bref ooc d'après ta description ne me rassure pas sur les buffer overflow, les cast, les pointeurs. Plein de sources à trous.

ObjectiveC

Posté par Kasp () le 26/06/2009 à 15:09. (lien). Évalué à 3.

Quelles sont les différences entre ce projet et ObjectiveC ?

Simple curiosité.

Vala

Posté par Sytoka Modon (page perso, ) le 26/06/2009 à 15:25. (lien). Évalué à 9.

Dans le même genre, quelle est la différence avec Vala ?

[+] Et Vala ?

Posté par pix (page perso, ) le 26/06/2009 à 15:27. (lien). Évalué à -1.

Et qu'offre t'il par rapport a [[Vala_(langage_de_programmation)]] par exemple ?

--
La hiérarchie, c'est comme les étagères : plus c'est haut, moins ça sert.

Version 0.2

Posté par Thierry Thomas (Jabber id, page perso, ) le 26/06/2009 à 15:28. (lien). Évalué à 1.

Je comprends bien qu'un compilateur soit compliqué à développer, mais j'ai du mal à comprendre qu'un langage puisse « sortir » en version non stabilisée !

--
Th. Thomas.

lan_GA_ge

Posté par totof2000 () le 26/06/2009 à 15:36. (lien). Évalué à 6.

Sinon c'est quoi cette façon à obligner les gens a faire un commentaire quand tout est dit dans le titre? Vous voulez une insulte en plus ?

hello world?

Posté par case42 (page perso, ) le 26/06/2009 à 16:11. (lien). Évalué à 3.

Ça fait maintenant dix minutes que je clique à droite et à gauche sur les différentes ressources, et je n'ai toujours pas vu le début du commencement d'un exemple de code... Il devrait y avoir un hello world en OOC ecrit en gros et gras sur la première page du site...

Ooc !

Posté par Pierre Bourdon (Jabber id, ) le 26/06/2009 à 18:03. (lien). Évalué à 6.

Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc! Ooc? Ooc. Ooc? Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc. Ooc? Ooc. Ooc! Ooc! Ooc? Ooc! Ooc. Ooc? Ooc! Ooc.

Succès du langage

Posté par letsyl () le 26/06/2009 à 19:07. (lien). Évalué à 6.

As-tu une barbe ?

Rapidité du C ... et ramasse-miettes ?

Posté par Benoit Jacob (page perso, ) le 26/06/2009 à 20:15. (lien). Évalué à 1.

Je relève ce qui me semble être une petite contradiction dans la dépêche. Tu dis qu'OOC a la rapidité du C, mais ensuite tu dis qu'il utilise un ramasse-miettes.

Or ça c'est une contradiction: un ramasse-miettes ça a un coût en termes de performances et d'utilisation de la mémoire. Ce n'est pas sans raison que les langages orientés performance, ayant une philophie "aucun surcoût par rapport à l'assembleur", tels que le C et le C++, n'utilisent pas de ramasse-miettes.

http://en.wikipedia.org/wiki/Garbage_collection_(computer_sc(...)

Ramasse-miette conservatif..

Posté par reno () le 26/06/2009 à 20:42. (lien). Évalué à 2.

Juste pour ceux qui ne saurait pas, un ramasse-miette conservatif peut avoir des inconvénients: certaines données peuvent etre confondue avec des pointeurs et le résultat est que certains programmes *correctes* consomment des quantité de mémoire excessive (probleme existant surtout en mode 32bit).

Ce n'est pas qu'un probleme théorique: j'ai vu plusieurs message sur le newsgroup de D d'utilisateurs qui se plaignaient d'une consommation excessive de mémoire qui était tombé dans ce cas la (D utilise aussi le Boehm GC).

L'avantage du ramasse miette Boehm est qu'il est mature et fonctionne avec du C (enfin si le C n'est pas trop crade: pointeur XOR-és: aucun GC ne peut traiter cela pourtant c'est possible en C) mais cela n'en fait pas (et de loin) le top au niveau ramasse-miette..

Je pense notamment qu'il ne doit pas etre tres temps reels (meme s'il est incrémental d'après wikipedia).

Compatibilité avec les lib C++ ?

Posté par 0xFF () le 26/06/2009 à 21:37. (lien). Évalué à 2.

Tous ces nouveaux langages compilés (Ocalm, D, ooc...) semble très prometteurs. Je n'ai pas encore eu l'occasion de les tester mais ça m'intéresse beaucoup. Mais qu'en est-il de leur compatibilité avec les API faite en C++ ? Est il possible, et facile, d'utiliser des lib C++ avec ooc ? Je supose que non puisque que je n'ai rien vu dans la doc qui en parle. Mais malheureusement j'utilise presque uniquement des API faite en C++ dans mes projets.

Est-ce que c'est impossible de marier les deux ?

Critique du langage.

Posté par LupusMic (page perso, ) le 27/06/2009 à 00:46. (lien). Évalué à 2.

Je ne suis pas un guru de la programmation, mais je pense pouvoir te fournir quelques remarques qui te permettrons d'améliorer ton langage.

Pour l'ensemble de mes remarques, je vais suivre et commenter le ninja language reference http://ooc-lang.org/doc/langref/book1.htm (tu devrais rajouter dans la FAQ pourquoi c'est une référence Ninja).

http://ooc-lang.org/doc/langref/c31.htm
« All types should be in CamelCase, all variables and functions in camelCase. [...] The justification for that is consistency. »

Je ne vois pas en quoi le nomage des « types » en Java est incohérent. Les POD ont une minuscule parce qu'ils ne sont pas des objets. Si ton système est cohérent, alors on peut dériver depuis un Int. Dans le cas contraîre, c'est OOC qui est incohérent et non Java. À noter qu'ici Java est cohérent, raison de l'existence des classes Integer, Float, etc.

Quand au C++, la tradition est de ne jamais utiliser de majuscules. Que ce soit pour les noms de classe ou des fonctions. Seules exeptions, les noms de constantes ou les nom des paramètres de templates. Par exemple : void std::map<template T>::push(T &) ;

« You can declare several variables on the same line »
Mauvaise habitude. En plus tu montre que tu ne sais pas que le type pointeur n'existe pas en C/C++ (c'est un qualificatif).

« Correspondance with C and Java types »
En Java, je crois bien qu'on peu utiliser le mot-clé « self » dans la liste des paramètres et le type de retour des fonctions membre. En C++, je déclare souvent typedef Myclass self.

Je ne comprends pas cette prolifération de types numérique. Pourquoi ne pas proposer un type générique qui gère les opérations sur les nombres avec une précision arbitraire ? Ça permettrait de totalement abstraire l'usage des nombres, ce qui manque avec C++ et Java (il faut toujours faire attention aux limites, ce qui est rarement testé correctement, voir ignoré le plus souvent).

Le nom Octet est franchement maladroit, quant on sait qu'un byte ne fait pas forcément un octet. D'ailleurs, quelle est la taille de tes int (parce qu'en C, c'est dépendant de l'architecture, tout comme char) ?

« printf("A moins que vous n'epousiez la %s?\n", name); »
Pourquoi pas :
console.print "A moins que vous n'epousiez la %s?\n".format name ;

Je n'arrive pas à entrevoir l'intérêt des Covers sur la dérivation de la classe.

http://ooc-lang.org/doc/langref/x209.htm
Une critique qu'on peut faire au C++, c'est d'avoir conserver les tableaux à la mode C. Pourquoi faire la même erreur ? L'encapsulation des tableaux permet d'éviter la duplication des tests de contrôle, et surtout t'éviter tout problème de sécurité relatif au débordement de tampon (et de centraliser la correction d'un éventuel bogue). Ton langage impose déjà plusieurs paradigme : tu devrais aller au bout de ton idée. Sinon, autant faire du C ou du C++.

« A function is declared with the func keyword. »
Pourquoi un mot-clé ?

« func add(Int arg1, Int arg2) -> Int { } »
Argh... Je n'ai jamais compris cette logique que de noyer le type de retour après la list de paramètres (Pascal, Basic, etc).

« The main function: entry point »
Mais pourquoi une fonction ? :D

« SDL_Quit(); // We must use parenthesis, cause it's a C function »
On pourrait te reprocher une certaine incohérence à ce niveau là. Mais je comprends la limitation technique.

« Instanciation »
Je ne comprends pas l'intérêt du mot-clé new. En plus, de ce que j'en comprends, tes types ne sont jamais créé sur la pile ? Dans ce cas, tu devrais reprendre ton benchmark sur l'instantiation, et faire la création sur la pile. Tu verras que la différence de performances est... non-négligeable (l'instantiation sur la pile est 7× plus rapide que dans le tas, chez moi).

Un objet peut-il être utilisé comme un functor ?

Les objets sont polymorphiques ?

Quelle est la portée par défaut des membres d'une classe ? Public ? N'est-ce pas là une violation du principe d'encapsulation ?

« for in ranges »
C'est pratique, indubitablement. Une bonne idée serait de rajouter un type Range. Pour éviter de déclarer des ensemble en dur dans les boucles. En embarquant le pas dans le Range, évidemment.

Tu aurais pu virer switch ;)

Pas de do..while ?

« The package of a source unit is relative to the sourcepath. »
Je ne penses pas que ce soit une bonne idée. Pour tout un tas de raisons, allant de la relativité du chemin au caractère dur du chemin. Bien que le mot-clé super permette de contourner partiellement ce défaut.

Voilà pour mes quelques remarques. J'espère que ça t'aidera dans ta réflexion.

Super un nouveau langage

Posté par mosfet () le 27/06/2009 à 12:25. (lien). Évalué à 1.

Cette depeche tombe a point car depuis un an maintenant je suis a la recherche de langage natif avec gestion automatique de la mémoire afin de proposer une surcouche haut niveau pour un de mes projets.
En effet je travaille sur un projet du nom de gynoid(clin d'oeil a android) qui consiste a wrapper en C les api des teléphones portables (wince, symbian, iPhone et peut etre un jour android si google l'autorise).
A l'heure actuelle l'acces a l'adressbook est en train d'etre finalisé et j'avais adopté pour ce framework une approche orientée objet afin de simplifier le wrapping objet plus tard.
Par exemple pour acceder aux contacts de l'adressbook on écrit :

// Desolé pour l'indentation c pas très lisible


ErrorCode err = 0;
int iCount = 0;

GDAddrBook* pAddrBook = NULL;
GDAbItem* pAbItem = NULL;

if (!GDAddrBook_Alloc(&pAddrBook) &&
!GDAddrBook_Init(pAddrBook, 0) )
{
GDAddrBook_GetCount(pAddrBook, &iCount);
for (int i = 0; i < iCount; i++)
{
if (GDAddrBook_GetItem(pAddrBook, i, &pAbItem) == 0)
{
GDCTSTR lpFirstName = (GDCTSTR) GDAbItem_GetProperty(pAbItem, eAbFirstName);

//GDConsole_Writeln(_T("FirstName %s\nLastName %s\n", ...);
_tprintf( _T("[%d] %s %s %s\n"), i, lpFirstName, lpLastName, lpMobTel);

GDObject_Release(pAbItem);
}
}
}

Chacun de mes "objets" GDxxxx derive d'une structure avec une variable pour les références comptées.
Problème c'est que les developpeurs aujourd'hui ne sont plus vraiment intéréssés par le C et ce d'autant plus qi'on developpe des interfaces graphiques, c'est pourquoi je cherchais un langage qui me permettrait d'offrir un langage plus haut niveau et rellement objet.
Je me suis tourné des le départ vers le langage D car il concu par des grands noms du C++(A. Alexandrrescu) et des experts en compilation (Walter Bright) mais le problème est que le compilateur n'est ps disponible sur plateforme arm et que le compilo gnu GDC n'est meme plus maintenu.
Par consqéquent ooc est une alternative sérieuse au D dans mon cas précis.
Je pense par contre que ce serait pas mal de lancer un projet pour implémenter un frontend au sein de gcc ou mieux au sein de llvm car cela permettrait par la suite de pouvoir générer u narbre syntaxique ou un truc du genre pour prendre en charge la complétion dans un IDE par exemple.
Bon d'abord je vais étudier un peu plus le langage et j'essaierais de donner un retour.

Sympa

Posté par Emeric () le 30/06/2009 à 10:34. (lien). Évalué à 1.

Sympa comme projet.

Il semble que que le programme généré ne soit pas entièrement portable suivant l'architecture cible.
Les Float sont des float donc dépendant de ce pourquoi on compile.

en tout cas bravo

contribution

Posté par collinm (page perso, ) le 02/07/2009 à 02:15. (lien). Évalué à 1.

ça serait intéressant d'avoir une liste de fonctionnalité devant être implémenté, ligne directrice...

je code en java et C... ça fait un petit moment que j'ai pas touché au C... et je serais sûrement intéressé à participer.... s'il y aurait plus d'info sur ce qu'un volataire peut faire...

--
www.laboiteaprog.com

Revenir en haut de page