Miksi C vaikuttaa useisiin suosittuihin ohjelmointikieliin? [suljettu]

Kommentit

  • c: n kuten syntaksin käyttö ei ole sama kuin c: n perustaminen.
  • Lisäksi TIOBE on roskapostihakemisto.
  • Voinko pikemminkin kysyä, miksi C-pohjaiset ohjelmointikielet ovat suositumpia?
  • Koska C on ALGOLin jälkeläinen ja ALGOL on estettävä. välttämätön Labguages mitä Ab raham on tarkoitettu kristityille, juutalaisille ja muslimeille.
  • Lainauksesi PHP: stä ja Pythonista eivät ' t todellakaan sanoa ' vaikuttaa C: hen – ja vaikka PHP onkin, Python ei näytä olevan ' t.

Vastaa

UNIX: n noustessa 1970-luvulla sen vakio-ohjelmointikielestä C tuli nopeasti ohjelmointimaailman lingua franca . C oli jo jonkin aikaa käytännössä pakollinen jokaiselle ohjelmoijalle. Itse asiassa se, että C on vaikuttanut melkein kaikkiin sen jälkeen tulleisiin ohjelmointikieliin tavalla tai toisella, ei ole tuskin yllättävää, kahdesta syystä:

  • Uutta kieltä suunniteltaessa on järkevää perustaa syntaksinsa mahdollisuuksien mukaan suosittuun olemassa olevaan kieleen, jonka voidaan olettaa olevan yleinen tieto.
  • Uusi kieli onnistuu todennäköisemmin, jos oppimiskäyrä on matala, ja syntaksi, joka muistuttaa jo tunnettua kieltä on yleensä helpompi oppia (ellei se käyttäydy radikaalisti erilaisista näennäisistä samankaltaisuuksista huolimatta). Joten kielet, jotka lainavat syntaksia C: ltä, saavat yleensä vetovoiman nopeammin kuin kielet, jotka eivät t.

Mutta muita kieliä oli olemassa, ja niitä on edelleen, jotkut niistä jopa edeltävät C – siellä ” LISP-perhe (CL, Clojure ja Scheme ovat suosituimpia moderneja murteita), ML-perhe (useita moderneja murteita), ”koko BASIC-murteiden armeija (VB.NET ja VBA ovat nykyaikaisia toteutuksia), siellä” Pascal ja sen sukulaiset (Delphi on tunnetuin kieli) ja monet ”outoja” kieliä, jotka ottivat vaikutteita monilta muilta kieliltä ja keksivät muutaman itse; esimerkkejä ovat Go, Python, Lua, Haskell (ja edeltäjänsä Miranda), Prolog ja Erlang. Vaikka mikään näistä kielistä (paitsi Python) ei kuulu kymmenen parhaan joukkoon, monilla niistä on vakaa käyttäjäkunta ja aktiivinen yhteisö; ne eivät todellakaan katoa.

On myös huomattava, että C-vaikutuksen määrä näillä kielillä vaihtelee suuresti, vaihdellen lähes 100% C-yhteensopivista kielistä C ++ ja Objective-C, jopa Python (joka tarkoituksella hylkää monet C: n syntaksin ominaisuuksista). Ja se on vain syntaksia: semantiikan kannalta useimmilla luettelossa olevilla kielillä ei ole paljon yhteistä C: n kanssa. Ylivoimaisella enemmistöllä on kielen sisäänrakennettu muistinhallinta ja näin ollen kopiosemantiikka, argumenttien välittäminen, jne., ovat hyvin erilaisia. Esimerkiksi Javascriptilla on voimakkaat semanttiset vaikutukset Scheme-ohjelmasta, kun taas sen syntaksin on suunniteltu muistuttavan Javaa (joka puolestaan perustuu bittisynteesinsä C: hen, mutta ei sen semantiikkaan). Muita eroja (lukuun ottamatta C ++: ta ja Objective-C: tä, jotka ovat enimmäkseen yhteensopivia C: n kanssa) ovat virhekäsittely, laajuussäännöt, vakiokirjastot, ulkoisen koodin sisällyttäminen (#include), ja tosiasia, että monet näistä kielistä ovat ”virtualisoituja”, toisin sanoen, ne käyttävät tulkkia, JIT-kääntäjää tai virtuaalikonetta.

Pythonilla on muuten C-vaikutus, mutta se ei todellakaan ole ”perustuva” C: hen. Sekä syntakse että semantiikka eroavat melko radikaalisti C: stä, ja tämä on suunnitelmallisesti. Python lainaa ominaisuuksia vain C: ltä, jos muut vaihtoehdot ovat yhtä hyvät (kuten ”Pythonin Zen” – kirjoita import this python-tulkissa).

Ohjelmoinnin tulevaisuus ennusteet vaihtelevat. C: n vaikutus ei ole häviämässä, mutta viimeaikainen laitteistokehitys (moniydinkoneiden yleistyminen, tehokkaat GPU: t, CPU: n lakkaa olemasta tyypillinen suorituskyvyn pullonkaula, nopeat luotettavat verkkoyhteydet jne.) Edellyttävät radikaalisti erilaisia lähestymistapoja ohjelmointiin yleensä.Jokainen, joka on koskaan kirjoittanut monisäikeisen hajautetun sovelluksen välttämättömällä kielellä, voi kertoa, että se on uskomattoman vaikeaa, kun taas Haskellin kaltaisilla kielillä on ominaisuuksia, jotka poistavat suurimman osan tyypillisistä ongelmista ja tarjoavat abstraktimman ja jäsennellyn lähestymistavan hajautettuihin, samanaikaisiin ja rinnakkaisprosessointi (puhtaus on tärkeä käsite tässä yhteydessä). Uudemmissa ohjelmointikielissä (esim. C # tai D) on jo monia ominaisuuksia, jotka tukevat tällaista idiomia. Joka tapauksessa C: n voimakas vaikutus ohjelmointiin ei ole muut kuin C: n kaltaiset kielet poistuvat käytöstä.

Kommentit

  • Hyvä vastaus, mutta " CPU lakkaa olemasta tyypillinen suorituskyvyn pullonkaula "? Kokemukseni mukaan suorituskykyongelmia on runsaasti – CPU, IO, annat sen. Jos ei, profilointia ei tarvita, vaikka ne eivät olekaan erittäin tehokas.
  • @MikeDunlavey: Yleensä kohtaamani pullonkaulat johtuvat I / O, n etworking, CPU-välimuistin suorituskyky, väylän läpijuoksu ja (tehoton) prosessien välinen tiedonsiirto. Aikoina CPU oli melkein väistämättä pullonkaula; tämä ei ole enää totta.

t.

Vastaa

Tämä on paljon kuin kysyä, miksi englanti on hallitseva kieli Yhdysvalloissa. Miksi ei espanjaa tai ranskaa? He hallitsivat enemmän Yhdysvaltojen aluetta kuin englantilaiset siirtokunnat. Miksi ei hollantia? Ensimmäinen Yhdysvaltain pääkaupunki oli entisessä Hollannin siirtomassa. En ole varma, voiko tähän mahdollisesti olla ”vastaus”.

Kuitenkin Tietokonekielihistoria-aikajana ( http://www.levenez.com/lang/ ) tarjoaa kaiken mahdollisen vastauksen.

Kommentit

  • Koska Iso-Britannia vuodelta 1600 -1880 oli karkeasti maailman suurin teollisuuden ja talouden voimanpesä, jota seurasi Yhdysvallat vuodesta 1880 nykypäivään (< –debatable). Siitä tuli kansainvälisen liiketoiminnan kieli ja se on puhuu sujuvasti yli 2 miljardia ihmistä maailmanlaajuisesti. Kukaan ei halua puhua espanjaa tai hollantia 🙂
  • @maple_shaft – " kukaan ei halua puhua espanjaa "?! … tiedätkö edes kuinka monessa maassa sitä puhutaan? fi.wikipedia.org/wiki/Spanish_language
  • @ S.Lott: Tarkoitat sitä osaa, jossa Ison-Britannian imperiumi oli suurin koskaan olemassa oleva imperiumi ja joka miehitti 25% entistä ire world ' pinta? Tällainen " ei ole voimakas "?
  • @DeadMG: I ' m ei puhu maailmasta. ' Puhun Yhdysvalloista vuonna 1700 ' s, jossa ranskalaiset olivat brittiläiset laskeneet pienelle alueelle rannikolla. ' puhun vain siitä, että britit menettävät sotatoimintansa vain tässä teatterissa. Ranskalaiset hallitsivat selvästi suurimman osan siitä, mistä hänestä tuli USA. Vielä. Yhdysvallat lopetti englannin puhumisen. Ei ranskaa. Sama analyysi koskee C: tä. Se ' on monimutkainen historia, jossa on paljon vaikuttavia tekijöitä. Siellä ' ei ole triviaalia, pat vastaus.
  • @ S.Lott Ranskalaiset eivät voittaneet ' kohdata. Tarkasteltaessa Pohjois-Amerikkaa he voittivat enemmistön; mutta menetetty 4 viidestä NA: n suuresta taistelusta vuoden 1559/60 aikana johti musertavaan tappioon teatterissa. Forts Ticonderogan ja Niagaran kaappaukset, Abrahamin tasangot ja Restigouchen taistelu olivat kaikki Ison-Britannian voittoja. Katkaisemalla tarjonnan / vahvistamisen jälkimmäinen teki Ranskan voitosta Sainte-Foyssa merkityksetöntä.

Vastaa

Jos teet uuden ohjelmointikielen, jolla on samanlainen syntaksi kuin nykyisillä suosituilla kielillä, oppiminen helpottuu uusille käyttäjillesi. Varsinkin jos monet käsitteet ovat samanlaisia kielten välillä.

Uskon myös, että C-tyylinen syntaksia on suhteellisen helppo lukea. Verrattuna Pascaliin on, että symbolilohkojen ”{” ja ”}” käyttäminen koodilohkoissa on helpommin luettavissa kuin ”alku” ja ”loppu”, jotka ovat optisesti hyvin samanlaisia kuin tunnisteet. Python on vielä luettavampi, mutta tyhjätilan sisällyttäminen syntaksiin avaa uuden joukon ongelmia muokkauksessa. Toinen esimerkki: Lisp ja JavaScript jakavat muutaman idean, mutta kun sama asia kirjoitetaan C-tyylisessä syntaksissa, se on vähemmän hämärä.

Olen varma, että monet ihmiset eivät ole samaa mieltä toisen kappaleen kanssa, koska kaikki on oma suosikkikieli, mutta mielestäni C-tyylisen syntaksin suosio on osittain historiallinen sattuma, mutta osittain se osoittaa myös, että C: n kirjoittajat tekivät muutaman hyvän päätöksen.

vastaus

Ohjelmointikielet kehittyvät ajan myötä aivan kuten luonnolliset kielet, ja jotkut vanhemmat kielet vaikuttavat evoluutioon vahvemmin kuin toiset , kun taas toiset haalistuvat hämäryydeksi, ja niiden vaikutusta on vaikeampaa jäljittää pintatasolla eli syntaksilla.

C: n vaikutus tulee monista lähteistä – sen matala, laajalle levinnyt, tuki sekä Unixin että Microsoftin piireissä. Se on myös tärkeimmän ongelman selviytyminen – on helppo nähdä, että lyhyt C: n kaltainen syntaksilla oli enemmän vetovoimaa kuin Pascalin ja muiden C: n kilpailijoiden sanallinen Algolista peräisin oleva syntaksit 1970- ja 1980-luvuilla. Siksi sen jälkeen tulleet kielet omaksuivat sen laajalti.

Kun monisäikeisen ohjelmoinnin ja toiminnallisten kielten merkitys kasvaa erityisen hyvin sille, sanon, että heidän vaikutusvaltansa kasvaa tulevaisuus. Tapauskohde: Python, joka jopa teki kyseisen luettelon kysymysviestiin.

Mukava aikajananäkymä kielihistoriasta pohtittavaksi

Kommentit

  • Olet väärässä. Sekä PASCAL että C ovat ALGOL-jälkeläisiä.
  • Totta, mutta Algol itse on Fortranin jälkeläinen ja valitsi joitain niistä rakenteista, joihin viittasin (ohjelma, loppu, aliohjelma verrattuna c ' suluissa). Silti, mitä pidin mielessä, oli itse asiassa Algolin kaltainen syntakse. Muokattu.
  • lyhyt C: n kaltainen syntaksilla oli enemmän vetovoimaa kuin Pascalin ja muiden C: n kilpailijoiden Algolista johdetulla syntaksilla 70 ' s: ssä ja 80 ' s +1 tälle. aloita ohjelmoijat ovat myös ihmisiä loppu aloita ne, jotka uskoivat , että se ' on kätevää välimerkkien kartoittaminen sanoille kuten alku-loppu hävisi taistelun kiharoiden aaltosulkeista tarinan loppu
  • En näe todisteita että C-syntakse on vähemmän hämärä, paitsi siinä mielessä, että useimmat kehittäjät tuntevat C: n tai jonkinlaisen C: hen liittyvän kielen, joten se näyttää tutummalta. AFAICT, C voitti Pascalin rakenteensa vuoksi ja tosiasian, että toteutusten ei tarvinnut käyttää omaa linkitystä, ei syntaksia.
  • @ David- Muistan, että yksi syy siihen, miksi C voitti muut kielet, johtui C: n muistin (ts. Osoittimien) suhteellisesta saatavuudesta. Tiedän, että he ovat nyt hämmentyneitä, mutta silloin kun 1 kt RAM-muistia oli paljon muistia, se oli erittäin tehokas kielen ominaisuus. Tiedän, että muut kielet toimittivat osoittimen kaltaisia ominaisuuksia, mutta mikään niistä ei ole yhtä helppoa kuin C.

Vastaa

Suurin osa luetelluilla kielillä ei ole käytännössä mitään tekemistä C: n kanssa, lukuun ottamatta merkityksettömiä syntaktisia yhtäläisyyksiä. Ainoat kaksi todellista C-johdannaista ovat Objective-C ja C ++.

Kommentit

  • Jos emme harkitse syntaksia, kielien väliset ainoat erot ovat yleisten kielirakenteiden (silmukat, ehdolliset, muuttujat, näiden, kuten luokkien ja sulkemisten, abstraktit jne.) saatavuus ja että ne kaikki vastaavat koneen koodin käyttäytymistä. Kaikki matalan tason kielet ovat samanlaisia toistensa kanssa ja kaikki korkean tason kielet ovat erittäin samanlaisia toistensa suhteen.
  • Sinun ei pitäisi ' ajatella kieli sen toiminnallisuutena, mutta miten se kommunikoi sovelluskäyttäytymisestä. Lähdekoodisi on alin dokumentaation tasosi ja yksi kirjoittaa lähdekoodin ihmisille ja EI koneille . Jos kirjoittaisimme koodin tiukasti koneille, koodaisimme kaikki kokoonpanossa.
  • @maple_shaft: Aivan oikein! Minua pyydettiin haastattelussa selittämään konekielen (kokoonpanija) ja ohjelmointikielen välinen ero. Vastaukseni oli: " Konekieli on koneille, ohjelmointikieli ohjelmoijille. "
  • @maple_shaft: Syntaksi ei ole merkityksellinen sen ' viestinnän suhteen ihmisille . Jos korvaan englanninkielisen sanan eri kirjoitusasulla, englanti olisi silti sama kieli. Syntaktisella muodolla ei ole merkitystä, mikä ' on kommunikaatio kielisemantiikka.
  • @DeadMG: Mutta kysymys on noin syntaksista. Voit pitää syntaktisia yhtäläisyyksiä merkityksettöminä, mutta kysymyksen esittäjä haluaa tietää, miksi nämä merkityksettömät yhtäläisyydet ovat olemassa .

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *