LINUX.ORG.RU

Си vs JS

 ,


1

5

Хотел было взяться за изучение Си, он юниксвейный, быстрый, и все такое, но почитал некоторые статьи, с тестами, в том числе и на лоре были недавно, и оказалось, что JS уступает в скорости Си всего лишь в 2-3 раза, причем, разрыв стремительно сокращается. Глядишь, через годик он может и обогнать Си.

С другой стороны, я че то подумал, ведь JS тоже кросплатформенный, к тому же он «универсальный», годиться и для веба и для системного программирования. Может случиться, что Си через годик-второй вообще будет никому не нужен.

В связи с этим, у меня сомнения. Браться за Си или не браться? Есть ли перспективы?



Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от anonymous

будет
работает

Хорошая шутка. Стандартные либы, которые постоянно ломают, архитектуры, которые не поддерживают… Страшно всё это.

Deleted
()

JS ... годиться ... системного программирования

Ага. Системного погромирования.

На стороне сервера (или как просто прикладное ПО) — еще возможно. Но вглубь системы - no way.

Еще вот, занимательный ресурс: http://wtfjs.com/

KennyMinigun ★★★★★
()
Ответ на: комментарий от Eddy_Em

полноценные функции

Как раз таки в JS есть полноценные ФВП и замыкания:


test=function(fu, x){return function(y) {return fu(x, y)}}
test2=test(function(x, y){console.log(x, y)}, 1)
test2(2)
//output: 1 2

чего в си как раз-таки нет.

человеческая работа с сокетами

Ты же говорил про браузерные скрипты. Откуда там работа с сокетами? Браузерные скрипты вообще не имеют доступа к системе, иначе, привет ie6, ActiveXObject, и прочие дыры. В серверном js, вроде есть, насколько удобная, не знаю.

Преобразование типов

В js есть преобразование типов, в том числе неявное, но там вообще преобразование не особо актуально, там нет явной типизации, а так, там можно и без преобразования сложить бегемота с носорогом, обычно, наоборот, жалуются на слишком вольное обращение с типами. А так, что-то вроде toString(), toNumber(), это все там есть.

phill
()

ТС, учи Си. Поймёшь основополагающие принципы. Особенно разберись с указателями и, затем, попробуй понять чем они (чисто формально) отличаются от ссылок (туда же и массивы и адресная арифметика). Потом попробуй осилить более сложные вещи: циклы, рекурсия, алгоритмическая сложность.

Затем можешь напасть на C++ и его стандартную библиотеку: что такое map, set, vector. Научись их применять (без реального проекта получится плохо). Тут же можно исследовать одну из новых возможностей C++11: лямбда функции и замыкания. (hint: std::function)

Вот на этом моменте надо бы еще приобрести знания по ООП (а также понятие о функциональном программировании). И затем закрепить эти знания изучением паттернов программирования. По пути можешь заглянуть в Java (чисто для ознакомления). И ознакомится с динамической типизацией (например в Python, Ruby или Perl).

И вот только потом, когда твой мозг окрепнет, можешь переходить к JS. Иначе рискуешь остаться кодером-инвалидом (знающим только JS).

P.S. По пути очень удобно использовать всяческие онлайн-компиляторы (аля ideone.com)

KennyMinigun ★★★★★
()
Ответ на: комментарий от Eddy_Em

как ты на жабоскрипте будешь писать всякие вычислялки или железячки обслуживать!

Написать разделяемую библиотеку на С/С++ и наделать биндингов для JS. Where's your god now?

KennyMinigun ★★★★★
()
Ответ на: комментарий от Eddy_Em

Я до сих пор негодую, что в браузерах не С используется, а этот ужас! Когда пишешь скрипты, довольно-таки часто бывает, что не хватает возможностей С.

Как я уже говорил: you're doing it wrong.

// И всё-таки каких возможностей не хватает?

KennyMinigun ★★★★★
()
Ответ на: комментарий от selena-gomes

А если он будет быстрей Си, то почему бы его не использовать и для системного программирования?

Потому что современные ОС (Windows, Linux), а так же тьма библиотек завязаны на C ABI. А такую гору кода никто не будет переписывать в угоду моде на JS. Слишком много для этого потребуется ресурсов. Этой причины более чем достаточно для того, чтобы C никуда не делся ещё лет 20 минимум.

Norgat ★★★★★
()
Ответ на: комментарий от phill

полноценные ФВП и замыкания

Это как раз — гонево какое-то. Я имел в виду полноценные функции, которые очень близки по логике к реальному ассемблерному коду, а не бредогенерации!

Еще в жабоскрипте нет goto. Извращение же!

Браузерные скрипты вообще не имеют доступа к системе, иначе, привет ie6, ActiveXObject, и прочие дыры

А вот могли бы дать доступ к непривилегированным портам. Естественно, с разрешения хозяина.

В серверном js

Это — вообще бред Сиверса Меринга! Как выше справедливо отметили, жабоскрипт на сервер только "дезигнеры" ставят.

там нет явной типизации

во-во, как в пхытоне каком-то. И попробуй-ка сделать строгую структуру данных или объединение (скажем, чтобы легко байтики туда-сюда преобразовывать, удобно делать объединение массива из восьми char и одного uint64_t).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от KennyMinigun

Как раз этим я сейчас и занимаюсь и мне это не то, чтобы очень нравится.

Deleted
()

1. Керниган.Пайк Unix - среда программирования ( можеш ещё в паралель заглядывать в доступные по сети 2a 2b тома мануалы Unix User's Manual Supplementary Documents)

вот реальный юниксвей

а на си ли на js ли , sh ли не так существенно.

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

т.е наряду с имением представления аналога машины тьюринга (как гарвардской?) стоит помнить про марковы цепи - макры тобиш.

Си вечен и это печально.

ибо struct teg и дополнение этого крокодила typedef zzzz struct teg , шоб не таскать везде struct teg - это пережиток(атавизм) от какого то простейшего строко ориентированного ассемблера.

если уже умееш прогать берись за Си иначе будеш полным аналогом php-кодера ибо Си как первый языка располагает ещё к большему @php-coding style@ чем даже php.

если не умееш то научись - там роботами поуправляй - ща игр об этом море.

у жаваскрипта куча эволюционо обусловленный нюансов.

подтяни математику ( аля абстрактная алгебра для чайников)

можеш помедетировать над Y-комбинатором на js

qulinxao ★★☆
()
Ответ на: комментарий от selena-gomes

Керниган Пайк Unix - среда программирования.

телефон свой прогай для своего органайзинга.

qulinxao ★★☆
()
Ответ на: комментарий от Eddy_Em

Для сервера JS не нужен, но для клиентской стороны он очень даже неплох. Байты туда сюда кидать не нужно, функции, близкие к ассемблерным и goto, тоже не нужны.

Когда я только начинал писать на JS, по служебной надобности, он мне казался жутким нехорошим веществом. Потом я немного его подучил и понял, что язык то хороший, мне нравится на нем писать. Нравятся прототипирование, замыкания, вот это всё. Удобно, быстро, приятно.

К сожалению, это отмечал Дуглас Крокфорд, у программистов нет выбора, на чем писать скрипты для браузеров, поэтому они пытаются писать на JS не зная его. Я сам так делал. Но это проблема не языка.

Weres ★★★
()
Ответ на: комментарий от selena-gomes

умей.

Керниган Пайк ... ну ты понял...

важно что за методалгоритм ты используеш , а уж насколько тормозной исполнитель(язык) при современых ЦПУ это вопрос важный только при многоразовом использование.

т.е стратегия программа на выброс (ака одноразовая ) возникшая с распространением микрокомпьютеров со встроеным бэйсик интерпритатором победила с разгромным счётом - успех php в бытовом использовании вычислительной техники в торговле и прочем социальном показательно.

только когда проблему становится сложно решить простым линейным заливанием проблемы деньгами ибо рентабельность на больших масштабах при не лучше чем квадратичных реализациях методов вынуждает звать гуру_алгоритмистики и/или переписывать быдлокод на более быстрый исполнитель что - бы выжать проценты ибо конкуренция.

если тебе не важно то кури php ибо остальное тебе просто ранно.

qulinxao ★★☆
()
Ответ на: комментарий от selena-gomes

Чарлз Пецтольд . Код.

полезно понимать ( и даже заблуждатся , но не совсем) как текст прогрыммы js|c|sh|... отображается на машкод(ну хотя бы в асм) - ну и помнить что кеши это услажняющая точный анализ приправа поэтому по началу на кеши проца можно просто забыть.

но сам подход иерархии памяти (как и других иерархий) регистр-кэш_ядра_на_проце-кэш_проца_как_целого(ака буфер между озу и процом)_озу(здесь уже разделение на кэши операционки и прочих)-hdd-сеть-инет-лента_отключённая_от-книжка_на_полке.

т.е понимае о времени чтения, времени первого доступа - полезно .

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Бентли Жемчужины программирования.

и даже алгоритмы не важны когда достаточно «работа должна быть сделана» , а вычислительная мощьность заведомо достаточна и входная сложность задачи такова что даже факториальная сортировка ( т.е перебор всех перестановок и нахождение удовлетворяющей инварианту упорядочености соседних) достаточна.

qulinxao ★★☆
()

Тема адский троллинг. Создай тему под зарегистрированным — тролль, обсирай под аноном.

для системного программирования

Иди на бсд.орг.ру. У них там уже можно писать модули ядра на луа. Глядишь и реально на js можно систему программировать.

А вообще вот тебе задача: напиши модуль для ядра на js, но не hello world. Как сделаешь можешь потроллить лор еще раз, будет веселее!

gh0stwizard ★★★★★
()
Ответ на: комментарий от selena-gomes

у них(js и с ) скорость может стать как угодно близкой при условии что

сборка мусора (которая есть в js и нет в с) - станет близкой к нулю по времени задержкой.

однако на современных железках это пока не так.

qulinxao ★★☆
()
Ответ на: комментарий от Weres

у программистов нет выбора, на чем писать скрипты для браузеров, поэтому они пытаются писать на JS не зная его

Ну, извини! Это я — быдлокодер сраный — могу себе позволить хаять пхытон с пыхпыхом, хаять жабоскрипт и хвалить С, при том, что программистом не являюсь и ничего из этого не знаю! А вот программист просто обязан в совершенстве знать методики программирования и языки.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Deleted

фигня. можно и на жс современые гигагирцовые процы кодить - проблема в том , что , что бы кодить ембедед на на Си , а на чём либо другом ( и не важно форт ли это или sed или js или схема или guile ) - требуется ещё более уникальная квалифицированность.

все го лиш.

qulinxao ★★☆
()
Ответ на: комментарий от Weres

возможно (уже в этом веке) в очередном стандарте СZZ будет определён интерфейс к стандартному сборщику мусора(через какие нить хитрые хэндлы) тогда разница между таким С и JS (кроме нюансом синтаксиса) изчезнет

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

У тебя опять русский язык съехал? Советую почитать пару томиков Пушкина, потом — Лермонтова и еще что-нибудь интересное (конечно, "Войны и мира" хватило бы, но уж больно скучная дрянь).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от qulinxao

Сборщик мусора в сях не нужен! Да и просто невозможно его туда запихать же!!!

Лучше бы всякие поцтеринги свои грязные лапы в сторону сей не обращали. Си изначально задумывался как "ассемблер высшего уровня", пусть таким и остается. По крайней мере, пока что Си — единственный совершенно понятный ЯП. И самый простой.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

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

ну и да - переносимый асм.

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

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

т.е то , что С может выграть на пипхолах Self и Прочии смолтоки выигрывают на полной оптимизации (вплоть до выкидывания ибо в текущих значениях ветка мёртвая).

qulinxao ★★☆
()
Ответ на: комментарий от Eddy_Em

посмотри как Боэм свой сборщик и псевдолиспик именно на сях первоначально показывал.

Невозможен в части если ты хэндлы(на обьекты управляемые сборщиком муссора) будеш бесконтрольно раскидывать.

если в программе на Си вполне справляются с работой с файлами ( а это и есть использование номеров для доступа к внешним сущьностям посредством сервиса операционки) то и использование сборщика мусора в Си-быту вполне возможна - дополнительный уровень косвенности.

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Можно микроскопом гвозди забивать, можно делать процессоры, которые будут работать на байткоде питона, но зачем?

Deleted
()
Ответ на: комментарий от mentalmenza

Не все, а используемые + иметь поверхностные знания обо всех остальных. Так и есть.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от qulinxao

Я ниже говорил. Низкоуровневых возможностей не хватает. Терпеть не могу всю эту абстракщину и прочую хрень, когда не совсем (или вообще совсем) ясно, во что в итоге твой код раскроется!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Deleted

да в том , что Си это просто общеупотребимый(общепривычный) инструмент

тот же Форт(земля ему пухом) для встоенщины много лучше чем Си - однако история не терпит сослагательных наклонений.

qulinxao ★★☆
()
Ответ на: комментарий от Eddy_Em

дык прямой доступ к битикам/байтикам просто напросто отключает большое число преимуществ жабкоскриптоты.

т.е умело (т.е с положительным выходом) сочетать асоциативные массивы как универсальный интерфейс доступа к агрегатным значениям и точное знание как структура ложится в памяти это нетривиально.

qulinxao ★★☆
()
Ответ на: комментарий от Eddy_Em

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

Weres ★★★
()
Ответ на: комментарий от qulinxao

Ээ... Можно подробнее про CZZ? первый раз слышу. Разница между C и JS серьёзнее, чем наличие/отсутствие сборщика мусора. Для разных целей — разные языки.

Weres ★★★
()
Ответ на: комментарий от KennyMinigun

эээ это конечно прекрасно , что можно научится умножать числа в римской нотации ( т.е с лямбдами знакомится через С++ )

но есть же привычный путь

процедурщина С

лямбдогурманство ...подставить_любымый_вариант...

а когда чел достаточно сознателен он уже может в любом синтаксисе ваять - но вот при первом ознакомлении важно ведь сообщить значемое и не отвлекатся на не значимое а С++ это же страх и ужас и даже не в лас-вегасе а в мухосранске

при том , что и Степанов и Страустроп крутые человеки.

ты же не предлагаеш со всеми концепции программировния ознакамливатся посредством Perl.

хм. чёрт . а ведь мог бы! Perl6 ( или который там ща )- всё ж может .

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Я тебе вот про что:

int f(char a, void *b){
  int x;
  ...
  return x;
}
Где ты в жабоскрипте такое видел?

В жабоскрипте тупо пишешь

function f(a, b){
 ...
 return x;
}
и тебе остается уповать на что угодно, что этот x — именно целое число. Т.е. нужно вводить дополнительные проверки того, что функция возвращает!!!

Бяка же!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Weres

был Сx0 который стал C11 ;

был препроцессор Сxx который стал C++;

здесь под CZZ обозначен некоторая будущая редакция стандарта С когда по природе вещей в С включат какой нить унифицированный интерфейс к сборщику муссора.

ну скажи какая разница между помесью{Pascal+APL+ОшмёткиСтрокОриентированногоАссемблера} и помесью{Scheme(помесь {Algol+Lisp})+Общераспространнёный_синтаксисФигурныхСкобок}

то, что в Сях нет функций литералов?

qulinxao ★★☆
()
Ответ на: комментарий от Eddy_Em

особенно когда было гарантированно , что всё занимает слот одного и того же размера т.е 16 бит - местное слово.

посмотри тот же iocc от 1984 года

где как раз одна из функций просто задана как массив своих машкодов.

qulinxao ★★☆
()
Ответ на: комментарий от qulinxao

Понятно, спасибо.

Другое применение языка порождает написание программ другого типа. Прототипирование и замыкания позволяют использовать функции и объекты иначе, чем в Си. Знаете шутку про программиста и Фортран? Не знаю, какой язык там употреблялся в самом начале. Так вот, если писать на JS программу на Си, то получится бяка бяка. Потому что язык предполагает использование других подходов к написанию кода.

Weres ★★★
()
Ответ на: комментарий от qulinxao

там дословно твой второй вариант

Потому что изначально можно было не писать int! Но это совершенно не то же самое, что в жабоскрипте.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

да нифига

и int и *int и *char были одного размера и если не обращать внимние на визги от lint это позволяло писать очень лаконичный красивный и по самое немогуинехочу низкоуровневый код от этого Си&Unix избавились при мобилизации на 32разрядные машинки.

но! в первоСях(т.е лет эдак 5-7-8) (кста похоже на x86) интерфейс у функций был некоторое число слов и возврат слова ( т.е 16бит возврат и некоторый набор 16битных кусочков на входе приготовленное вызывающим) и даже вроде тогда уже для простоты реализации при пересылки char был алигн на размер слова.

ибо вот.

т.е С был безтиповым ( ибо его типы это просто подсказка как компилятору с этими чанками операции делать) ассемблером для 16биткой машинки ( угадай какой).

qulinxao ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.