Дисклеймер
Плз не кидайтесь хейтом :)) Эту статью я написал как ответ одному из своих товарищей. Поэтому, если ты опытный разработчик, то ничего нового явно не узнаешь.
Почему используется именно JavaScript для браузера, а Си для драйверов?
Начнем с того, что каждый язык решает проблемы в своей предметной области и каждый создавался под конкретные нужды. Раньше все писали на ассемблере, потом на Си, потом стали подниматься все выше и выше по уровням абстракций и стали придумывать языки под конкретные нужды.
Каждый язык исполняется в своей среде, но в конечном итоге все переводится в байт код.
Приложения для десктопа пишутся на любом языке, где есть библиотеки для работы с графическим интерфейсом. Например, библиотека Qt существует на C++, Python. Java, PHP и на многих других.
На веб сервере можно использовать также любой язык, например PHP, Ruby, Java, C, Python, Perl, Go. Но не всегда экономически выгодно писать веб сервер на Си, так как скорость разработки на нем будет очень медленная и разработчика найти достаточно трудно, да и не факт что хватит денег на него. Чаще всего последнее время веб сервера пишут на PHP, Go, Python. На них достаточно высокая скорость разработки не высокий порог входа, поэтому найти специалиста гораздо проще. Но в банковском секторе веб сервера принято писать на Java, так как он имеет строгую типизацию, высокую стабильность и производительность.
В браузере мы используем JavaScript потому что браузер понимает только этот язык. Его изначально создавали для браузера. И только потом он уже вышел за пределы браузера и на нем стало возможным писать веб сервер, десктопные и мобильные приложения с помощью дополнительных инструментов.
На android устройствах прижилась Java, так как коду нужно было исполняться на разных версиях android и нужна была единая среда исполнения кода. Поэтому выбрали Java. Со временем появилась обертка на Java в виде Kotlin. Так же для высокопроизводительных приложений допускается написать часть программы на C/C++, но не все приложение. В 2018 году вышел фреймворк от Google под названием Flutter написанный на Dart на котором так же можно создавать мобильные приложения под Android и iOS. Ну и куда же без JavaScript, на нем тоже можно писать мобильные приложения, используя ReactNative.
На iOS принято писать на Swift, но так было не всегда. До 2014 года для iOS писали на Objective-C. Это оба языка детище Apple, так как и платформа их. Почему Apple не стала использовать уже существующий язык Си? Потому что это дорого и сложно, а значит экономически не выгодно. Гораздо проще создать новый язык, который будет заточен под огромную платформу и будет из коробки иметь все для работы с платформой. Еще под iOS можно писать на Flutter.
Conclusion
Язык выбирается с точки зрения удобства и скорости разработки и с точки зрения экономической выгоды для предприятия. Поэтому иногда приложения на смартфоны пишут на JavaScript, так как это дешевле и быстрее, а иногда и веб сервера пишут на Java или C#, так как важна стабильность и отказоустойчивость.
Bonus
Ниже приведен список всех языков программирования на сегодняшний день, если отталкиваться от википедии.
1С
5th
8th
ABAP/4
Action Script
Active C#
Ada
Afnix
Alef
AspectC++
AspectJ
AspectLua
Awk
BCPL
Basic
Befunge
Brainfuck
Breeze
Byter
C#
C++
C++/CLI
CaesarJ
Cat
Cg
ChucK
Cilk
Clarion
Clean
Clipper
Clojure
CoSy
ColdFusion
Compose
Concurrent Pascal
ConcurrentLua
Corn
Curry
Cω — C Omega
D
Dart
DataFlex
Delphi
Deque
Dylan
E
Eiffel
Elm
EmptyScript
Enchilada
Erlang
Euphoria
F#
FALSE
FBD
Factor
Forth
FoxPro
Freelang
GNU bc
GPSS
Game Maker Language (GML)
Gentee
Golang
Groovy
Haskell
Haxe
Hope
IL
INTERCAL
Io
J
JOVIAL
Java
JavaScript
Join Java
Join-calculus
Joule
Joy
Julia
Kitten
Kotlin
LOLCODE
Ladder Diagram
Limbo
Lua
Lviv
MATLAB
MC#
ML
Malbolge
Maple
Mathematica
Matlab
Mercury
MetaQuotes Language MQL4/MQL5
Moy
Mozart
MultiLisp
Nemerle
NetP
OCaml
Object Pascal
ObjectTeams
Objective-C
Occam
Om
Onyx
OpenEdge Advanced Business Language
Oz
PHP
PL/M
PL/SQL
Parallel C#
Pascal
Perl
Pict
Piet
Pike
Pixilang
PostScript
Prolog
PureBasic
Python
QBASIC
REXX
Raven
Ruby
Rust
SPCLK
SQL
SQL-92
SR
ST или SCL
Scala
Scheme
Scilab
Self
Sequential Function Chart
Shell
Simula
Smalltalk
Staapl
Swift
Tcl/Tk
Transact-SQL
Vala
Virtual Machine
Visual Basic
Visual DataFlex
Whitespace
X++
X10
Zonnon
dBase
mjoy
occam
occam-π
xBase
АПЛ
Активный Оберон
Алгол
Алгол 68
Би
КОБОЛ
Компонентный Паскаль
Лисп
Лого
Модула
Модула-2
Модула-3
Оберон
Оберон-2
ПЛ/1
Паскаль
Планкалкюль
РАПИРА
РЕФАЛ
Робик
Си
Т++
Упрощённый Алгол
Фокал
Фортран
Комментарии (16)
rundll32
17.06.2022 18:22+3Разве это не очевидно?)
pavelgonzales Автор
17.06.2022 18:24-5Если ты больше одного дня в разработке, то супер очевидно)) Но я это писал как шаблонный ответ людям, которые ещё не "вошливайти"
SergeiMinaev
17.06.2022 18:25+2Каждый язык исполняется в своей среде, но в конечном итоге все переводится в байт код.
Вроде, в байт-код компилируются только интерпретируемые языки и те, что работают на виртуальных машинах.
Но не всегда экономически выгодно писать веб сервер на Си
Я вас понял, но всё же: скажите об этом разработчикам nginx и h2o :) Наверное, всё-таки не сервер, а веб-приложение.
pavelgonzales Автор
17.06.2022 18:37-5Я имел ввиду что в конце концов все превращается в байт-код.
Наверное :) я тут имел ввиду серверные приложения.
DrPass
18.06.2022 01:46+5Я имел ввиду что в конце концов все превращается в байт-код.
Мне кажется, вы просто не знаете, что такое байт-код :)awoland
18.06.2022 19:52У автора проблемы с терминологией: он не видит разницы между "байт-кодом" и машинным кодом. Возможно элементарно путает...
pavelgonzales Автор
18.06.2022 22:48-2Скорее всего так и есть.
Я бы с радостью исправил все недочёты, если мне на них укажут. И ещё мне надо было перед выкладкой дать статью на вычитку более опытным коллегам.
pqbd
17.06.2022 18:34+3Так и почему Си для драйверов? :)
Браузер понимает только JS — это пожалуй спорно. Можно начать с VBScript или трансформаций XSLT, а с WebAssembly вообще всё весело получается.
SpiderEkb
18.06.2022 19:27+1Раньше все писали на ассемблере, потом на Си, потом стали подниматься все выше и выше по уровням абстракций и стали придумывать языки под конкретные нужды.
Вообще-то, "совсем раньше" писали прями в машинных кодах. Потом появился ассемблер.
Потом стали появляться языки программирования высокого уровня. В том числе и специализированные.
FORTRAN (FORmula TRANslator) появился в 1954-м году как язык для математических вычислений.
В 1959 появился COBOL (COmmon Busines Oriented Language) - язык для коммерческих вычислений.
Примерно тогда же (в 1960-м) появился еще один язык - RPG (Report Program Generator - язык для работы с БД, коммерческих расчетов и подготовки печатных форм). Кстати, до сих пор еще жив и активно развивается, более 80% кода на платформе IBM i (высокопроизводительные коммерческие сервера на процессорах PowerS) и поныне пишется на RPG.
А С появился только в 1969-м году.
Каждый язык исполняется в своей среде, но в конечном итоге все переводится в байт код.
Вообще-то, байт-код это некое промежуточное состояние, требующее для выполнения дополнительного программного обеспечения. Яркий пример - Java-машина (JVM) без которой невозможно выполнение ни одной программы, написанной на Java.
А большинство компилируемых языков "в конечном итоге" переводится в машинные коды и для выполнения такой программы требуется только ОС и ничего более поверх нее.
Ниже приведен список всех языков программирования на сегодняшний день, если отталкиваться от википедии
Плохо отталкивались. Список далеко не полный.
В целом статья местами поверхностная, местами просто безграмотная.
pavelgonzales Автор
18.06.2022 23:09-2Давайте я сделаю работу над ошибками и постараюсь написать новую, более грамотную статью.
Просто она изначально была ориентированна на людей далёких от айти, но которые часто задавали мне данный вопрос.
SpiderEkb
19.06.2022 20:38Искусство писать популярные статьи заключается в умении простыми словами объяснить сложные вещи неспециалисту.
В целом у вас верно (хотя и несколько размазано) высказана мысль что все языки создавались под конкретные нужды. И выбор языка диктуется задачей, а не наоборот (когда язык подгоняется под задачу методами лютого костылинга просто потому что "я этот язык хорошо знаю, это современный стек, у нас все на нем пишут..." и прочее и прочее).
И часто в серьезных задачах одного языка мало, приходится использовать 2-3. Разных. Каждый под свою часть задачи.
pavelgonzales Автор
Какой-то проблемес с переносами случился, не понимаю как пофиксить :(
pavelgonzales Автор
Fixed