Mengapa Anda tidak menggunakan C untuk aplikasi web Anda?

101

Saya sedang melihat-lihat beberapa web server yang berbeda pagi ini ketika saya menemukan G-WAN . Seperti yang saya pahami, ini adalah server web yang ditulis dalam C dan Anda harus memanfaatkannya dengan menulis situs web / aplikasi web Anda dalam C. Satu manfaat yang jelas adalah kecepatan seperti yang disarankan situs G-WAN.

Namun, di forum, pencipta G-WAN bertanya mengapa tidak menggunakan C untuk aplikasi berbasis web dan saya tidak dapat memikirkan satu alasan pun selain itu sulit (bagi saya, saya pemula dalam hal C). Pasti ada lebih banyak alasan mengapa kita semua menggunakan PHP, Python, Ruby dll selain karena mudah dikembangkan dalam bahasa-bahasa ini. Saya tidak melihat itu sebagai alasan yang bagus.

Jadi saya katakan kepada Anda: Mengapa Anda tidak menggunakan C untuk aplikasi web Anda?

Abs
sumber
34
Mengapa kita menggunakan kompor dan tidak memasak makanan kita langsung dengan api? Mengapa kita menggunakan mobil meskipun berjalan atau menggunakan sepeda jauh lebih sehat? Mengapa ... Saya bisa melanjutkan ...
Felix Kling
16
@Felix - seperti yang saya katakan, sebutkan alasan lain selain karena sulit. Yang menyiratkan saya sadar bahwa bahasa lain ada untuk kesulitan abstrak.
Abs
15
Tidak pernah benar-benar menganggap C sulit.
Menyelamatkan
10
@David Lively Jika Anda gagal menempatkan 'c' dengan sengaja, itu benar-benar lucu. Bagus :)
punkrockbuddyholly
11
@MrMisterMan hanya butuh waktu empat bulan untuk menemukan yang satu itu. =)
Selamatkan

Jawaban:

79

Dibutuhkan banyak kehati-hatian untuk mendapatkan program C yang benar dan aman. Perhatian itu berarti Anda harus memiliki orang yang sangat baik yang menulis program Anda. Itu berarti Anda membayar lebih.

Selain itu, C tidak memiliki keuntungan menggambar dari pustaka fungsionalitas standar tunggal yang sangat besar seperti yang dimiliki .NET (dan platform web-sentris utama lainnya). Jadi Anda mungkin harus membeli komponen, atau melakukan interop, atau menggulung fungsionalitas Anda sendiri yang datang "gratis" dengan lebih banyak, haruskah kita mengatakan bahasa "web-sentris" seperti PHP atau C # atau Ruby atau apa pun. Itu berarti Anda membayar lebih.

Tambahkan semua itu pada fakta bahwa kecepatan komputasi single-threaded tidaklah begitu penting di web. Jika Anda membutuhkan lebih banyak skalabilitas, sebagian besar organisasi secara ekonomis dapat memberikan lebih banyak inti pada masalah dan baik-baik saja. Ini tidak berlaku untuk semua orang, tentu saja. Saya membayangkan bahwa inti mesin Google ditulis dalam C atau bahasa serupa tidak hanya untuk kecepatan, tetapi untuk menghemat uang nyata dalam biaya listrik.

Dave Markle
sumber
48
Wow, argumen untuk .NET melawan C karena perpustakaan ? Tentu, stdlib lebih kecil, tetapi kami memiliki puluhan pustaka (banyak sumber terbuka) di C. Saya mengalami kesulitan memikirkan apa pun di stdlib .NET yang tidak memiliki pustaka C yang matang dan gratis.
Ken
3
Saya tidak berpikir dia memperdebatkan .NET secara khusus, saya pikir dia hanya bermaksud ada bahasa di luar sana yang memiliki banyak perpustakaan kohesif. Saya yakin C memiliki banyak tetapi jujur ​​saya belum menemukan repo apa pun yang mengumpulkan semuanya di satu tempat atau mengemasnya.
Abs
16
Manipulasi String @Ken adalah tugas aplikasi web yang sangat umum. Perpustakaan C ada untuk itu, tetapi mereka tidak sebanyak atau dapat digunakan seperti perpustakaan di [pilih bahasa tingkat tinggi].
Andres Jaan Tack
23
@Ken: Ada perbedaan besar ketika Anda memiliki satu set fungsionalitas yang didukung dengan baik vs sejumlah besar perpustakaan kecil yang sangat berbeda dalam set fitur, lisensi, dan dukungan.
Dave Markle
49

Bersenandung...

Sepertinya saya agak terlambat dalam diskusi ini - tetapi saya baru menemukannya sekarang. Dan saya berterima kasih kepada kalian semua atas masukan yang begitu banyak.

Saya penulis G-WAN, yang menjelaskan bahwa saya telah serius menangani masalah ini: G-WAN lebih cepat daripada semua Server Web lainnya (tanpa pemrosesan) dan semua Server Aplikasi Web lainnya (pemrosesan apa pun yang dapat Anda bayangkan).

Ya, ANSI C juga memungkinkan untuk memproses lebih banyak konten statis - dengan CPU yang kurang kuat (ANSI C tidak hanya tentang membuat konten dinamis terbang).

Omong-omong, G-WAN menggunakan skrip C (tidak diperlukan compiler dan linker C) sehingga siklus / penundaan kompilasi / penautan tidak ada.

Dalam proses membandingkan G-WAN dengan .NET Java dan PHP, saya menulis aplikasi serupa dalam 4 bahasa: http://gwan.ch/source/

Dan, yang membuat saya kaget, bahasa skrip modern tidak lebih mudah digunakan.

Salah satu bagian dari pekerjaan yang sangat membuat frustrasi adalah mencari dengan putus asa panggilan API 'ajaib' yang akan melakukan apa yang ingin Anda lakukan.

Pikirkan tentang bagaimana melakukan 'ribuan cantik' dalam:

C #

String.Format("{0:n}"...

Jawa

new DecimalFormat("0.00"); ...

PHP

number_format($amount, 2); ...

ANSI C

sprintf("%'.2f", amount);

"..." berarti bahwa beberapa konfigurasi awal, atau pemrosesan pasca, diperlukan. ANSI C jelas lebih mudah digunakan dan diingat.

Ketika PHP memiliki lebih dari 5.900 panggilan API (C # dan Java tidak jauh dari sana), menemukan panggilan API yang tepat merupakan tantangan tersendiri. Waktu yang terbuang untuk menemukan ini (dan kemudian untuk menemukan seberapa buruk penerapan panggilan API asli ), waktu untuk mempelajarinya untuk saat berikutnya Anda membutuhkannya, selama ini membuat Anda kehilangan waktu yang diperlukan untuk menyelesaikan aplikasi Anda masalah.

Saya telah membaca (di atas) bahwa PHP lebih ringkas daripada ANSI C? Lalu mengapa menggunakan "//:: this is a comment ::"daripada"// this is a comment" ? Mengapa memiliki sintaks 'cukup ribuan' yang begitu rumit?

Argumen umum lainnya adalah bahwa Java dan sejenisnya menyediakan panggilan khusus untuk aplikasi Web.

Saya tidak dapat menemukan apa pun untuk menghindari HTML di Java, jadi saya menulis versi saya:

  // all litteral strings provided by a client must be escaped this way
  // if you inject them into an HTML page
  public static String escape_html(String Name) {
      int len = Name.length();
      StringBuffer sb = new StringBuffer(len);
      boolean lastWasBlankChar = false;
      int c;

      for(int i=0; i<len; i++) {
          c = Name.charAt(i);
          if(c == ' ')  sb.append("&#32;");  else
          if(c == '"')  sb.append("&quot;"); else
          if(c == '&')  sb.append("&amp;");  else
          if(c == '<')  sb.append("&lt;");   else
          if(c == '>')  sb.append("&gt;");   else
          if(c == '\n') sb.append("&lt;br/&gt;"); else {
             c = c&0xffff; // unicode
             if(c < 32 || c > 127) {
                sb.append("&#");
                sb.append(new Integer(c).toString());
                sb.append(';');
             } else
                sb.append(c);
          }
      }
      return sb.toString();
      //szName = sb.toString();
  }

Apakah Anda yakin bahwa kode yang sama di ANSI C akan lebih kompleks? Tidak, itu akan jauh lebih sederhana dan lebih cepat.

Java (berasal dari C) mengharuskan programmer untuk menghubungkan string multi-baris dengan '+'
C # (berasal dari C) mengharuskan programmer untuk menghubungkan string multi-baris dengan '+'
PHP (berasal dari C) mengharuskan programmer untuk hubungkan string multi-baris dengan '.'

ANSI C tidak memiliki persyaratan yang sekarang sepenuhnya bodoh (usang).

Jadi, apakah kemajuan yang begitu nyata diklaim oleh bahasa modern? Saya masih mencarinya.

Hormat kami,

Pierre.

Pierre
sumber
10
Saya tidak begitu mengerti komentar Anda tentang pemrosesan ekstra ribuan; untuk C # yang Anda tinggalkan , amount), PHP tidak masalah apa adanya, dan contoh ANSI C Anda membutuhkan dua argumen lagi (panjang buffer dan buffer). Dengan pengecualian khusus pada Java, contoh Anda tampaknya membuktikan hal yang sebaliknya. Selain itu, saya belum pernah melihat //:: comment ::sintaks itu sebelumnya; PHP tentu tidak membutuhkannya.
icktoofay
1
Sejujurnya, semua opsi lain terlihat jauh lebih bagus daripada ANSI C, yang, "jelas lebih mudah digunakan dan diingat" [sic].
Jarrod Mosen
Bagaimana G-WAN dibandingkan dengan NGINX jika keduanya ditulis dalam C?
m4l490n
47

Alasan yang sama kami tidak menggunakan C untuk sebagian besar pemrograman. Manfaatnya (yang sebagian besar adalah kinerja) tidak melebihi biayanya (waktu pengembangan, kurangnya manajemen memori otomatis, kurangnya perlindungan otomatis dari buffer overflow, memiliki tahap kompilasi antara tahap edit dan pengujian, dll).

Quentin
sumber
10
Mengetik hal yang sama dan Anda mengalahkan saya untuk itu. Saya hanya ingin menambahkan bahwa melindungi situs web dari perilaku jahat sudah cukup sulit, kita tidak perlu menambahkan vektor serangan potensial dari penyalahgunaan manajemen memori, pointer, dll.
Rob Allen
@ Jordan: Saya merasa Anda belum melakukan pemrograman web di C. Apa yang Anda katakan tidak sesuai dengan model bagaimana pemrograman web dilakukan.
2
Tentu saja, dengan asumsi bahwa situs web Anda memiliki tempat untuk interaksi pengguna, baik melalui URL atau masukan formulir. Setelah data tersebut diserahkan ke server, terserah programmer untuk memastikan mengalokasikan memori dengan benar. G-WAN memiliki beberapa abstraksi seputar parameter kueri tetapi itu tidak akan sepenuhnya menyelamatkan Anda. Saya tidak mengatakan bahwa dilakukan dengan benar, pemrograman web C tidak dapat aman dan cepat, tetapi lebih rentan terhadap kesalahan yang lebih parah.
Jordan
3
mendesah @Kinopiko: Jika Anda tidak tahu apa buffer overflow adalah, Anda tidak harus coding di C. 'nuff said. Untuk info lebih lanjut: securecoding.cert.org/confluence/display/seccode/…
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
29

Sebagian besar aplikasi jaringan, terutama server web, jauh lebih "terikat I / O" - yaitu mereka mampu memompa keluar data jauh lebih cepat daripada yang dapat diterima jaringan. Oleh karena itu, sesuatu yang sangat efisien CPU bukanlah kemenangan besar, sedangkan sesuatu yang dapat diskalakan dan dipelihara. Jadi tidak ada alasan untuk menerima kekurangan C dan kehilangan keuntungan dari lingkungan yang dikelola seperti Java, .NET, Python, Perl atau bahasa lainnya.

Paul Tomblin
sumber
1
C ton lebih cepat.
14
Jika saya dapat mengisi pipa jaringan dengan Java atau Perl (dan saya bisa), fakta bahwa C lebih cepat tidak relevan.
Paul Tomblin
1
@Kinopiko, apakah Anda mengatakan Anda memiliki pipa yang lebih besar, lebih banyak klik halaman dan lebih banyak data untuk dikirim daripada eBay (Java), Stack Overflow (C # /. NET), Google atau salah satu dari jutaan situs web yang sangat digunakan yang ditulis dalam bahasa tingkat tinggi ?
Paul Tomblin
1
@Paul Tomblin: Tujuan dari aplikasi web bukanlah untuk mengisi pipa jaringan tetapi untuk melakukan beberapa pemrosesan. Jika Anda hanya perlu menyajikan beberapa teks dan gambar, Anda harus menggunakan halaman html statis, yang memberikan kinerja yang unggul. Dalam kebanyakan kasus, halaman statis disajikan dari cache, jadi server Anda tidak perlu melakukan apa pun. OTOH, ketika pemrosesan diperlukan, ini mungkin menjadi penghambat (meskipun lebih umum disk menjadi penghambat).
PauliL
4
Anda perlu mengingat bahwa aplikasi web hanyalah sebagian kecil dari "tumpukan server" yang menangani permintaan pengguna, dan bukan bagian yang penting untuk kinerja. Ada bagian lain - kernel OS (biasanya ditulis dalam C), sistem file (C), server web (biasanya C), juru bahasa (C), database (biasanya C atau C ++). Aplikasi web biasanya hanya melewatkan data dari satu bagian ke bagian lain, menerapkan beberapa operasi dasar di atasnya, dan kinerjanya tidak penting sama sekali.
el.pescado
15

C bukanlah bahasa yang nyaman untuk memanipulasi string.

Bandingkan C #:

string foo = "foo";
string bar = "bar";
string foobar = foo + bar;

Sesuai C:

const char* foo = "foo";
const char* bar = "bar";
char* foobar = (char*)malloc(strlen(foo)+strlen(bar)+1);
strcpy(foobar, foo);
strcat(foobar, foo);
//todo: worry about when/where the foobar memory
//which was allocated by malloc will be freed
ChrisW
sumber
4
PHP tidak menangani Unicode dengan baik, tetapi merupakan bahasa berorientasi Web yang sangat populer.
el.pescado
12
Jadi kita harus menggunakan C ++, karena kinerjanya hampir sama dengan C, tetapi mengkompilasi contoh C # Anda seperti pesona?
tstenner
2
Pada manipulasi string - aplikasi web biasanya hanya mengeluarkan string, jadi C printfharus melakukan pekerjaan itu.
el.pescado
5
C menangani multibyte dan unicode dengan baik melalui fungsi pustaka runtime. Menggunakan fungsi aman seperti strncpy dan sebagainya membuatnya cukup aman juga.
justinhj
2
Atau Anda dapat menggunakan asprintf (& foobar, "% s% s", foo, bar);
Patrick Lorio
11

Jika kesulitan dan kompleksitas bukanlah masalah sama sekali (ha!), Maka saya tidak akan berhenti di C. Saya akan menulis perakitan x86. Sudah bertahun-tahun sejak saya menggunakan server web apa pun yang bukan x86, dan sepertinya semakin kecil kemungkinannya setiap hari.

Menggunakan C (daripada perakitan, atau sesuatu yang lebih tinggi levelnya) menunjukkan bahwa C adalah sweet spot efisiensi programmer dan efisiensi komputer.

Untuk program yang saya tulis, hal ini tidak terjadi: C tidak cocok dengan jenis program yang ingin saya tulis, dan keuntungannya dibandingkan dengan macro assembler yang layak tidak terlalu signifikan. Program yang saya tulis saat ini tidak sulit dalam HLL pilihan saya, tetapi kerumitannya baik dalam assembly maupun C akan sangat tinggi sehingga tidak akan pernah selesai. Saya mengakui bahwa programmer yang cukup pintar dengan waktu yang cukup dapat membuatnya berjalan lebih cepat dalam perakitan atau C, tetapi saya bukan programmer itu.

Ken
sumber
7
  • itu tidak aman
  • itu sulit untuk dibaca
  • sulit untuk dipertahankan, waktu pengembangan lebih lambat pada urutan besarnya
  • sebagian besar barang web Anda mungkin terikat I / O, jadi percepatan tidak masalah, terutama bila Anda menggunakan bahasa cepat seperti Java atau C #
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
sumber
2
apa artinya "bahasa cepat seperti Java atau C #"?
RobS
3
@Kinopiko: kelemahan apa yang dimiliki bahasa dinamis? Ketika seorang programmer noob secara eksplisit mengatakan dia ingin mengeksekusi kode arbitrer melalui evaldan php include? Tolong, di C / C ++ Anda tidak menyatakan bahwa Anda ingin mengeksekusi kode arbitrer, itu hanya dilakukan. evalbukan bug, itu maksud programmer. Di C / C ++, bug apa pun dapat menyebabkan eksekusi kode jarak jauh, dalam bahasa dinamis, ini tidak terjadi kecuali beberapa orang bodoh mengotak-atik eval.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
1
"dan secepat atau lebih cepat dari C / C ++ tergantung pada apa yang Anda lakukan" mungkin, tetapi Anda masih berurusan dengan lingkungan memori terkelola dengan Java dan C # yang dapat menjadi kelemahan yang cukup besar dalam skenario lalu lintas tinggi.
RobS
5
"dan C tentu saja tidak memiliki banyak kelemahan keamanan seperti bahasa dinamis mana pun." Itu , sobat, benar-benar tidak masuk akal. Mengapa komentar itu memiliki 3 suara positif?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
2
@Kinopiko: Sebenarnya, Anda tidak bisa menjelaskannya di mana pun. Tidak ada penjelasan untuk itu. C memiliki masalah yang jauh lebih besar daripada bahasa dinamis mana pun. Hal buruk yang bisa terjadi dalam bahasa dinamis adalah "atribut tidak ditemukan, teriakan dee doo".
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
7

Saya tahu pertanyaan ini telah dijawab sampai mati, tetapi sejauh ini ada 2 hal yang tidak disebutkan yang sangat penting untuk sukses dalam paradigma pemrograman apa pun, dan terutama dalam pengembangan web di mana Anda mendapatkan banyak orang yang belum tentu programmer, bekerja dengan kode.

  1. Komunitas yang terlibat dan bermanfaat, alias Orang yang Telah Memecahkan Masalah Saya. Sangat mudah bahkan bagi pemula noob ke Google mengapa mereka mendapatkan kesalahan "header sudah terkirim" dalam PHP, sedangkan informasi itu mungkin tidak tersedia untuk kerangka kerja atau bahasa yang baru di tempat itu, atau sebaliknya tidak memiliki massa kritis.
  2. Kerangka kerja, sehingga sebagian besar pemrogram dapat menyelesaikan masalah bisnis dan tidak meretas kode bersama-sama.

Jika saya memiliki aplikasi penting yang membutuhkan kinerja ekstrem, saya akan menggunakan C, tetapi akan memakan waktu lebih lama untuk menulis, sehingga saya tidak akan pernah bisa memasarkannya. Sampai ada yang # 1 atau # 2 itu tidak layak bagi saya untuk menggunakannya.

Yordania
sumber
6

C adalah bahasa tingkat rendah untuk banyak tujuan: tanpa OOP, banyak manajemen sumber daya manual.

Penggunaan C untuk web terbatas, misalnya Klone . Ini sebagian besar digunakan untuk kasus aplikasi tertanam sumber daya rendah.

Namun ada kerangka web C ++ seperti CppCMS yang digunakan untuk pengembangan aplikasi web berkinerja tinggi.

C ++ memungkinkan Anda menikmati abstraksi tinggi dan akses halus ke apa yang Anda lakukan, memberikan opsi yang jauh lebih baik untuk menerapkan dan mengembangkan aplikasi besar.

Tetapi Anda menggunakannya jika kinerja dan penggunaan sumber daya jauh lebih penting daripada waktu ke pasar dan biaya pengembangan karena umumnya pengembangan web lebih cepat menggunakan kerangka kerja web yang baik untuk bahasa seperti Java, Python, atau PHP. Juga umumnya ada programmer yang kurang kompeten untuk C ++ kemudian bahasa Java / P * dengan gaji yang sama.

Jadi ini pertanyaan tentang prioritas, juga ada lebih sedikit alat untuk pengembangan Web C ++ lalu untuk PHP / Python / Perl atau Java.

Artyom
sumber
2
Menarik, saya tidak tahu tentang CppCMS, kerangka kerja web tingkat rendah yang ditulis dalam C ++. Mungkin yang terbaik dari kedua dunia, berada di antara C dan Bahasa Web.
Abs
Sekarang kerangka kerja tingkat rendah, kerangka kerja web MVC yang sangat CEPAT.
Artyom
Maaf, saya hanya merujuk pada apa pun yang bukan bahasa web tingkat rendah. Saya mengerti meskipun kerangka kerja web MVC.
Abs
Tidak ada yang namanya "Bahasa Web", mungkin hanya PHP yang bisa disebut web satu. Semua bahasa lain termasuk Java, Python, Perl, Ruby dan C # adalah bahasa tujuan umum yang digunakan untuk Web.
Artyom
1
Nah jika kita ingin spesifik seperti itu tidak ada yang namanya bahasa pemrograman tujuan umum. Hanya ada Prosedural, Terstruktur, Berorientasi Objek, Fungsional ... dll ...
Abs
5

@Bayu_joo

FUD beraksi:

PHP, Python, dan sebagainya mudah untuk ditingkatkan dengan membuang perangkat keras pada masalahnya.

Sebenarnya tidak. Mereka tidak menskalakan sama sekali secara vertikal dan menskalakan sangat buruk secara horizontal. Lihat: http://gwan.ch/en_scalability.html di mana dijelaskan berapa banyak masalah yang dihadapi orang-orang yang berkinerja buruk.

Misalkan diperlukan upaya 1 orang 1 tahun untuk mengembangkan aplikasi di PHP, dan biaya 3 tahun untuk melakukannya di C (karena C memerlukan lebih banyak upaya untuk melakukan hal yang sama).

Salah lagi. Jika pustaka PHP telah ditulis dalam C maka mereka dapat langsung digunakan dari C -secara langsung memberikan 'produktivitas unik' yang Anda klaim dimiliki PHP.

Itu berarti kebutuhan perangkat keras yang berkurang dari kode C harus mewakili gaji 2 tahun agar C menjadi menarik. Dalam prakteknya itu (hampir) tidak pernah terjadi.

FUD murni (lihat jawaban di atas).

Skala Facebook begitu besar sehingga perangkat keras membutuhkan biaya perawatan yang cukup besar. Itulah mengapa mereka mengembangkan HipHop, yang mengkompilasi silang PHP ke C ++. Ini menghadirkan yang terbaik dari kedua dunia: kesederhanaan pemrograman dalam PHP, dan kinerja mentah C ++. Facebook masih dikembangkan dalam PHP, tetapi ketika Anda menggunakannya, itu semua adalah kode asli.

HipHop jauh lebih cepat dari PHP, tidak diragukan lagi. Tetapi jika Anda membandingkan HipHop dengan implementasi biasa-C, Anda memiliki dua lapisan overhead:

  • antarmuka PHP ke C ++ (yang menggunakan pustaka C ++ yang membengkak);
  • C ++ menggembungkan itu sendiri (yang membuat C ++ 2-10 kali lebih lambat dari C biasa).

Plus, HipHop telah ditulis dalam mode Akademik yang tidak efisien dan tidak mengerti (terlepas dari kenyataan dunia nyata). tentu saja, ini dapat mengesankan pembuat kode PHP tetapi menunjukkan kode ini ke programmer yang tertanam dan dia akan merasa kasihan pada Facebook.

"Bahasa yang tidak memiliki segalanya sebenarnya lebih mudah untuk diprogram daripada beberapa yang memiliki" --Dennis M. Ritchie

Tidak seperti (kebanyakan) bahasa pemrograman PENGGUNA AKHIR, Dennis tahu beberapa hal tentang masalah ini, tampaknya.

Pierre
sumber
3
(1) Jangan terlalu tersinggung, saya tidak bermaksud meremehkan produk Anda karena saya bahkan tidak tahu produk Anda. (2) Anda membuat bukti konsep yang menarik dengan G-wan, tapi saya harap Anda memaafkan saya jika saya menunggu dan melihat pendekatan sampai saya melihat aplikasi web dunia nyata menggunakannya, dan bukan hanya beberapa tolok ukur sintetis. (3) Anda salah mengartikan keluhan facebook tentang penskalaan horizontal, karena masalah mereka adalah dengan memcache dan kinerja multi-core database, penghambat aplikasi web dunia nyata, yang tidak dapat diselesaikan oleh G-wan. (4) HipHop menyambut baik kontribusi kode Anda, saya yakin.
Joeri Sebrechts
1
Berbicara tentang masalah produktivitas. Saya telah menulis aplikasi web di C sebelumnya, beberapa bulan yang lalu, dan pada saat itu membutuhkan lebih banyak baris untuk melakukan hal yang sama daripada PHP, sementara memiliki risiko crash / kebocoran bug yang jauh lebih besar. (Saya hanya "rata-rata" pada bug semacam itu, artinya saya menulisnya sesekali.) Saya mendasarkan penilaian saya pada pengalaman itu sampai saya melihat aplikasi nyata yang menunjukkan sebaliknya (misalnya, port wordpress ke C yang tidak membutuhkan lebih banyak baris kode).
Joeri Sebrechts
Bagaimana sesuatu yang "tidak berskala vertikal"? Apakah maksud Anda itu tidak mendapat manfaat dari kinerja inti tunggal yang lebih cepat dan kinerja memori yang lebih cepat?
rakslice
5

Pasti ada lebih banyak alasan mengapa kita semua menggunakan PHP, Python, Ruby dll selain karena mudah dikembangkan dalam bahasa-bahasa ini

Ini adalah alasan keseluruhan dan satu-satunya yang dibutuhkan. Ini memiliki banyak manfaat, yang utamanya adalah waktu untuk memasarkan. Jika Anda bisa mendapatkan aplikasi Web Anda online dalam sebulan menggunakan PHP daripada dua bulan menggunakan C, Anda mungkin menang. Jika Anda dapat menambahkan fitur baru dalam seminggu menggunakan Ruby on Rails daripada dua minggu menggunakan C, sekali lagi Anda menang. Jika Anda dapat memperbaiki bug dalam sehari menggunakan Python daripada dua hari menggunakan C, Anda menang sekali lagi. Jika Anda dapat menambahkan fitur karena Anda menggunakan bahasa X yang tidak dapat ditambahkan pesaing Anda sama sekali karena mereka menggunakan bahasa Y dan terlalu sulit dalam bahasa tersebut karena keterbatasan sumber daya, maka Anda pasti menang.

Dan dengan "menang" yang saya maksudkan adalah Anda tidak kalah. Pesaing Anda menggunakan bahasa dan kerangka kerja tingkat tinggi untuk mengembangkan situs mereka, jadi jika Anda menggunakan C, Anda tidak bersaing dengan orang lain yang menggunakan C, Anda kalah melawan orang lain yang tidak menggunakan C. Hanya untuk bersaing, Anda harus untuk menggunakan alat dengan tingkat abstraksi yang serupa.

Jika kinerja menjadi masalah, Anda dapat menulis ulang bagian lambat situs Anda dalam bahasa yang berkinerja lebih baik. Atau Anda bisa melempar lebih banyak perangkat keras padanya. Sungguh, masalah kinerja adalah apa yang kita sebut "masalah bagus untuk dimiliki" - artinya Anda sudah berhasil. Tetapi menghabiskan lebih banyak waktu untuk mengembangkan fungsionalitas dasar situs Anda jarang menjadi pilihan. Menuliskannya dalam C agar berjalan lebih cepat adalah pengoptimalan prematur, yang, seperti yang dikatakan Knuth, adalah akar dari semua kejahatan.

Semua ini menyiratkan bahwa jika Anda dapat menggunakan bahasa dengan tingkat abstraksi yang lebih tinggi daripada Python atau Ruby, Anda dapat menang melawan orang-orang yang menggunakan Python atau Ruby. Kisah Paul Graham tentang bagaimana dia dan timnya menggunakan LISP sebagai "senjata rahasia" dalam mengembangkan situs Web mungkin bermanfaat. http://www.paulgraham.com/avg.html

Tentu saja, jika Anda mengembangkan situs untuk hiburan Anda sendiri, lakukanlah dalam bahasa apa pun yang Anda inginkan. Dan jika situs Anda terikat dengan CPU (hampir tidak ada; mereka biasanya terikat I / O) maka gunakan bahasa dengan kinerja tercepat yang Anda bisa. Namun, jika Anda mencoba berinovasi, gunakan bahasa tingkat tinggi dengan abstraksi terbaik yang dapat Anda temukan.

kindall
sumber
Anda lupa bahwa bit pemrosesan pesanan volume tinggi melalui web ditulis dalam C. Lihat catatan di bagian bawah paulgraham.com/avg.html .
Giles Roberts
4

Anda pikir menjadi mudah bukanlah alasan yang baik. Saya pikir itu alasan yang bagus. Jika Anda membutuhkan performa terbaik maka C tidak apa-apa, tetapi bahasa lain memisahkan hal-hal yang sulit untuk meningkatkan produktivitas, pemeliharaan, dan mengurangi kerusakan.

Craig
sumber
6
Untuk mendapatkan performa terbaik, Anda tidak hanya membutuhkan C, tetapi juga programmer C. Dan orang-orang itu biasanya menginginkan lebih banyak uang daripada programmer Java / P *.
el.pescado
4

Pertimbangkan bahwa saya bukan pengembang web tetapi akan menanyakan pertanyaan ini dan menawarkan satu atau dua poin.

Situs web apa yang hanya ditulis dalam satu bahasa? Serius benang ini sepertinya menganggap satu palu cocok untuk semua paku.

Kapan terakhir kali seseorang dengan serius menyatakan bahwa C itu rumit? Maksudku benar-benar teman-teman Anda tidak bisa mendapatkan level yang lebih rendah. Saya tidak membicarakan C ++ di sini karena keduanya sering dirujuk secara kolektif.

C memiliki masalah keamanan, yang tidak dapat disangkal tetapi apakah mereka kurang dari apa yang terlihat di kludges yang disebut PHP & Perl? Dalam kedua kasus situs web yang aman adalah fungsi dari disiplin programmer.

Dalam acara apapun off untuk komentar. Kesulitan menggunakan bahasa tertentu sangat bergantung pada masalah yang dihadapi C & terutama C ++ dapat mengarah pada solusi cepat untuk masalah di tangan yang berpengalaman.

Penggunaan industri untuk server web, yaitu server / situs tertanam tidak memiliki pilihan bahasa yang mungkin dimiliki server web normal. Jadi Anda akhirnya menggunakan varian C atau mungkin sesuatu seperti BASIC. Tujuan Anda adalah menawarkan fungsionalitas yang dibutuhkan perangkat dan tidak perlu khawatir tentang bahasa. Pada server web arus utama, cara untuk melakukannya adalah dengan bahasa tingkat tinggi hampir sepanjang waktu. Jauhi besi besar dan kebebasan pemrograman Anda keluar dari pintu.

Tanpa Perpustakaan yang tepat, akan sangat bodoh dalam banyak kasus untuk melakukan proyek web dasar di C. Kurangnya perpustakaan standar yang baik adalah hal yang sangat negatif di sini.

David Frantz
sumber
3

Berikut adalah beberapa kode terkait web lainnya yang ditulis dalam C yang layak untuk dilihat saat membuat perpustakaan C Anda sendiri untuk web:

  • cgic: pustaka C ANSI untuk Pemrograman CGI
  • cgit: antarmuka web untuk repositori git
  • wbox: alat pengujian HTTP
  • wget html-parse.c
  • kue keriting. c
  • Diskon, implementasi C David Parsons dari teks Markdown John Gruber ke bahasa html
  • Protothreads (khususnya untuk sistem tertanam), http://www.sics.se/~adam/software.html
  • protothread, proyek kode Google oleh LarryRuane
  • proyek sourceforge uriparser
  • http-parser, http request / response parser untuk c oleh Ryan Dahl di github
  • nginx
  • ...
ceeit
sumber
2

Nah, mengingat fakta bahwa pengembangan Web adalah masalah memiliki perpustakaan yang berguna (jenis yang digunakan oleh PHP) maka saya tidak melihat bagaimana C tidak akan berguna.

Bagaimanapun, logika proseduralnya sama: do while, for, if then else, dll. Apakah ini C, PHP, .Net atau Perl.

Dan tes atau loop C tidak lebih sulit untuk ditulis karena ditulis dalam C.

Kebanyakan pustaka PHP dibuat dalam bahasa C sehingga argumen yang hilang-C-libraries-for-the-Web tidak terlalu meyakinkan.

Dugaan saya adalah bahwa C tidak diiklankan sebagai bahasa pemrograman web dengan promotor dari Java (SUN) dan Net (MICROSOFT) karena mereka memiliki mereka sendiri proprietary (berat dipatenkan) aset intelektual untuk dorongan untuk adopsi.

Sebagai standar gratis (tidak dipatenkan), C tidak menawarkan pegangan 'lock-in' pada pengembang ... oleh karena itu, mungkin upaya lobi yang berat di sekolah dan universitas untuk memastikan bahwa uang pembayar pajak akan mendanai pengadopsian suatu teknologi inferior yang didukung oleh kepentingan pribadi.

Jika C cukup baik untuk IBM dan MICROSOFT (mereka tidak mengembangkan produk mereka dalam PHP atau .Net) tetapi tidak cukup baik untuk pengguna akhir, maka pengguna akhir mungkin bertanya-tanya mengapa mereka diundang untuk menderita standar ganda ini.

Vince
sumber
1
Uhhhh Microsoft.com dan sharepoint keduanya ada di ASP.NET. Sebagian besar Visual Studio 2010 dalam .NET (WPF). Pernyataan ini jelas salah. Gunakan bahasa tingkat tertinggi yang memenuhi persyaratan desain Anda. Untuk web, itu berarti C # / Python / etc, dan komponen dalam C / C ++ / etc di mana kinerja menjadi masalah - meskipun itu hampir tidak pernah terjadi.
Simpan
2

Saya akan menggunakan C untuk aplikasi web jika:

  1. Saya memiliki budget yang sedikit untuk server hosting (VPS kecil) dan waktu saya tidak mahal.
  2. Saya bekerja untuk Facebook, Twitter atau seseorang yang membutuhkan untuk mengurangi jumlah server yang digunakan (dengan ribuan hingga jutaan pengguna).
  3. Saya ingin belajar C dan saya perlu menemukan aplikasi dunia nyata tempat saya dapat menggunakannya.
  4. Saya tahu C jauh lebih baik daripada bahasa scripting lainnya.
  5. Saya seorang pria lingkungan dan saya ingin mengurangi jejak karbon aplikasi saya.

G-WAN menjalankan kode sebagai skrip, ya skrip C seperti Play! Kerangka tidak untuk Java. G-WAN sangat cepat dan memiliki API yang mudah. G-WAN memungkinkan untuk menggunakan C / C ++ untuk aplikasi web saat server lain gagal melakukannya.

Satu hal yang jelas: Anda membutuhkan pemrogram yang baik untuk menulis situs web dalam C, pengembang yang jelek dapat membuat situs dengan spageti PHP :-) Ada pendeteksi kebocoran dan bahkan pengumpul sampah untuk C.

rtacconi
sumber
2

Semua bahasa yang Anda sebutkan sebenarnya ditulis dalam C / ++. Satu-satunya perbedaan adalah kelas dan pustaka lanjutan yang dibuat dari C yang membentuk apa yang sekarang menjadi bahasa penerjemah lainnya. Itu juga mengapa mereka disebut sebagai bahasa scripting.

Anggap saja seperti memanggang kue (PHP / JS):

  • 2 Telur, 1 cangkir Susu, 2 batang Mentega, 4 cangkir tepung, 1 cangkir Gula, Soda Kue

Tapi bayangkan harus membuat semua elemen yang terdiri dari hal-hal itu. (C / ++)

  • 17 mg natrium bikarbonat, 15 sdm protein, 12 sdm Membran Vitelline, Asam Amino, Sulfur, ... Partikel Neutron

C adalah dasar dari banyak bahasa modern. Ini adalah bahasa yang hebat dan hampir menjadi bahasa paling kuat yang sedang dirakit. Anda dapat melakukannya, Anda hanya perlu berinvestasi untuk membuat semua kode yang telah dilakukan oleh bahasa lain ini. Seperti membuat kue dari tabel periodik.

Pelajari itu, Anda benar-benar dapat membuatnya melakukan apa saja!

GetBackerZ
sumber
1

Penanganan string di C dapat dibuat lebih mudah dengan menggunakan:

Tipe Data (bagian dari libslack)

Libslack menyediakan tipe data array pointer generik yang disebut List, tipe data tabel hash generik yang bisa dikembangkan yang disebut Map dan tipe data String yang layak yang dilengkapi dengan banyak fungsi (banyak yang diangkat dari Perl). Ada juga tipe data daftar yang ditautkan secara tunggal dan ganda dengan opsional, freelist "yang dapat dikembangkan".

atau:

Library String Terkelola (untuk C)

http://www.cert.org/secure-coding/managedstring.html

ceeit
sumber
1

"domachine" menulis:

ketergantungan platform: C perlu dikompilasi menjadi kode asli. Kode ini tidak berjalan di semua platform. Bahasa yang ditafsirkan (seperti PHP) dijalankan di mana pun ada penerjemah. Tentu saja masalah ini dapat diselesaikan tetapi Anda melihat keuntungan dari pengembangan di PHP dalam kasus khusus ini.

Pernahkah Anda bertanya-tanya dalam bahasa apa penerjemah PHP portabel ditulis?

Dalam ANSI C.

Jadi, sebelum Anda mengabaikan portabilitas ANSI C lagi, tanyakan pada diri Anda dalam bahasa apa bahasa pemrograman favorit Anda telah ditulis ... (tip: hampir semua ditulis dalam C / C ++).

Kompiler ANSI C tersedia di semua platform tempat saya bekerja -dan hal yang sama tidak berlaku untuk PHP dan runtime besarnya.

Begitu banyak untuk argumen portabilitas .

CClue
sumber
2
Nah, PHP BUKAN bahasa favorit saya. Saya belum membuat kode apa pun di PHP. Saya seorang programmer C dan C ++. Saya tidak pernah mengabaikan portabilitas C! Satu-satunya hal yang saya sebutkan, adalah kemudahan untuk menerapkan Script PHP ke WebSpace yang ada. Tunjukkan pada saya kasus di mana Anda bisa mendapatkan WebSpace anggaran rendah di mana Anda memiliki kompiler. Mungkin saya salah, tapi menurut saya Anda adalah salah satu Programmer fanatik yang menyukai satu bahasa tetapi tidak melihat keuntungan dari bahasa lain, mungkin bahasa yang lebih sesuai. Saya suka C dan C ++ tapi saya bisa berpikir out of the box.
domachine
0

Mirip dengan G-WAN, tetapi untuk Cocoa / Objective-C adalah Bombax, kerangka aplikasi web.

http://www.bombaxtic.com

Berbicara tentang Objective-C Saya tidak dapat menahan diri untuk tidak menunjukkan MacRuby, yang berpotensi merevolusi cara kami membuat aplikasi web suatu hari nanti.

gregg
sumber
Nah MacRuby sudah mati sekarang.
Banjocat
0

Poin lain mungkin adalah ketergantungan platform. C perlu dikompilasi menjadi kode asli. Kode ini tidak berjalan di semua platform.

Bahasa yang ditafsirkan dijalankan di mana pun ada penerjemah. Banyak penyedia, misalnya, menyediakan Penerjemah PHP yang diinstal di server mereka, tetapi dengan OS Windows. Jika Anda sekarang mengembangkan di mesin Linux. Anda punya masalah.

Tentu saja masalah ini dapat diselesaikan tetapi Anda melihat keuntungan dari pengembangan di PHP dalam kasus khusus ini.

Semoga ini bisa membantu, salam domachine

domachine
sumber
0

PHP, Python, dan sebagainya mudah untuk ditingkatkan dengan membuang perangkat keras pada masalahnya.

Misalkan diperlukan upaya 1 orang 1 tahun untuk mengembangkan aplikasi di PHP, dan biaya 3 tahun untuk melakukannya di C (karena C memerlukan lebih banyak upaya untuk melakukan hal yang sama). Itu berarti kebutuhan perangkat keras yang berkurang dari kode C harus mewakili gaji 2 tahun agar C menjadi menarik. Dalam prakteknya itu (hampir) tidak pernah terjadi.

Seperti semua aturan, ada pengecualian. Skala Facebook begitu besar sehingga perangkat keras membutuhkan biaya perawatan yang cukup besar. Itulah mengapa mereka mengembangkan HipHop , yang mengkompilasi silang PHP ke C ++. Ini menghadirkan yang terbaik dari kedua dunia: kesederhanaan pemrograman dalam PHP, dan kinerja mentah C ++. Facebook masih dikembangkan dalam PHP, tetapi ketika Anda menggunakannya, itu semua adalah kode asli.

Joeri Sebrechts
sumber
0

Pada akhirnya Anda benar-benar dapat menggunakan bahasa apa pun untuk mengembangkan situs, termasuk assembler (melalui CGI, dll.). Jika Anda bermaksud mengapa kami tidak menggunakan bahasa yang dikompilasi, nah, kami sudah punya .NET, Java dan lainnya.

Andrei Rînea
sumber
0

Anda harus mencintai apa yang Anda lakukan untuk mencapai hasil. Bahasa seperti java dan php dibuat dengan banyak upaya untuk membuat hidup orang lebih mudah. Php khususnya telah menguntungkan banyak pemrogram web belajar mandiri hari ini. Anda dapat melihat jenis dukungan yang dimilikinya dalam dunia pengembangan web.

Java iam yakin ditulis untuk memberi Anda bantuan dalam segala hal yang mungkin dilakukan di dunia saat ini. Buku yang sangat besar adalah indikasi yang jelas, dan itu adalah binatang buas jika Anda menjulang untuk pengembangan web juga. Hal yang sama berlaku untuk Python. Ini adalah bahasa dan platform yang begitu fantastis. Tidak heran mereka sangat populer.

Saya adalah pemuja C dan sebagian karena keterbatasan tertentu yang menghalangi saya untuk melihat bahasa lain seperti php. Saya menulis dalam C setiap hari dan setiap hari saya bangga untuk e dan mempelajari hal baru juga. Ini membuat saya merasa sangat senang dan saya juga mulai belajar tentang bagaimana C adalah pilihan default saat menulis aplikasi untuk situs web melalui Cgi. Ini diabstraksi di platform lain dan ketika Anda mengembangkan situs web yang berkaitan dengan database dan layanan web, Anda perlu tahu apa yang terjadi di balik layar.

Namun jika Anda mengetahui semua itu dan masih ingin menggunakan bahasa scripting, pasti ada alasan yang sah, dan kami tidak perlu ada orang yang menyarankan untuk tidak melakukannya.

Viz
sumber