Страница 24 из 79
Типизация строгая. В непрекращающемся холиваре между сторонниками динамической и статической типизации я стою над спором, находя темные и светлые стороны в обоих подходах. Но карамба! У нас 1983-й год и засилье процессоров в один мегагерц! Тратить ресурсы компьютера и драгоценные такты на приведение типов рано! А вот автоматический вывод типов сделать стоит. Если кто-то инициализировал переменную значением 42, то это не только ответ на главный вопрос жизни, вселенной и всего такого, но и целое число и в явном виде тип разрешить не указывать.
Вот лет через десять кто-нибудь наверняка возьмет мою открытую спецификацию и создаст свой JS с блэкджеком и необязательными типами переменных.
С ключевыми словаи не перебарщиваем, не больше тридцати. Глобальные переменные запрещены. Всего один оператор проверки на равенство — «двойное равно». А присваивание — через одинарное. И никакого моржового оператора «двоеточие и равно» — самой раздражающей меня части в целом приятного Паскаля.
От Джаваскрипта берем его самую крутую часть: концепцию того, что каждая функция — это объект и ее можно положить в переменную, передать в качестве аргумента. Плюс объявление списков и словарей прямо в синтаксисе, без лишних кавычек. Это единственное место, где я оставил фигурные скобки, чтобы валидный в прежнем времени JSON оставался таковым и в наши доисторические времена. Расшифровка аббревиатуры у нас теперь, естественно, иная — Джулай Скрипт Обджект Нотейшн. Еще от современного JS — деление на переменные и константы, по умолчанию неизменяемые, как сделано и в «Раст», но наоборот.
От Раста — синтаксический сахар с проверками на null через вопросик и два вопросика. Подумывал и вовсе его отменить, но слишком большой разрыв шаблона всем программистам. Зато никаких отдельных null и undefined.
Еще мне нравится «Сборщик мусора», как концепция, не требующая думать о том, где что в памяти потерялось, но пока нерационально. Вместо него описал концепцию владения памятью снова из Раст. Не уверен, насколько это окажется реально без глубокого погружения в теоретическую базу. И ошибок, как мы помним, не существует! Если функция отработала с ошибкой, она ее и вернет, а не уронит все в панике.
И зачатки асинхронности через асинх/эвейт, без которых мы получим настоящий ад обратных вызовов и меня все проклянут.
И сахар! Много-много синтаксического сахара, ради которого программисты к нами и придут: f-строки, то есть подстановка в шаблон именованных значений, срезы и отрицательные индексы в массивах, множественные присваивания и распаковка, именованные аргументы в функциях, цепочки сравнений, ветвления через матч-кейз, перебор коллекций и диапазонов через цикл «for in», двойные и одинарные кавычки для обычных строк и тройные для многострочных, числа с неплавающей запятой, стрелочные функции. Куча-куча всяких хотелок, в общем. Всё, что смог припомнить выглядящего технически реализуемым с моей колокольни. Всё, что люди придумывали через красные от слез и кофе глаза неспящих долгими ночами разрабов.
Вот как-то так неидеально, но постарался закрыть самые больные места. Язык общего назначения, который может в зависимости от ситуации и компилироваться, и использоваться как скриптовый, внутри интерпретатора. И это всё я подарю человечеству во имя Омниссии. И даже не по лицензии Каналья, а просто так, без обязанности открывать свои исходники, иначе взрыв популярности не произойдет. Рантайм скриптов максимально компактный, чтобы и в табличный процессор включить не зазорно, и в бухгалтерскую программу, похожую на 1С, и в игру для описания логики НПС.
А далее главное — красиво ворваться. И разберемся, к чему это приведет. Если кто-то по-настоящему умный, вроде Томпсона или ван Россума, на моем фундаменте создаст язык будущего, удобный всем, я только скупую слезу пущу и профинансирую его крупным грантом. Ревновать не стану.
Главная цель создания скриптового языка, конечно — сделать его дефолтным в будущих браузерах. Я сам эту дорожку всем покажу, собственным примером в будущем «Каналья Эксплорере»… нет, неудачный нейминг. «Каналья Навигаторе»? Но всё потом, не сейчас.
И Кен, и месье Филипп читали предложенный мной документ с примерами возможных синтаксических конструкций, каждый со своего экземпляра — с запасом напечатал. Я замер, ожидая их реакции. Батька уже пару раз проявлял себя лютым консерватором, не принимающим новое.
Удивил Джон — он взял отдельную копию распечатки, уселся за свой компьютер и начал бодро стучать по клавишам. Он же не напишет мне сейчас готовый интерпретатор за десять минут? Я тогда неполноценным себя почувствую.
— Ох, мон дьё, тут написаны прекрасные мечты о чудесном языке и я бы хотел создать его компилятор для вас… но мой лучший разработчик, датчанин из Копенгагена, полностью занят Турбо Паскалем. За первой версией последует вторая… третья… а вести много проектов одновременно — верный путь провалить их все. Всё, что могу пообещать вам — консультации от Андерса, так его зовут… Вы, Кристоф, и вы, Джон, очень талантливые программисты, я верю, что вы справитесь сами и окажу всю возможную поддержку, мон ами.
Поддержку больше моральную, как я понял из контекста, и чуточку консультационную от датчанина в три часа ночи по телефону, так как в Европе сильно другой часовой пояс. И, казалось бы, отморозился, но с таким искренним сожалением, что не нашел я сил злиться. Да и, по-хорошему, француз прав, у него свой бизнес с великолепными перспективами и все силы в ближайшие годы на него пойдут. Да они даже Турбо Си не помню в каком году выпустят, но, скорее всего, ближе к девяностому. И не поспешил ли я в данном случае?
— Крис, приятель, зачем тебе вообще этот язык программирования? У нас есть Ассемблер, Си, Паскаль, мы создаем при их помощи отличные игры, — не понял меня мистер Уильямс. — Я понимаю, что лавры создателя собственного языка — это почетно, возможность встать в один ряд с Курцем, Кемени и Виртом. Я и сам в молодости подумывал, не создать ли мне что-то такое. Но пойми, нет никакой уверенности, что новый язык вообще заинтересует много людей и станет популярным.