Всем привет
По долгу службы надо с С++ переехать на java script. Сначала надо писать на нем UI для Electron electronjs.org, а потом что-то делать на React. Вероятно еще придется править V8 Engine — опенсорсный движок JavaScript на С++.
Что бы вы посоветовали оптимально почитать\посмотреть, чтобы побыстрее освоить JS, и не слишком поверхностно. Т.е. что будет оптимально по отношению время\знания на старте?
Я пока сам точно не знаю. Это я с chromium работаю, на его базе обычно делают какой-то "свой браузер" и есть какой-то план чтобы добавить некую "дополнительную" функциональность (объекты?) и сделать их доступными в этом форке. В общем, я хз) Но для начала надо хоть понимать с чем я вообще работаю, а я туда два раза лазил и все.
Здравствуйте, Aleksey82, Вы писали:
A>Что бы вы посоветовали оптимально почитать\посмотреть, чтобы побыстрее освоить JS, и не слишком поверхностно. Т.е. что будет оптимально по отношению время\знания на старте?
Здравствуйте, Aleksey82, Вы писали:
JSM>>а можно чуть подробнее об этом?
A>Я пока сам точно не знаю. Это я с chromium работаю, на его базе обычно делают какой-то "свой браузер" и есть какой-то план чтобы добавить некую "дополнительную" функциональность (объекты?) и сделать их доступными в этом форке. В общем, я хз) Но для начала надо хоть понимать с чем я вообще работаю, а я туда два раза лазил и все.
До форка и правки кода v8 от этого вроде далеко как до луны
Можно посмотреть в сторону node-ffi, node addon, если хочешь вызывать свои функции на c++.
Но вообще электрон создавался для того, чтобы убрать зависимость от платформы.
Твре приложение планируется запускать на лиуксе, маке, винде? А твои обьекты тоже доступны на этих платформах?
bnk>Твре приложение планируется запускать на лиуксе, маке, винде? А твои обьекты тоже доступны на этих платформах?
Что там планируется править в V8 я еще не знаю. Электрон используется для быстрого прототипирования в другом месте. Там требуется прокидывать функциональность из С++ ядра (хромиума) в java script, там все более-менее понятно, за исключением что я js не знаю.
Здравствуйте, Aleksey82, Вы писали:
A>Что бы вы посоветовали оптимально почитать\посмотреть, чтобы побыстрее освоить JS, и не слишком поверхностно. Т.е. что будет оптимально по отношению время\знания на старте?
Присоединяюсь к вопросу, но желательно на русском.
Здравствуйте, Aleksey82, Вы писали:
A>Там требуется прокидывать функциональность из С++ ядра (хромиума) в java script, там все более-менее понятно, за исключением что я js не знаю.
Это делается исключительно за счет публичного апи V8. Можно подсмотреть в том же хроме в blink как экспортируются нативные API. Можно и в документации V8. Сам V8 трогать для этого не нужно. Да и противопоказано, т.к. форки надо потом поддерживать.
Здравствуйте, Aleksey82, Вы писали:
bnk>>Твре приложение планируется запускать на лиуксе, маке, винде? А твои обьекты тоже доступны на этих платформах?
A>Что там планируется править в V8 я еще не знаю. Электрон используется для быстрого прототипирования в другом месте. Там требуется прокидывать функциональность из С++ ядра (хромиума) в java script, там все более-менее понятно, за исключением что я js не знаю.
Как-то немного сумбурно у вас. Про современный JavaScript не скажу, это наверно нужно гуглить про EcmaScript.
V8 это один из интерпретаторов (+JIT компилятор) JavaScript, который можно встроить в свое С++ приложение, если нужно вызывать JavaScript код из C++, или наоборот. Никакой библиотеки, привычной веб-разработчиками с V8 не идёт, нет даже console.log(). Актуальная doxygen документация к V8 API находится на https://v8docs.nodesource.com
Есть Node.js = V8 + асинхронный ввод/вывод, сокеты, плюс куча полезных библиотек, написанных как на С++, так и на JavaScipt; можно писать свои. Используется в серверной части современного веба.
Chromium = V8 + HTTP клиент.
Electron = Node.js + Chromium, используется чтобы быстро превратить веб-приложение в десктопное. Раскрывая правую часть выражения, получаем что Electron = (V8 + async IO) + (V8 + HTML render). То есть, имеем в одном приложении 2 экземпляра V8, которым надо между собой взаимодействовать, что, к счастью, возможно.
Поймешь, что JS, как язык, начиная со стандарта 2015 не отличается от Python, а по количеству разработчиков и, соответственно, множеству и удобству библиотек и инфраструктуры далеко впереди Python (и, вообще, Python — отстой, его фанаты — ретрограды-старперы, кроме нескольких узких ниш, куда JS, пока, не пришел).
Потом поймешь, что языки с динамической типизацией — отстой (когда на входе функции не знаешь тип переменной — это неудобно, потому что проще явно преобразовывать тип переменной, чем проверять его на входе) и начнешь мечтать об аннотациях или о TypeScript (который статический, но компилируется в JS, и на TS, кстати, написали очередной генератор парсеров, который генерит самый супербыстрый парсер HTTP для Node на C++, который быстрее предыдущего супербыстрого раза в 2).
Чтобы понять простоту, гибкость и мощь JS — напиши на нем сайт на node + Express. Express — лучшее, что сделали в софтостроительстве (но он во многом такой благодаря инфраструктуре Node.JS). Гибкость, мощь, простота, удобство, огромные возможности — такого нет ни в каком другом софте.
Здравствуйте, Reset, Вы писали:
R> Express — лучшее, что сделали в софтостроительстве (но он во многом такой благодаря инфраструктуре Node.JS). Гибкость, мощь, простота, удобство, огромные возможности — такого нет ни в каком другом софте.
Вспомнился старый анекдот про Вовочку — Хочу жить в Советском Союзе!
Express удалось чего-то добиться за счет того что они первыми промисы прикрутили. А сейчас async/await почти в каждом языке есть, и тот же .net core порвет этот Express как тузик грелку, по всем параметрам.
R>> Express — лучшее, что сделали в софтостроительстве (но он во многом такой благодаря инфраструктуре Node.JS). Гибкость, мощь, простота, удобство, огромные возможности — такого нет ни в каком другом софте. bnk>Express удалось чего-то добиться за счет того что они первыми сделали async/await. А сейчас async/await почти в каждом языке есть, и тот же .net core порвет этот Express как тузик грелку, по всем параметрам.
интересно, какие такие возможности он в express нашел
в любом другом языке что-то похожее на экспресс называлось бы микрофреймворк, как мне кажется
Здравствуйте, Aleksey82, Вы писали:
A>Здравствуйте, PM, Вы писали:
A>Спасибо. Ну, вкратце, мне надо более-менее въехать в JS чтобы писать UI С плюсами и тд все нормально, там вопросов нет)
В JS и учить-то особо нечего. Надо скорее не javascript учить, а фреймворк который будешь использовать для написания UI.
Надеюсь что ты не собираешься в 2020 году фигачить голый HTML и скрипты к нему на jQuery.
Самое ходовое — React. Еще есть Vue и Angular. Последний скорее корпоратив, и тебе скорее всего такое не надо.
Есть ReactNative на котором можно писать и десктопные приложения, может тебе тогда и Electron не понадобится.
Я бы рекомендовал взять курс какой на https://www.pluralsight.com/ например, если область для меня новая, мне например так удобнее.
R>> Express — лучшее, что сделали в софтостроительстве (но он во многом такой благодаря инфраструктуре Node.JS). Гибкость, мощь, простота, удобство, огромные возможности — такого нет ни в каком другом софте.
bnk> Вспомнился старый анекдот про Вовочку — Хочу жить в Советском Союзе!
bnk>Express удалось чего-то добиться за счет того что они первыми промисы прикрутили. А сейчас async/await почти в каждом языке есть, и тот же .net core порвет этот Express как тузик грелку, по всем параметрам.
Нисколько не сомневаюсь, что в .net core есть async/await, но твой тузик зубы пообломает тягаться с Express в его нише по всем перечисленным мной параметрам. Собственно, потому .net'а и нет в той нише.
Простота. Начать с Node.JS и Express сильно проще, чем с .net. Тузик повизгивает, но все еще пыжится.
Мощь. Express позволяет начать с нуля довольно быстро и писать примитивные приложения в один файл .js. Также он позволяет писать довольно сложные приложения. Грубо говоря, любой другой фреймворк либо bottle.py, либо монстр Django. Express объединяет простоту одного и мощь другого. Уверен, в .net все еще хуже. Тузик снова обломался.
Гибкость. Express не навязывает единственно правильный подход к написанию больших приложений. Стиль раскладки файлов и используемые модули (ORM, например) ты выбираешь сам. При этом все стыкуется друг с другом гармонично. Попробуй к Django или рельсам прикрутить другой ORM и половину фреймворка ты использовать не сможешь. Вряд ли в .net ситуация сильно лучше. Тузик опять в пролете.
Удобство. Инфраструктура Node.JS не стала бы такой популярной без удобства. И не надо мне тут гнать стереотипную пургу про мух. Даже если бы вначале что-то было не удобно, миллионы разработчиков постоянно вкладывающиеся в развитие системы сделают инфраструктуру удобной (остальные решения просто не будут использовать). Это характерно для любой ниши, где много разработчиков (Java, Android, Node.JS). Миллионы человекочасов вложенные в развитие приводят к переписыванию и выкидыванию всего неудобного. Даже MS не сможет в одиночку тягаться с разработчиками JS. Тузик причмокивает.
Огромные возможности. Ну, если сравнить нишу, занимаемую нодой и .net, то твой тузик давно сдох.
Прозрачность.
Приведу пример. Тебе нужна авторизация в веб приложении. Ты знаешь, что она реализована через куки. В любом фреймворке, что я видел, тебе придется прочитать документацию, залезть в конфиг, что-то там настроить. При этом у тебя будет прослойка между куками на нижнем уровне и авторизацией, которую ты используешь и как это работает тебе будет не понятно. Затем влезть в документацию, чтобы начать использовать авторизацию. Если чего-то в документации нет, или тебе нужно что-то дополнительно, то ты в сложной ситуации, потому что придется разбираться с тем, как работает прослойка.
В Express, если тебе нужна авторизация, ты гуглишь про сессии, находишь модуль, подключаешь его (одна строка кода) и конфигурируешь его (еще одна строка в коде). В результате ты будешь четко понимать, как оно работает. Документации — первые два абзаца описания модуля. Если что-то нужно добавить — разберешься, потому что модуль все нужные данные навешивает на объект запроса и ты их можешь просмотреть глазами. Все просто, понятно как работает, понятно причем тут куки и где они хранятся, понятно как расширять... Ни один фреймворк за пределами node.js тебе такой простоты и понятности не даст.
R>В Express, если тебе нужна авторизация, ты гуглишь про сессии, находишь модуль, подключаешь его (одна строка кода) и конфигурируешь его (еще одна строка в коде).
не не так: выбираешь один из 20 точно таких же через жопу сделанных пакетов, пробуешь его,потом выкидываешь его, пробуешь следующий и т.д. всё это продолжается до тех пор, пока макаки, которые пишут фронтенд, пишут и бэкенд, чтобы капиталист мог сэкономить пару копеек на одной вместо двух позиций, в итоге получается полное говно, которое жрёт немеряно ресурсов, а макаки уже успели сбежать на другой проект
R>Закапывай своего тузика.
это капитализм, детка: поимей ближнего своего и вовремя слиняй
JSM>в любом другом языке что-то похожее на экспресс называлось бы микрофреймворк, как мне кажется
Express расширяется сколь угодно модулями Node.JS. А так как все, что написано на JS, рассчитано на использование в Node (иначе оно никому не нужно), то все эти модули довольно хорошо стыкуются друг с другом. При наличии пакетного менеджера это все делается элементарно. Никакой жестко навязанной архитектуры и выбранных компонентов. Разработчик сам решит, какой ORM или шаблонизатор использовать и как раскладывать файлы по папкам.
А Express мне понравился тем, что в любом другом фреймворке доступны либо элементарные вещи и там более менее понятно, как оно работает, либо монстр, в котором доступна конфигурация и дальше творится магия без понимания ее внутреннего устройства. С Express'ом доступна простота и прозрачность одновременно с безграничными возможностями расширения. Все делается просто (насколько это возможно) и удобно. При этом сам Express по сути элементарное приложение. Это тонкая прослойка над модулем http из Node.JS, который добавляет методы для реализации роутера и обработку ошибок. Обработка любого запроса делается цепочкой единообразных функций (при этом функция-обработчик от middleware ничем не отличается). Роутер тоже не накладывает требований использования "единственно правильной по мнению создателя фреймворка реализации REST". Потому что единственно правильного ничего не бывает. Express дает функции по количеству методов в HTTP и ты сам можешь реализовать любой роутер (для REST или своего собственного способа). Проще, наверное, придумать не возможно, но эти простые методы не ограничивают по возможностям.
В общем, Express сам простой и позволяет на нем писать просто. Никаких ненужных навязанных решений, потому что какой-то умник так решил. При этом он позволяет неограниченно расширяться и реализовать любое, сколь угодно сложное приложение.
В общем, я и спросил, может кто посоветует какие-то хорошие-проверенные книги или курсы. Т.е. может есть какой-то признанный топчик по этой теме, чтобы в куче всего не рыться.
Здравствуйте, Aleksey82, Вы писали:
A>Да, react нужен. A>В общем, я и спросил, может кто посоветует какие-то хорошие-проверенные книги или курсы. Т.е. может есть какой-то признанный топчик по этой теме, чтобы в куче всего не рыться.
Я ж вроде дал ссылку на pluralsight...
IMHO там вполне вменяемые курсы по javascript / react. Выбираешь соответствующий "path", и смотришь — пробуешь.
Оно платное, да (триал бесплатный)
Здравствуйте, Reset, Вы писали:
JSM>>в любом другом языке что-то похожее на экспресс называлось бы микрофреймворк, как мне кажется
R>В общем, Express сам простой и позволяет на нем писать просто. Никаких ненужных навязанных решений, потому что какой-то умник так решил. При этом он позволяет неограниченно расширяться и реализовать любое, сколь угодно сложное приложение.
А чем ты еще кроме Express еще пользовался, чтобы понятно было с чем сравниваем (проще чем что, то есть?)
Мне как-то не очень понятно что вообще можно написать на языке без статической типизации, кроме скриптов на один экран или макаронных монстров.
JSM>>ну если ты такой чоткий — делись, какими модулями пользуешься JSM>>если прям очень много — хотя бы топчик
R>Про гугл слышал?
в гугле можно найти сайт modulecounts, который подскажет, что ща есть 1427107 яваскриптовых модулей
какое-то кол-во из них ты пощупал и они тебя устроили
но говорить ты почему-то про них не хочешь — а жаль
JSM>>>в любом другом языке что-то похожее на экспресс называлось бы микрофреймворк, как мне кажется
R>>В общем, Express сам простой и позволяет на нем писать просто. Никаких ненужных навязанных решений, потому что какой-то умник так решил. При этом он позволяет неограниченно расширяться и реализовать любое, сколь угодно сложное приложение.
bnk>А чем ты еще кроме Express еще пользовался, чтобы понятно было с чем сравниваем (проще чем что, то есть?)
bnk>Мне как-то не очень понятно что вообще можно написать на языке без статической типизации, кроме скриптов на один экран или макаронных монстров.
Чувак, а ты мои сообщения читаешь, или просто ищешь до чего докопаться? Я несколько фреймворков упоминал в этой теме...
Динамическая типизация имеет как свои положительные (можно добавить новое поле) так и негативные (проще сделать явное приведение типа, чем разбираться какого типа тебе передали данные) стороны. И об этом я тоже писал в этой теме.
Здравствуйте, Reset, Вы писали:
R>Чувак, а ты мои сообщения читаешь, или просто ищешь до чего докопаться? Я несколько фреймворков упоминал в этой теме...
Я увидел только два:
— bottle.py
— django
Оба на питоне. Кто вообще вебсайты на питоне пишет? Хуже наверное только на C++ или на Delphi, как тут некоторые предлагали Но согласен, express лучше, чем эти динозавры
Здравствуйте, Aleksey82, Вы писали:
A>Всем привет A>По долгу службы надо с С++ переехать на java script. Сначала надо писать на нем UI для Electron electronjs.org, а потом что-то делать на React. Вероятно еще придется править V8 Engine — опенсорсный движок JavaScript на С++.
A>Что бы вы посоветовали оптимально почитать\посмотреть, чтобы побыстрее освоить JS, и не слишком поверхностно. Т.е. что будет оптимально по отношению время\знания на старте?
Написать хв — 1 день
Изучить основы — 1-2 месяца в зависимости от способностей
Хорошо освоить — 1-2 года в зависимости от способностей
Особо учить нечего, это по концепции C++ только динамический со слабой типизацией.
В основном проблема(как и в любом ЯП) изучить базовый набор технологий. В данном случае css, html5, browser API.
Тот же реакт уже не вполне js.
Если react native не нужен и можно потратить время на разработку(не требуется за 5 минут фичи в прод) посмотрел бы на elm.
Легко настраивается, хороший плагин для vs code. Строготипизированный статический, чистый(императивных циклов нет типа while for, только map).
Здравствуйте, DenisCh, Вы писали:
DC>Здравствуйте, bnk, Вы писали:
bnk>>Оба на питоне. Кто вообще вебсайты на питоне пишет?
DC>Гугель, например... DC>труба, ин100грамм, дропбокс, реддит..
Здравствуйте, Aleksey82, Вы писали:
A>Что бы вы посоветовали оптимально почитать\посмотреть, чтобы побыстрее освоить JS, и не слишком поверхностно. Т.е. что будет оптимально по отношению время\знания на старте?
0) JavaScript. The Good Parts.
1) You don't know JS.
2) [UI] Css.The Missing Manual.
Ютуб, подкасты практически бесполезная и крайне непроизводительная потеря времени. Поставить VSCode, понять как запускать хотя бы lite-server, на втором мониторе сразу же экспериментировать со всем, что только что было прочитано. Для Node нужно лишь малое подмножество JS, в основном связанное с асинхронностью. Асинхронность там крайне простая и тупая(обусловлено рантаймом) реализация паттернов из Task Parallel Library, монады Future и Continuation. Реальная жесть начинается на стыке с DOM для работы с UI.