Kiedy rano natknąłem się na G-WAN, przyglądałem się kilku różnym serwerom internetowym . Jak rozumiem, jest to serwer WWW napisany w C i musisz go wykorzystać, pisząc swoje strony internetowe / aplikacje w C. Jedną z wyraźnych korzyści jest szybkość, jak sugeruje witryna G-WAN.
Jednak na forach twórca G-WAN zapytał, dlaczego nie używać C do aplikacji internetowych i nie mogę wymyślić żadnego powodu poza tym, że jest to trudne (dla mnie zresztą jestem nowicjuszem, jeśli chodzi o C). Musi być więcej powodów, dla których wszyscy używamy PHP, Python, Ruby itp., Poza tym, że programowanie w tych językach jest łatwe. Nie uważam tego za dobry powód.
Więc powiem ci: dlaczego nie używasz C do swoich aplikacji internetowych?
php
c
web-applications
Abs
źródło
źródło
Odpowiedzi:
Poprawność i bezpieczeństwo programu w języku C wymaga wiele uwagi. Ta troska oznacza, że musisz mieć naprawdę dobrych ludzi piszących swoje programy. Oznacza to, że płacisz więcej.
Ponadto C nie ma korzyści z czerpania z ogromnej pojedynczej standardowej biblioteki funkcji, jaką ma .NET (i inne główne platformy internetowe). Być może będziesz musiał albo kupić komponenty, albo wykonać interop, albo rozwinąć własną funkcjonalność, która jest dostępna „za darmo” z innym, powiedzmy, językiem „webowym”, takim jak PHP, C #, Ruby lub cokolwiek innego. Oznacza to, że płacisz więcej.
Dodajmy to wszystko do faktu, że jednowątkowa prędkość obliczeniowa nie jest tak ważna w sieci. Jeśli potrzebujesz większej skalowalności, większość organizacji może po prostu rzucić więcej rdzeni na problem i wszystko będzie dobrze. Oczywiście nie dotyczy to wszystkich. Wyobrażam sobie, że rdzeń silnika Google jest napisany w C lub podobnym języku, nie tylko ze względu na szybkość, ale także w celu zaoszczędzenia realnych pieniędzy na kosztach energii.
źródło
Szum...
Wydaje się, że trochę się spóźniłem w tej dyskusji - ale właśnie to odkryłem. Jestem wam wszystkim wdzięczny za tak duży wkład.
Jestem autorem G-WAN, co daje jasno do zrozumienia, że poważnie nad tym pracowałem: G-WAN jest zarówno szybszy niż wszystkie inne serwery internetowe (bez przetwarzania) i wszystkie inne serwery aplikacji internetowych (dowolne przetwarzanie, jakie możesz sobie wyobrazić).
Tak, ANSI C umożliwiło również przetwarzanie bardziej statycznej zawartości - z mniej wydajnymi procesorami (ANSI C to nie tylko sprawianie, że dynamiczne treści są w ruchu).
Nawiasem mówiąc, G-WAN używa skryptów C (nie jest potrzebny kompilator C ani linker), więc cykl kompilacji / łączenia / opóźnienia nie istnieje.
Porównując G-WAN z .NET Java i PHP, napisałem podobne aplikacje we wszystkich 4 językach: http://gwan.ch/source/
Ku mojemu przerażeniu współczesne języki skryptowe nie były łatwiejsze w użyciu.
Jedną z części pracy, która jest szczególnie frustrująca, jest desperackie poszukiwanie „magicznego” wywołania API, które zrobi to, co chcesz.
Pomyśl, jak zrobić „ładne tysiące” w:
DO#
Jawa
PHP
ANSI C
„...” oznacza, że wymagana jest pewna konfiguracja wstępna lub przetwarzanie końcowe. ANSI C jest wyraźnie łatwiejszy w użyciu i do zapamiętania.
Kiedy PHP ma więcej niż 5900 wywołań API (C # i Java niedaleko), znalezienie odpowiedniego wywołania API jest wyzwaniem samym w sobie. Czas stracony, aby to znaleźć (a następnie przekonać się, jak źle zaimplementowano natywne wywołanie API), czas na naukę przez hart go następnym razem, gdy będziesz go potrzebować, cały ten czas pozbawia Cię czasu niezbędnego do rozwiązania Twojej aplikacji problemy.
Przeczytałem (powyżej), że PHP jest bardziej zwięzłe niż ANSI C? Dlaczego więc używać
"//:: this is a comment ::"
zamiast"// this is a comment"
? Skąd taka głupio złożona składnia „ładnych tysięcy”?Innym typowym argumentem jest to, że Java i tym podobne zapewniają dedykowane wywołania aplikacji internetowych.
Nie udało mi się znaleźć niczego, co pozwoliłoby uniknąć HTML w Javie, więc napisałem swoją wersję:
Czy naprawdę wierzysz, że ten sam kod w ANSI C byłby bardziej złożony? Nie, byłoby to znacznie prostsze i szybsze.
Java (wywodząca się z C) wymaga od programistów łączenia ciągów wieloliniowych za pomocą znaku „+”
C # (wywodzący się z C) wymaga od programistów łączenia ciągów wieloliniowych z
PHP „+” (pochodzącym z C) wymaga od programistów połączyć ciągi wieloliniowe znakiem „.”
ANSI C nie ma teraz tego całkowicie głupiego (przestarzałego) wymagania.
Czy zatem tak oczywisty postęp, jakiego domagają się języki nowożytne? Ciągle tego szukam.
Szczerze,
Pierre.
źródło
, amount)
, PHP działa tak, jak jest, a Twój przykład ANSI C wymaga dwóch dodatkowych argumentów (bufora i długości bufora). Z godnym uwagi wyjątkiem Javy, twój przykład wydaje się dowodzić czegoś przeciwnego. Ponadto nigdy wcześniej nie widziałem takiej//:: comment ::
składni; PHP z pewnością tego nie wymaga.Z tego samego powodu nie używamy języka C w większości programów. Korzyści (które są głównie wydajnością) nie przewyższają kosztów (czas rozwoju, brak automatycznego zarządzania pamięcią, brak automatycznej ochrony przed przepełnieniem bufora, etap kompilacji między etapami edycji i testowania itp.).
źródło
Większość aplikacji sieciowych, zwłaszcza serwery WWW, jest znacznie bardziej „związana z I / O” - tj. Są one w stanie wypompowywać dane znacznie szybciej niż sieć jest w stanie je zaakceptować. Dlatego coś, co jest wysoce wydajne pod względem procesora, nie jest wielką wygraną, podczas gdy coś, co jest skalowalne i łatwe w utrzymaniu, jest. Nie ma więc powodu, aby akceptować wady C i tracić zalety środowiska zarządzanego, takiego jak Java, .NET, Python, Perl lub inne języki.
źródło
C nie jest wygodnym językiem do manipulowania napisami.
Porównaj C #:
Odpowiadający C:
źródło
printf
powinny wykonać zadanie.Gdyby trudność i złożoność w ogóle nie były problemem (ha!), To nie poprzestałbym na C. napisałbym assemblację x86. Minęły lata, odkąd korzystałem z dowolnego serwera internetowego, który nie był x86 i każdego dnia wygląda to coraz rzadziej.
Używanie C (zamiast asemblacji lub czegoś wyższego poziomu) oznacza sugerowanie, że C jest najlepszym miejscem dla wydajności programisty i wydajności komputera.
W przypadku programów, które piszę, tak nie jest: C jest słabym dopasowaniem do rodzajów programów, które chcę pisać, a zalety tego w porównaniu z przyzwoitym asemblerem makr po prostu nie są tak znaczące. Program, który teraz piszę, nie jest trudny do wyboru w moim HLL, ale jego złożoność w asemblerze lub C byłaby tak duża, że nigdy nie zostałaby ukończona. Przyznaję, że wystarczająco sprytny programista z wystarczającą ilością czasu mógłby sprawić, że działałby szybciej w assemblerze lub C, ale nie jestem takim programistą.
źródło
źródło
eval
i phpinclude
? Proszę, w C / C ++ nie mówisz, że chcesz wykonać dowolny kod, po prostu to robi.eval
to nie jest błąd, to intencja programisty. W C / C ++ każdy błąd może prowadzić do zdalnego wykonania kodu, w językach dynamicznych tak nie jest, chyba że jakiś głupiec będzie się z tym bawićeval
.Wiem, że na to pytanie odpowiedziano już śmiertelnie, ale są dwie rzeczy, o których do tej pory nie wspomniano, a które są niezwykle ważne dla odniesienia sukcesu w każdym paradygmacie programowania, a zwłaszcza w tworzeniu stron internetowych, w których pojawia się wiele osób, które niekoniecznie są programistami, praca z kodem.
Gdybym miał krytyczną aplikację, która wymagałaby ekstremalnej wydajności, użyłbym C, ale pisanie zajęłoby znacznie więcej czasu, że nigdy nie trafiłbym na rynek. Dopóki nie pojawi się numer 1 lub 2, nie mogę go używać.
źródło
C to języki niskiego poziomu do wielu celów: brak OOP, dużo ręcznego zarządzania zasobami.
Istnieje ograniczone użycie języka C w sieci, na przykład Klone . Jest używany głównie w przypadku aplikacji osadzonych o niskich zasobach.
Istnieją jednak platformy internetowe C ++ , takie jak CppCMS, które są używane do tworzenia aplikacji internetowych o wysokiej wydajności.
C ++ pozwala cieszyć się wysoką abstrakcją i precyzyjnym dostępem do tego, co robisz, dając znacznie lepszą opcję wdrażania i tworzenia dużych aplikacji.
Ale używasz ich w przypadku, gdy wydajność i wykorzystanie zasobów jest znacznie bardziej krytyczne niż czas wprowadzenia na rynek i koszty rozwoju, ponieważ generalnie tworzenie stron internetowych jest szybsze przy użyciu dobrych struktur internetowych dla języków takich jak Java, Python lub PHP. Generalnie są też mniej kompetentni programiści dla języków C ++ niż Java / P * za to samo wynagrodzenie.
Jest to więc kwestia priorytetów, także mniej narzędzi do tworzenia stron internetowych C ++ niż PHP / Python / Perl lub Java.
źródło
@Joeri Sebrechts
FUD w akcji:
Właściwie nie. W ogóle nie skalują się w pionie i bardzo słabo skalują w poziomie. Zobacz: http://gwan.ch/en_scalability.html, gdzie jest wyjaśnione, jak wiele problemów wyprzedza osoby, które osiągają słabe wyniki.
Znowu źle. Jeśli biblioteki PHP zostały napisane w C, to można ich bezpośrednio używać z poziomu C - natychmiastowo zapewniając „wyjątkową produktywność”, którą, jak twierdzisz, posiada PHP.
Czysty FUD (patrz odpowiedź powyżej).
HipHop jest znacznie szybszy niż PHP, nie ma co do tego wątpliwości. Ale jeśli porównasz HipHop z implementacją w zwykłym C, masz dwie warstwy narzutu:
Ponadto HipHop został napisany w nieświadomym, nieefektywnym trybie akademickim (oderwanym od rzeczywistości). oczywiście, może zaimponować programistom PHP, ale pokaż ten kod wbudowanemu programistowi, a on będzie żałował Facebooka.
„Język, który nie ma wszystkiego, jest w rzeczywistości łatwiejszy do zaprogramowania niż niektóre, które mają” - Dennis M. Ritchie
Wygląda na to, że w przeciwieństwie do (większości) języków programowania UŻYTKOWNIKÓW KOŃCOWYCH, Dennis wiedział o tym kilka rzeczy.
źródło
To jest cały powód i jedyny potrzebny. Ma wiele zalet, z których najważniejszą jest czas wprowadzenia na rynek. Jeśli możesz udostępnić swoją aplikację internetową online w ciągu miesiąca przy użyciu PHP zamiast dwóch miesięcy przy użyciu języka C, możesz po prostu wygrać. Jeśli możesz dodać nową funkcję w tydzień używając Ruby on Rails zamiast dwóch tygodni używając C, znowu wygrywasz. Jeśli możesz naprawić błąd w jeden dzień w Pythonie zamiast dwóch dni w C, wygrywasz jeszcze raz. Jeśli możesz dodać funkcję, ponieważ używasz języka X, którego Twoi konkurenci w ogóle nie mogą dodać, ponieważ używają języka Y i jest to zbyt trudne w tym języku, biorąc pod uwagę ograniczenia zasobów, to zdecydowanie wygrywasz.
Przez „wygraną” mam na myśli , że nie przegrywasz. Twoi konkurenci używają języków i frameworków wyższego poziomu do tworzenia swoich witryn, więc jeśli używasz C, nie konkurujesz z innymi ludźmi, którzy używają C, przegrywasz z innymi ludźmi, którzy nie używają C. używać narzędzi o podobnym poziomie abstrakcji.
Jeśli wydajność stanie się problemem, możesz przepisać powolne części witryny w bardziej wydajnych językach. Lub możesz po prostu rzucić na to więcej sprzętu. Naprawdę, problem z wydajnością to coś, co nazywamy „fajnym problemem” - oznacza to, że już Ci się udało. Jednak spędzanie więcej czasu na rozwijaniu podstawowych funkcji witryny rzadko jest opcją. Napisanie go w C tylko po to, by działał szybciej, to przedwczesna optymalizacja, która, jak mówi nam Knuth, jest źródłem wszelkiego zła.
Wszystko to oznacza, że jeśli potrafisz używać języka o wyższym poziomie abstrakcji niż Python czy Ruby, możesz wygrać z ludźmi używającymi Pythona lub Rubiego. Pouczająca może być historia Paula Grahama o tym, jak on i jego zespół wykorzystali LISP jako „tajną broń” do tworzenia witryn internetowych. http://www.paulgraham.com/avg.html
Oczywiście, jeśli tworzysz witrynę dla własnej rozrywki, zrób to w dowolnym języku. A jeśli Twoja witryna jest związana z procesorem (prawie nie ma ich; zwykle są one związane z I / O), użyj najszybszego języka, jaki możesz. Jeśli jednak próbujesz wprowadzać innowacje, użyj języka wysokiego poziomu z najlepszymi abstrakcjami, jakie możesz znaleźć.
źródło
Myślisz, że bycie łatwym nie jest dobrym powodem. Myślę, że to dobry powód. Jeśli potrzebujesz najwyższej wydajności, C jest w porządku, ale inne języki odrywają trudne rzeczy, aby poprawić produktywność, łatwość konserwacji i zmniejszyć liczbę defektów.
źródło
Weź pod uwagę, że nie jestem programistą stron internetowych, ale i tak zadam te pytania i przedstawię kilka uwag.
Która witryna internetowa jest napisana tylko w jednym języku? Poważnie, ten wątek wydaje się zakładać, że jeden młotek pasuje do wszystkich gwoździ.
Kiedy ostatnio ktoś poważnie stwierdził, że C jest złożona? Mam na myśli naprawdę chłopaki, których nie można uzyskać dużo niższego poziomu. Nie mówię tutaj o C ++, ponieważ często odwołuje się do tych dwóch elementów.
C ma obawy związane z bezpieczeństwem, którym nie można zaprzeczyć, ale czy są one mniejsze niż to, co widać w kludges zwanych PHP i Perl? W każdym przypadku bezpieczna witryna internetowa jest funkcją dyscypliny programisty.
W każdym razie do komentarzy. Trudność korzystania z danego języka jest bardzo zależna od problemu. C, a zwłaszcza C ++, może prowadzić do szybkich rozwiązań problemu w doświadczonych rękach.
Przemysłowe zastosowania serwerów internetowych, czyli wbudowane serwery / witryny, po prostu nie mają takiego języka, jaki mógłby mieć normalny serwer sieciowy. W rezultacie używasz wariantu C lub prawdopodobnie czegoś takiego jak BASIC. Twoim celem jest zapewnienie funkcjonalności wymaganych przez urządzenie i nie martwienie się o języki. Na głównym serwerze internetowym można to zrobić przez większość czasu w językach wysokiego poziomu. Odejdź od wielkiego żelazka, a Twoja wolność programowania zniknie.
Bez odpowiednich bibliotek w większości przypadków głupotą byłoby wykonanie od podstaw projektu internetowego w języku C. Brak dobrych znormalizowanych bibliotek jest tutaj dużym minusem.
źródło
Oto trochę więcej kodu związanego z siecią napisanego w C, który warto przyjrzeć się podczas tworzenia własnej biblioteki C dla sieci:
źródło
Cóż, biorąc pod uwagę fakt, że tworzenie stron internetowych to kwestia posiadania przydatnych bibliotek (takich, jakich używa PHP), nie widzę, w jaki sposób C nie byłby przydatny.
W końcu logika proceduralna jest taka sama: zrób while, for, if then else, itd. Czy to jest C, PHP, .Net czy Perl.
A pętla C lub test nie jest trudniejszy do napisania, ponieważ jest napisany w C.
Większość bibliotek PHP jest tworzonych w języku C, więc argument brakujące-biblioteki-C-dla-sieci Web nie wygląda zbyt przekonująco.
Domyślam się, że C nie był reklamowany jako język programowania sieci Web przez promotorów Java (SUN) i .Net (MICROSOFT), ponieważ mieli oni własny zastrzeżony (mocno opatentowany) zasób intelektualny, który mógł naciskać na adopcję.
Jako darmowy (nieopatentowany) standard, C nie zapewnia programistom żadnej `` blokady '' ... stąd może ciężka ręka lobbowania w szkołach i na uniwersytetach, aby upewnić się, że pieniądze podatnika sfinansują przyjęcie gorsza technologia wspierana prywatnymi interesami.
Jeśli C jest wystarczająco dobre dla IBM i MICROSOFT (nie rozwijają swoich produktów w PHP lub .Net), ale nie jest wystarczająco dobre dla użytkowników końcowych, to użytkownicy końcowi mogą się zastanawiać, dlaczego są zachęcani do cierpienia na ten podwójny standard.
źródło
Użyłbym języka C do aplikacji internetowej, jeśli:
G-WAN uruchamia kod jako skrypty, tak skrypty C, takie jak Play! Framework działa dla Javy. G-WAN jest bardzo szybki i ma łatwy interfejs API. G-WAN umożliwia używanie C / C ++ do aplikacji internetowych, gdy inne serwery tego nie zrobiły.
Jedno jest jasne: do napisania strony internetowej w C potrzebny jest dobry programista, każdy kiepski programista może stworzyć witrynę ze spaghetti PHP :-) Są detektory wycieków, a nawet zbieracze śmieci dla C.
źródło
Wszystkie wspomniane języki są w rzeczywistości napisane w C / ++. Jedyną różnicą są zaawansowane klasy i biblioteki, które zostały utworzone z C, które tworzą obecnie te inne języki interpretera. Dlatego też nazywane są językami skryptowymi.
Pomyśl o tym jak o pieczeniu ciasta (PHP / JS):
Ale wyobraź sobie, że musisz stworzyć wszystkie elementy, z których składają się te rzeczy. (C / ++)
C jest podstawą wielu współczesnych języków. Jest to wspaniały i prawie najpotężniejszy język w montażu. Możesz to zrobić, wystarczy zainwestować w zbudowanie całego kodu, który już zrobiły te inne języki. Jak budowanie ciasta z układu okresowego pierwiastków.
Dowiedz się, że możesz dosłownie zrobić wszystko!
źródło
Obsługa strun w C może być łatwiejsza dzięki:
lub:
Zarządzana biblioteka ciągów (dla C)
http://www.cert.org/secure-coding/managedstring.html
źródło
„domachine” napisał:
Czy kiedykolwiek zastanawiałeś się, w jakim języku jest przenośny jest napisany interpreter PHP?
W ANSI C.
Tak więc, zanim ponownie odrzucisz przenośność ANSI C, zadaj sobie pytanie, w jakim języku został napisany twój ulubiony język programowania ... (wskazówka: prawie wszystkie zostały napisane w C / C ++).
Kompilatory ANSI C są dostępne na wszystkich platformach, na których pracowałem - ale to samo nie dotyczy PHP i jego gigantycznego środowiska wykonawczego.
Tyle jeśli chodzi o argument przenośności .
źródło
Podobny do G-WAN, ale dla Cocoa / Objective-C jest Bombax, framework aplikacji internetowych.
http://www.bombaxtic.com
Mówiąc o Objective-C, nie mogę się powstrzymać od wskazania MacRuby'ego, który może zrewolucjonizować sposób, w jaki pewnego dnia będziemy tworzyć aplikacje internetowe.
źródło
Inną kwestią może być zależność platformy. C musi zostać wkompilowane w kod natywny. Ten kod nie działa na wszystkich platformach.
Języki interpretowane działają wszędzie tam, gdzie jest tłumacz. Na przykład wielu dostawców zapewnia PHP-Interpreters zainstalowane na ich serwerach, ale z systemem operacyjnym Windows. Jeśli teraz tworzysz na komputerze z systemem Linux. Masz problem.
Oczywiście ten problem można rozwiązać, ale w tym konkretnym przypadku widzisz zalety programowania w PHP.
Mam nadzieję, że to pomoże, dotyczy domachine
źródło
PHP, Python i tak dalej można łatwo skalować, rzucając sprzęt w problem.
Załóżmy, że stworzenie aplikacji w PHP kosztuje 1 osobę 1 rok, a zrobienie tego w języku C kosztuje 3 lata (ponieważ C wymaga więcej wysiłku, aby zrobić to samo). Oznacza to, że zmniejszone zapotrzebowanie na sprzęt w kodzie C musi odpowiadać dwuletnim zarobkom, aby C stał się atrakcyjny. W praktyce to (prawie) nigdy się nie zdarza.
Jak w przypadku każdej reguły, jest wyjątek. Skala Facebooka jest tak duża, że sprzęt kosztuje wystarczająco dużo. Dlatego opracowali HipHop , który kompiluje krzyżowo PHP do C ++. Łączy to, co najlepsze z obu światów: prostotę programowania w PHP i surową wydajność C ++. Facebook jest nadal rozwijany w PHP, ale kiedy go używasz, to cały kod natywny.
źródło
W końcu możesz używać absolutnie dowolnego języka do tworzenia witryn, w tym asemblera (przez CGI itp.). Jeśli chodziło Ci o to, dlaczego nie użyjemy języka kompilowanego, cóż, mamy już .NET, Javę i inne.
źródło
Aby osiągnąć rezultaty, musisz kochać to, co robisz. Języki takie jak java i php zostały stworzone z dużym wysiłkiem, aby ułatwić ludziom życie. PHP szczególnie przyniosło dziś korzyści wielu samouczącym się programistom internetowym. Możesz zobaczyć, jakie wsparcie ma w świecie tworzenia stron internetowych.
Java iam z pewnością została napisana, aby pomóc Ci we wszystkim, co jest możliwe w dzisiejszym świecie. Ogromna książka jest wyraźną wskazówką i jest bestią, jeśli grasz również w tworzeniu stron internetowych. To samo dotyczy Pythona. Są to np. Fantastyczne języki i platformy. Nic dziwnego, że cieszą się ogromną popularnością.
Jestem wielbicielem języka C i częściowo wynika to z pewnych ograniczeń, które uniemożliwiły mi przyjrzenie się innym językom, takim jak php. Codziennie piszę w języku C i każdego dnia jestem dumny, że uczę się nowych rzeczy. To sprawia, że czuję się bardzo dobrze i zacząłem także uczyć się, jak C był domyślnym wyborem podczas pisania aplikacji na strony internetowe za pośrednictwem Cgi. Jest to abstrakcyjne na innych platformach, a kiedy tworzysz strony internetowe, które mają związek z bazami danych i usługami sieciowymi, musisz wiedzieć, co dzieje się za kulisami.
Jeśli jednak wiesz to wszystko i nadal chcesz używać języka skryptowego, musi istnieć ważny powód i nie potrzebujemy nikogo, kto by tego odradzał.
źródło