9
votes

Quelle langue de niveau supérieur ressemble le plus à C?

J'apprends C: C'est une belle langue bien pensée. Cependant, il est tellement niveau bas qui écrit toute sorte de projet majeur devient fastidieux.

Quelle langue de niveau supérieur a la syntaxe la plus en forme de C - mais sans tout l'encombrement que vous trouvez dans quelque chose comme C ++. Existe-t-on?


8 commentaires

Définir "encombrement", définir "le plus comme".


Plus vous trouverez la langue plus haute, plus vous trouverez «encombrement» à cause des abstractions qui le rendent de niveau supérieur.


Peut-être que vous pouvez spécifier pourquoi vous pensez qu'il est fastidieux. Il existe des grands projets très importants écrits entièrement dans la langue de C ou C.


"C'est une belle langue bien pensée" plaisantez-vous?


@Tandemadam, c'est juste appât de flammes. C'est une très bonne langue portable.


J'aime penser à C comme un passage supérieur d'autoroute sans rails de garde. Ya, ça vous fera du point "A" pour le point "B" véritable, mais un tour erroné et éteint le bord que vous allez. Remarque: +1 Si vous lisez ceci dans une voix de Bobby Ricky.


@Konerak: Je ne pense pas. C ++ est le langage le plus encombré malgré toujours d'être assez bas niveau. Java, par exemple, est un niveau supérieur à celui de C ++ et moins encombré.


@Anders, pourriez-vous élaborer?


14 Réponses :


4
votes

Probablement Java et C # ... Java un peu plus alors je pense.

Et ce n'est pas la langue - tout concerne les bibliothèques. Essayez qt ( http://qt.nokia.com/ ). C'est pour C ++ et je sais que vous avez dit c mais je vais juste faire un point que vous allez écrire aussi peu (et peut-être encore moins!) Que vous ne écrivez pour des applications en Java ou C #. Plus ils sont natifs et plate-forme inter-plate-forme.

Tout sur les bibliothèques.


3 commentaires

+1 Si vous êtes habitué à C99, le code Java ressemble au moins à la même chose.


Oui, comme de nombreuses conventions de dénomination (moins hongrois, je suppose).


Je suppose que cela exerce vraiment ce que nous entendons par "comme C." :)



5
votes

Ceci est une question trop large et est le mieux fait wiki communautaire.

Cependant, dans mon esprit, la principale caractéristique distinctive de C est sa compacité. Toute la langue peut être décrite dans un petit livre comme K & R. On peut se souvenir de tous les détails syntaxiques sans trop d'effort (car il y en a si peu d'entre eux) et il n'essaie pas de protéger ses utilisateurs d'eux-mêmes.

Les langues comme c ++ sont beaucoup plus baroques. Il est assez difficile de se rappeler toutes les règles et exceptions. Je ressens la même chose à propos de Perl et de Ruby. Il y a beaucoup de choses à retenir et beaucoup de choses à faire attention.

Je ressens le même sens de la compacité avec python (bien que peut-être pas autant que c). Il y a très peu de "syntaxe spéciale" et toutes les bibliothèques et modules sont exploités de la même manière.

Ceci (probablement comme la plupart des autres commentaires sur cette question) est une évaluation personnelle et n'est nullement un mot final.


1 commentaires

Eh bien, je distingue des erreurs de programmation (SEGFAULTS, etc.) et entre les règles Les langues imposent que vous pourriez trébucher. C est tout à fait cohérent avec ses règles linguistiques.



12
votes

's go Language a une syntaxe similaire (bien que suffisamment différente, je suppose) et une sémantique, bien que la collecte des ordures , polymorphisme, etc., intégré dans la langue.


1 commentaires

Allez a l'air génial, je l'essaie de sortir.



1
votes

Ce Comparaison des instructions de base vous donne une bonne idée de quelles langues sont similaires à chaque autre.

Je dirais que php est le plus comme c sauf pour les variables $, si vous pouvez distinguer PHP la langue de PHP la plate-forme. Java essaie d'une certaine manière, mais est trop fortement orienté objet pour être similaire à c.


1 commentaires

Peut-être que php est un peu trop Highlevel, quoi avec sa dactylographie perdue.



0
votes

Je voterais c #. Je ne sais pas ce que vous entendez par «encombrement», mais d'un point de vue d'une convivialité, C # est agréable parce que cela évite certaines des choses fastidieuses de C ++, comme ayant essentiellement "déclarer" chacune des méthodes de votre classe deux fois (le prototypage dans Le fichier d'en-tête, puis surplonant essentiellement la même chose dans la mise en œuvre de votre classe). Les dossiers d'en-tête de fosses étaient également agréables, comme faire des conflits de dépendance dans de grands projets ou en évitant les références circulaires. En C #, le compilateur s'occupe de tout cela (bien que vous ayez toujours à définir des références à d'autres fichiers ou assemblages).

Je fais c # depuis 10 ans et je manque toujours des indicateurs qui le croient ou non, à mon avis, réellement fait de débogage plus facile!



0
votes

Si vous allez programmer souvent, il est bon de connaître des langues qui ne sont explicitement pas comme les unes des autres. Il est particulièrement utile de connaître des langages de script de haut niveau comme Python ou Ruby. Si vous pouvez penser comme un programmeur en C, vous devez apprendre l'un de ces deux. De nombreux grands projets tirent parti du prototypage rapide des langages de niveau supérieur tels que Python ou Ruby, mais profitent également de langages compilés bas (rapides) tels que C / C ++.


1 commentaires

Je sais déjà Ruby - mais j'ai appris C et je pense, d'un point de vue esthétique, est beaucoup plus agréable. (Étrange, je sais.)



0
votes

Comment sur ActionScript 3? C'est beaucoup comme Java.


5 commentaires

Vraiment? Je pensais que ce serait beaucoup comme Ecmascript. Oh attends, c'est est ECMAScript.


Script d'action (1,2,3 peu importe) ECMAScript? Alors JavaScript est ECMAScript qui est ActionScript et JavaScript est donc ActionScript? Je Daesay, beaucoup de code ActionScript ne peut pas être non modifié comme JavaScript / ECMAScript, il est donc quelque chose de différent; peut-être juste un peu, mais néanmoins, il n'est pas entièrement conforme à la carte Ecmascript


ECMAScript et JavaScript sont toujours efficacement non-standard, car lorsque vous passez d'une application hôte à une autre, le modèle d'objet que vous travaillez principalement est intrinsèquement différent. Vrai, vous pouvez (en principe) prendre votre JavaScript d'un navigateur à un autre, mais vous ne pouvez pas vraiment le prendre avec vous à Photoshop, par exemple.


ActionScript n'est-il pas simplement utilisé pour Flash?


Oui, il est utilisé pour Flash. Et s'il vous plaît pardonnez-moi. ce n'est pas comme Java mais plus comme JavaScript. ma faute! ..: p



4
votes

J'apprends C: C'est une belle langue bien pensée. Cependant, il est si bas que l'écriture de tout projet majeur devient fastidieux.

Certaines personnes diraient que la deuxième phrase prouve que l'affirmation de la première phrase est fausse.

Un autre point est que cela est à peu près sans réponse. Qu'est-ce qu'un langage "de haut niveau"? Quels sont vos critères pour "proximité"? Syntaxe, modèle de calcul, performance? Et quoi type d'applications voulez-vous construire avec cette langue hypothétique?

Et si vous voulez juste vous limiter à des langues qui "ressemblent" c, pourquoi? En tant que personne qui a perdu le nombre de langages de programmation, il a utilisé, je peux vous dire que les différences de syntaxe linguistique de programmation sont généralement assez peu important. Vous pouvez vous habituer à très bien toute syntaxe, délibérément.


0 commentaires

9
votes

Le langage de programmation D est une tentative d'être ce que C ++ aurait dû être (ne pas basculer sur C ++, c'est ma langue principale) et je cite à partir du site Web, "D est une langue de programmation de systèmes. Son objectif est de combiner la puissance et les performances élevées de C et C ++ avec la productivité du programmeur des langues modernes telles que Ruby et Python. Une attention particulière est accordée aux besoins de l'assurance de la qualité, de la documentation, de la gestion, de la portabilité et de la fiabilité. "Le problème avec D est-il relativement nouveau Par rapport à beaucoup de langues, mais heureusement, il peut toujours utiliser des bibliothèques C, ce qui lui permet d'accéder à une base de code pré-existante. Vaut certainement la peine de vérifier.

Java est une autre option, mais il est notamment plus lent que C. syntaxiquement, il est très similaire et offre un bon environnement orienté objet pour l'écriture de code. Il est également considéré par la plupart d'être une langue plus sûre que C et C ++. Il est largement utilisé dans l'entreprise.

python tandis que syntaxiquement pas comme c est un langage de programmation orienté objet de haut niveau qui est très populaire et peut importer des modules C qui peuvent être très utiles sur la piste.


1 commentaires

Python est très comme C en Esprit. Les modules de base sont des cales minces sur le système d'exploitation fourni. Python fait confiance au programmeur et donne une quantité suffisante de corde pour vous accrocher. (Vraiment!)



14
votes

in c ++, vous pouvez écrire C code et le faire compiler avec succès en tant que C ++ (principalement). Par conséquent, bien que je suggère que votre terme "encombrement" est à la fois péjoratif et ambigu, le seul fouillis que vous aurez, c'est ce que vous choisissez de vous écrire. Vous pouvez utiliser C ++ comme gros sac à outils sans utiliser tous les outils (ou encombrer si vous préférez).

La réponse donc est c ++ si vous l'aimez ou non. La plupart des autres langues similaires ajoutent des fonctionnalités oo, ce qui est peut-être ce que vous considérez comme encombrement, mais vous n'obtenez rien pour rien et vous devez avoir la syntaxe pour supporter les fonctionnalités supplémentaires. Ces langues incluent:

  • Java
  • c #
  • Objective-C
  • d

    de ces objectifs-c est probablement le plus semblable à celui que c'est un superset de C de la manière dont C ++ n'est pas tout à fait. C'est également la langue préférée pour le développement OSX et iPhone / iPod Touch, qui peut être attrayante.

    Java est omniprésent mais probablement mieux décrit comme étant superficiellement de type C. C # a un support multi-plate-forme limité mais est le chemin du moindre résistance au développement de l'interface graphique Windows avec d'excellents outils de développement gratuits. C # a également une implémentation OO plus simple mais plus restrictive que c ++ afin de répondre à vos besoins, mais sa ressemblance avec C / C ++ peut être trompeuse; Il est fondamentalement différent de la manière dont cela fonctionne de manière similaire à Java. D est un peu une niche, étant développée par un seul auteur (bien que l'auteur du compilateur de Zortech / Symantec C ++ de C ++ de renom).

    En ce qui concerne le "niveau bas" et "fastidieux", lors de l'embarquement sur un "projet majeur", vous commencerez rarement à partir de zéro avec uniquement la bibliothèque standard et l'API OS disponible, vous utiliseriez une tierce partie et dans Bibliothèques développées -House pour développer rapidement une fonctionnalité de niveau supérieur. Cela dit, une approche OO est généralement beaucoup plus aménageuse pour cette approche "Code-réutilisation", et bien sûr, la bibliothèque standard de C ++ et les bibliothèques tiers sont plus étendues (notamment car elles peuvent utiliser des bibliothèques C ainsi que des bibliothèques C ++). En fait, je suggérerais que le support de formulaire séparé pour OO, la seule chose qui rend le niveau de niveau supérieur C ++ est son extensibilité via des classes comme des objets de première classe. Il reste néanmoins approprié comme un langage au niveau des systèmes.


5 commentaires

Je ne comprends pas. Vous prétendez que la base de la réponse est que vous pouvez utiliser la langue »comme un sac à outils plus gros sans utiliser tous les outils (ou encombrement)», mais alors disent que la réponse est C ++. Pourquoi est-ce que l'objectif c, étant un surset réel de C, une réponse plus appropriée compte tenu de ce critère?


@Ken: Cela pourrait être, mais l'Objective-C est une plate-forme multi-plate-forme moins bien prise en charge, et moins largement utilisée en général, ainsi l'aide, le support et le matériel de référence ne sont pas si utilitaires. C'est toutefois une bonne réponse pour le développement OSX et iPhone.


C # Mythe numéro 1: "C # a un support croisé limité". mono-project.com/main_page


@Callum Rogers: Le soutien du framework de Mono est certainement plus complet que je cherchais, mais pas à 100%. Probablement assez bon pour que ma déclaration soit fausse toutefois. Je me rends compte que C # et .NET Framework sont séparés, mais pas beaucoup de code C # est écrit qui n'utilise pas le document .NET.


@Callum: En fait, je le ramène. C # a un support multi-plateforme limité; Ce n'est pas un mythe. C # nécessite un temps d'exécution sous-jacent actuellement fourni par .NET, .NETMICRO ou Mono. C ++ fonctionnera sur du matériel nu en métal sans même un système d'exploitation. Même .NetMicro nécessite un processeur 32 bits avec> 256 kb de RAM. C ++ fonctionnera sur un processeur 8 bits avec 16 kb de RAM. La plate-forme croisée ne signifie pas seulement Windows, Linux et OSX.



1
votes

JavaScript a une syntaxe de type C similaire, et c'est une langue très populaire. JavaScript a beaucoup de bizarreries, mais il a une similitude puissante à C - c'est simple. La spécification JavaScript complète est très courte et la langue est très puissante et de haut niveau. Ce serait génial de le nettoyer de certains de son cruft laid, cependant.


0 commentaires

1
votes

Je vais simplement souligner que Pascal est sémantiquement (mais pas tellement de manière syntaxiquement) très similaire à c, il existe donc des options telles que l'objet Pascal, Modula 2, ADA et Oberon là où vous allez réutiliser la plupart des La partie non triviale de ce que vous savez déjà, la partie triviale étant l'orthographe.

Vous êtes probablement mieux mieux coller avec C # ou Java en termes de perspectives d'emploi, cependant.

Modifier

Je vais également ajouter cela sur la question de l'encombrement, il est important de trier quel encombrement est important. C a moins de "encombrement" dans sa définition de langue, vraie, mais l'encombrement correspondant est en code source. Considérons les suivants ... xxx

Le point est que le "encombrement" dans la définition de langue est là pour une raison. Avec un peu de travail à l'avance lorsque vous écrivez des bibliothèques, beaucoup de travail (et encombrement) sont évités dans la ligne. Et même lorsque vous écrivez une bibliothèque, vous bénéficiez du travail avancé effectué par d'autres écrivains de bibliothèque.


3 commentaires

Les 5 premières lignes d'un exemple C peuvent être compactées dans une ligne mytruct_t myvar = mystruct_new (1,2,3); de code bien écrit. Inversement, le code C ++ mal écrit peut être beaucoup plus long.


@ el.pascado - Vous supposez qu'il y a une "structure Typedef" et vous avez manqué l'utilisation du pointeur. Bien que vrai - un constructeur ne soit vraiment qu'une fonction, et la structure TypeDEF est juste une autre forme de travail à l'avant pour sauver l'encombrement plus tard. Un point sur cette fonction d'initialisation, cependant, est que cela devra faire le travail des cinq premières lignes de mon exemple de mon exemple, pas seulement des trois missions des membres. Theres encore une fouille supplémentaire en C - mais il n'a pas toujours à affecter le programmeur de la bibliothèque de haut niveau.


@ el.pascado - En fait, j'avais l'intention de dire que "un appel n'est qu'un appel dans n'importe quelle langue - les différences mineures de la syntaxe sont des mécanismes d'expédition sans importance et même implicites auraient pu être mis en œuvre à l'aide d'une décision expresse explicite - Faire fonction. Je ne me souviens pas de savoir si c'était cette question ou non, mais je l'ai laissé tomber en raison de problèmes de dialogue de commentaires de toute façon.



0
votes

Si vous pensez que C ++ est encombré, vous ne savez tout simplement pas comment écrire efficacement C ++, car personne ne vous oblige à utiliser aucun des outils avancés disponibles. Vous pouvez rédiger un programme C ++ entièrement en C plus votre fonctionnalité C ++ préférée (comme la bibliothèque standard géniale). C'est la définition de nettoyé. Une langue encombrée serait Java / C #, où vous devez mettre chaque fonction dans une classe. C'est fouillé.


5 commentaires

Ce n'est pas vraiment le problème, mais je suis en désaccord que la bibliothèque standard C ++ est "géniale". Prenez les conteneurs. Ils ne sont ni une chose ni l'autre. En abstraction, ils sont incroyablement fuyants et l'utilisation d'itérateurs est fragile. En tant que bibliothèques de structure de données, elles sont inflexibles, cachent des internes et empêchent une extension efficace. Dans l'ensemble, ils sont généralement corrects - par exemple si les itérateurs sont toujours manipulés à l'aide d'algorithmes de bibliothèque standard ou à l'aide d'idiomes robustes bien connus, vous ne vous souciez pas de la fragilité, car elle ne vous affectera pas. Mais toujours, je ne dirais pas "génial".


@ Steve314: Vous voulez dire, en tant que bibliothèques de structure de données, ils offrent une grande gamme de complexités différentes pour différentes opérations et différentes exigences de type, et sont extrêmement faciles à utiliser et incroyablement rapides? Ou comment vous pouvez étendre la STL avec n'importe quelle interface Itératrice, prenez une excellente utilisation d'algorithmes fournis par STL.


J'ai dit qu'ils vont bien, mais alors, en tant que bibliothèques de structure de données, envisagez STD :: Carte. Selon cette norme, ce n'est pas un arbre binaire équilibré noir noir, c'est une clé abstraite-> cartographie de données. Néanmoins, nous savons tous ce que c'est dans la pratique et nous comptons parfois sur ce fait en raison des fuites de l'abstraction. Donc, il ne devrait pas être difficile de bénéficier de la bibliothèque, mais d'ajouter des résumés supplémentaires à chaque noeud - par exemple. Autoriser la connexion à la journalisation des temps de temps. Dans les bibliothèques d'arbres binaires typiques, ce n'est pas une grosse affaire. Dans la bibliothèque standard C ++, il est impossible.


J'ai écrit une bibliothèque de conteneurs. Il est généralement plus facile d'utiliser que les conteneurs STL. Les "itérateurs" (je les appelle des curseurs) ne sont jamais invalidés par des insertions ou des supports de suppression et continuent de pointer sur le même article, même s'il a déplacé en mémoire. Et beaucoup de temps, il dépasse la STL puisqu'il utilise plus de structures de données favorables au cache (que vous n'avez pas besoin de savoir) que la STL. Il prend déjà en charge des inscriptions efficaces à l'aide de résumés supplémentaires par nœuds et, étant donné que la structure de données est une couche distincte du type de données abstraite frontal, vous pouvez l'étendre.


Je ne prétends pas que ma bibliothèque est supérieure aux conteneurs de la bibliothèque standard. Il a ses propres inconvénients ainsi que des avantages. Si vous n'aborquez pas beaucoup d'accès séquentiel et que vous faites beaucoup d'inserts et de suppression, la «maintenance du curseur» peut être une surcharge importante, par exemple. Le point est simplement qu'il n'ya aucune raison d'être dans la norme de la bibliothèque standard C ++. Ce n'est pas un travail des dieux. Si vous supposez que c'est parfait à tous points de vue, vous serez en refus lorsque vous avez besoin de quelque chose de différent. Si tout le monde était comme ça, eh bien - il n'y aurait pas de conteneurs intrusifs de boost pour un début.



14
votes

Quelle langue de niveau supérieur a la syntaxe la plus en forme de C - mais sans tout l'encombrement que vous trouvez dans quelque chose comme C ++?

Je vais répondre à une question légèrement différente:

Qu'est-ce qu'une langue qui est comme c dans la mesure où elle est bien conçue et joliment pensée, est comme C en ce que c'est bon pour la programmation des systèmes, permet aux personnes de programmer à un niveau plus élevé que c et est relativement épuré?

Je ne pense pas que cette question ait une seule bonne réponse, mais voici trois candidats dignes (par ordre alphabétique):


7 commentaires

Le plus gros avantage de Java - et franchement le plus gros problème - est également le nombre de bibliothèques disponibles pour celui qui fait très choses intéressantes. C'est bien parce que cela signifie qu'il y a généralement quelque chose pour vous aider à faire ce que vous voulez, et c'est mauvais parce que vous trouvez la bonne bibliothèque (et d'apprendre à l'utiliser, cependant, ce n'est pas strictement un problème de Java bien sûr) peut être vraiment difficile.


J'essaie d'essayer, ça a l'air très intéressant-d aussi beau aussi. Merci :)


@Donal: Bienvenue dans la malédiction de réutilisabilité: "Bonjour. Je suis Santa Clause et j'ai 1 milliard de composants dans mon sac, et vous pouvez avoir l'un d'entre eux. Allez-y et choisissez."


Java a également la question d'être à un niveau trop élevé à certains égards et trop bas dans d'autres, ce n'est pas compatible avec où il se trouve.


@RCIX n'est-il pas java et c # fondamentalement le même?


Nope, Java est un coup d'œil bon marché qui est venu avant :) Java a toutes sortes de règles étranges et de solutions de java (voir les génériques Java)


La collecte des ordures n'est pas bonne pour la programmation performante et au niveau des systèmes, qui est probablement le meilleur cas d'utilisation pour C. et Java offre un niveau de fouillis lourd en ce sens que cela oblige la mise en page de fichier et tout doit être racheté dans un format d'objet artificiel, tous deux dont obliger un programmateur de friction ne devrait jamais avoir à traiter. Je considère presque avec Java une blague de poisson d'avril ...