Apakah ada beberapa jenis perangkat lunak yang tidak dapat dikembangkan oleh semua bahasa pemrograman utama?

8

Saya ingin tahu apakah beberapa bahasa pemrograman utama sama sekali tidak dapat digunakan untuk membuat beberapa jenis perangkat lunak yang sangat spesifik.

Dengan bahasa pemrograman utama yang saya maksud adalah orang-orang seperti C ++, C #, Java, Ruby, Python. Dengan "tidak dapat dikembangkan" Maksud saya tidak dapat dikembangkan atau tidak realistis untuk melakukannya karena kinerja, kesulitan implementasi, dll.

Saya selalu berpikir bahwa bahasa pemrograman apa pun dapat digunakan untuk menyelesaikan masalah tetapi belakangan ini saya berpikir bahwa beberapa bahasa tidak cocok untuk beberapa proyek.

Jika Anda dapat memberikan contoh aplikasi semacam itu, itu akan dihargai. Terima kasih.

mbillard
sumber
15
Tidak cocok untuk suatu tugas dan tidak mampu melakukan tugas adalah dua hal yang sangat berbeda.
Covar
@Covar, saya hanya berubah taskke project. Semoga tidak terlalu membingungkan.
mbillard
Anda sadar akan konsep kesetaraan Turing?
1
Terkait (untuk pertanyaan seberapa cocok beberapa bahasa untuk kasus tertentu): paulgraham.com/avg.html
Doc Brown

Jawaban:

13

Bahasa tingkat yang lebih tinggi, terutama yang tidak menyediakan setiap sarana mengutak-atik memori secara langsung (dari daftar Anda: Java, Ruby, Python) tidak cocok untuk sistem pemrograman. Untuk memberikan contoh nyata, saya tidak akan mengimplementasikan (bagian dari - misalnya driver) sistem operasi atau mesin virtual / juru bahasa di Python.

Kebalikannya hampir tidak mendekati "tidak mungkin", tetapi menulis misalnya skrip utilitas atau prototipe untuk perangkat lunak yang kompleks dan rumit seperti kompiler dalam misalnya C ++ (dua kali lipat dalam C) dapat menjadi sangat rumit sehingga menjadi pembunuh motivasi, mengingat bahwa Anda mendapatkan banyak beban yang lebih kecil di atas masalah yang sebenarnya.


sumber
Itu masih bisa dilakukan - lihat misalnya jnode.org yang merupakan sistem operasi yang ditulis dalam Java.
1
@ ThorbjørnRavnAndersen Ya, proyek penelitian seperti itu muncul dari waktu ke waktu. Namun, mereka jauh dari proyek dunia nyata. Dan jika Anda mencoba untuk mengimplementasikan mis manajemen memori di Java (atau Python, atau bahasa yang dikelola memori lainnya), Anda harus sangat membatasi bahasa dan berakhir dengan sesuatu yang jauh dari kode idiomatik, atau harus menerapkan banyak ekstensi (lih. kerangka kerja GC dari PyPy dan MMTK dari Jikes RVM).
7

Tentu saja, itu semua tergantung pada perangkat keras yang mendasarinya

Sebagai contoh, jika saya akan memprogram alat tenun Jaquard , saya tidak akan dapat menggunakan C ++ untuk melakukannya karena tidak ada kompiler untuk perangkat keras itu. Saya berpendapat bahwa tidak ada kompiler yang mungkin karena perangkat keras tidak mendukung banyak persyaratan yang diperlukan C ++ agar dapat berfungsi sebagai bahasa.

Perpanjangan dari ini adalah ke dunia komputer analog yang bekerja dengan cara yang sama sekali berbeda dengan yang digital yang lazim saat ini.

Namun, Anda dapat mempertimbangkan waktu yang cukup Anda dapat datang dengan kompiler / assembler untuk mesin von Neumann (input-> prosesor / penyimpanan-> output). Tetapi beberapa mesin von Neumann, seperti MU0 , terlalu mudah untuk dijalankan. Info lebih lanjut tentang MU0 untuk pembaca yang tertarik .

Gary Rowe
sumber
5
Ya, namun jika alat tenun Jaquard dapat mensimulasikan mesin Turing, maka Anda dapat menulis kompiler c ++ untuk itu, jika Anda memang cenderung.
whatsisname
2
@whatsisname, Turing-equivalency hanya menarik jika waktu yang digunakan tidak menjadi masalah.
Selain Turing-kesetaraan, ada juga masalah I / O: Apakah ia memiliki mekanisme untuk berkomunikasi dengan dunia luar selama eksekusi? Jika tidak, bahasanya seperti otak dalam tong . Jika memiliki setidaknya satu input dan satu metode output, Anda setidaknya dapat membuat scraper layar untuk itu.
rwong
6

Ya, ada beberapa hal yang tidak dapat dilakukan dengan berbagai bahasa. Berikut adalah beberapa kriteria utama yang mempengaruhi itu:

  • Level Rendah : Driver perangkat dan modul kontrol perangkat keras mungkin memerlukan akses ke lokasi memori tertentu dan instruksi perakitan. Jika bahasa tidak menyediakan cara untuk melakukan ini, Anda tidak dapat menggunakannya (sangat sedikit yang menawarkan lokasi dan rakitan penunjuk khusus)
  • Kinerja : Dalam beberapa kasus, ini bukan hanya masalah waktu yang lama, jika Anda memiliki umpan data berkelanjutan, atau langsung, Anda tidak punya pilihan selain cukup cepat untuk memprosesnya dalam waktu nyata.
  • Biner : Untuk produksi komersial, persyaratan Anda mungkin hanya mendistribusikan binari, banyak bahasa mirip skrip tidak memiliki bentuk biner.
  • Memori : Untuk perangkat jejak kaki yang tertanam dan kecil Anda memiliki jumlah memori yang sangat terbatas (atau sumber daya lainnya). Bahasa yang membutuhkan pustaka VM atau standar besar tidak dapat ditargetkan ke mesin seperti itu.
  • Real-Time : Selain hanya cukup cepat, perangkat tertentu perlu merespons peristiwa dalam kerangka waktu yang dijamin berdasarkan peristiwa yang diberikan. Bahasa perlu mendukung acara dan menjamin waktu pemrosesan (sesuatu seperti pemulung akan mencegah hal ini).
  • Matematika : Banyak perhitungan membutuhkan perpustakaan lengkap fungsi matematika dan tipe data yang sesuai. Seringkali ini membutuhkan detail implementasi spesifik. Beberapa bahasa skrip mungkin tidak cukup menentukan hal ini, atau gagal menyediakan fungsi utama.
  • Kompatibilitas : Beberapa perangkat keras tidak memiliki kompiler / juru bahasa untuk bahasa tertentu.

Itulah beberapa hal yang bisa saya pikirkan. Saya yakin masih ada lagi. Tetapi poin penting adalah bahwa ya ada persyaratan membatasi kunci yang akan mencegah penggunaan bahasa.

edA-qa mort-ora-y
sumber
1
Banyak dari masalah ini tidak melekat pada bahasa, tetapi merupakan masalah dengan implementasi kami saat ini.
whatsisname
1
@whatsisname: Sampai batas tertentu, tetapi bahasa yang berbeda cocok untuk implementasi yang berbeda. Selain itu, beberapa bahasa tidak dapat dioptimalkan seperti bahasa lain, contoh klasiknya adalah rutinitas matriks di mana implementasi Fortran dapat jauh lebih dioptimalkan secara agresif daripada restrictimplementasi pra- C.
David Thornley
Pengumpulan sampah dapat (dan telah) dilakukan secara waktu nyata.
HANYA SAYA PENDAPAT benar
4

Saya selalu berpikir bahwa bahasa pemrograman apa pun dapat digunakan untuk menyelesaikan masalah tetapi belakangan ini saya berpikir bahwa beberapa bahasa tidak cocok untuk beberapa proyek.

Ya, itu benar dan selalu demikian. "Ketidakmampuan" dan "Tidak Cocok" sangat berbeda.

Anda bisa menggedor paku ke papan dengan ujung obeng. Anda bisa menggerakkan sekrup dengan ujung palu. Tetapi palu jauh lebih cocok dan merupakan alat yang lebih baik untuk membenturkan paku, dan obeng adalah alat yang lebih baik untuk pengencang berulir.

Bahasa pemrograman adalah alat. Alat-alat tertentu lebih baik dalam tugas-tugas tertentu.

Apa namanya
sumber
1

Satu-satunya hal yang saya anggap tidak realistis adalah pengembangan driver perangkat tingkat rendah dalam bahasa yang sangat tervirtualisasi seperti Java atau C # - jika Anda mencoba memanipulasi perangkat keras, VM paling mengagumkan (yang membuat begitu banyak hal menjadi begitu bagus dan sederhana) akan menghalangi Anda. Saya yakin itu bisa dilakukan, jika Anda BENAR-BENAR menginginkannya, tetapi itu akan melibatkan banyak adaptasi VM untuk membuatnya bekerja.

Hal lain dapat dilakukan dalam bahasa apa pun yang Anda suka.

Michael Kohne
sumber
1

Sistem tertanam datang ke pikiran. Tidak realistis untuk memprogram router misalnya, atau beberapa jenis robotika menggunakan bahasa seperti C #. Meskipun ada proyek-proyek seperti netduin memanfaatkan kerangka mikro jadi saya mungkin telah membantah poin saya sendiri.

lubang di lubang
sumber
1
Tidak selalu realistis untuk menggunakan C # untuk router atau robot. Jika Anda dapat menghemat waktu programmer menggunakan C # itu dapat membuat peningkatan kebutuhan perhitungan bermanfaat. Itu berlaku untuk bahasa / lingkungan apa pun.
whatsisname
@whatsisname: Tentu saja, router yang sangat serius diprogram dalam VHDL. :-)
Zan Lynx
0

Bahasa 4GL disebut dibatasi oleh lingkungan pemrograman mereka terikat. Anda tidak dapat memprogram GUI dengan ABAP, misalnya. Yang dapat dilakukan adalah jenis seperti GUI di lingkungan terbatas klien SAP (dan ini hanya dapat berjalan terhubung ke instance SAP).

Ingo
sumber