Дисклеймер

Плз не кидайтесь хейтом :)) Эту статью я написал как ответ одному из своих товарищей. Поэтому, если ты опытный разработчик, то ничего нового явно не узнаешь.

Почему используется именно 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

Ниже приведен список всех языков программирования на сегодняшний день, если отталкиваться от википедии.

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)


  1. pavelgonzales Автор
    17.06.2022 17:10
    -3

    Какой-то проблемес с переносами случился, не понимаю как пофиксить :(


    1. pavelgonzales Автор
      17.06.2022 17:31
      -2

      Fixed


  1. rundll32
    17.06.2022 18:22
    +3

    Разве это не очевидно?)


    1. pavelgonzales Автор
      17.06.2022 18:24
      -5

      Если ты больше одного дня в разработке, то супер очевидно)) Но я это писал как шаблонный ответ людям, которые ещё не "вошливайти"


  1. SergeiMinaev
    17.06.2022 18:25
    +2

    Каждый язык исполняется в своей среде, но в конечном итоге все переводится в байт код.

    Вроде, в байт-код компилируются только интерпретируемые языки и те, что работают на виртуальных машинах.

    Но не всегда экономически выгодно писать веб сервер на Си

    Я вас понял, но всё же: скажите об этом разработчикам nginx и h2o :) Наверное, всё-таки не сервер, а веб-приложение.


    1. pavelgonzales Автор
      17.06.2022 18:37
      -5

      Я имел ввиду что в конце концов все превращается в байт-код.

      Наверное :) я тут имел ввиду серверные приложения.


      1. doctorw
        17.06.2022 22:07
        +2

        В таком случае возникает вопрос — что такое «байт-код» в Вашем понимании?


      1. fougasse
        17.06.2022 22:08
        -2

        В итоге всё превращается в ассемблер, а потом в инструкции процессора.


        1. DrPass
          18.06.2022 01:47
          +5

          В итоге всё превращается в ассемблер,

          А вы не знаете, что такое ассемблер :)


      1. DrPass
        18.06.2022 01:46
        +5

        Я имел ввиду что в конце концов все превращается в байт-код.

        Мне кажется, вы просто не знаете, что такое байт-код :)


        1. awoland
          18.06.2022 19:52

          У автора проблемы с терминологией: он не видит разницы между "байт-кодом" и машинным кодом. Возможно элементарно путает...


          1. pavelgonzales Автор
            18.06.2022 22:48
            -2

            Скорее всего так и есть.

            Я бы с радостью исправил все недочёты, если мне на них укажут. И ещё мне надо было перед выкладкой дать статью на вычитку более опытным коллегам.


  1. pqbd
    17.06.2022 18:34
    +3

    Так и почему Си для драйверов? :)


    Браузер понимает только JS — это пожалуй спорно. Можно начать с VBScript или трансформаций XSLT, а с WebAssembly вообще всё весело получается.


  1. 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.

    А большинство компилируемых языков "в конечном итоге" переводится в машинные коды и для выполнения такой программы требуется только ОС и ничего более поверх нее.

    Ниже приведен список всех языков программирования на сегодняшний день, если отталкиваться от википедии

    Плохо отталкивались. Список далеко не полный.

    В целом статья местами поверхностная, местами просто безграмотная.


    1. pavelgonzales Автор
      18.06.2022 23:09
      -2

      Давайте я сделаю работу над ошибками и постараюсь написать новую, более грамотную статью.

      Просто она изначально была ориентированна на людей далёких от айти, но которые часто задавали мне данный вопрос.


      1. SpiderEkb
        19.06.2022 20:38

        Искусство писать популярные статьи заключается в умении простыми словами объяснить сложные вещи неспециалисту.

        В целом у вас верно (хотя и несколько размазано) высказана мысль что все языки создавались под конкретные нужды. И выбор языка диктуется задачей, а не наоборот (когда язык подгоняется под задачу методами лютого костылинга просто потому что "я этот язык хорошо знаю, это современный стек, у нас все на нем пишут..." и прочее и прочее).

        И часто в серьезных задачах одного языка мало, приходится использовать 2-3. Разных. Каждый под свою часть задачи.