Мови для схуднення за рахунок зменшення цукру

ПОПЕРЕДНІ ПОСТИ

рахунок

Мови для схуднення за рахунок зменшення цукру

Опубліковано 08 січня 2016 року.

JavaScript - це божевільна мова. Це визначається 250 сторінками англійської прози, і навіть ті частини мови, які повинні бути простими, такі як додавання та змінна сфера, дуже складні. Раніше ми показали, як вирішити цю проблему за допомогою λs5, що є прикладом того, що називається перевіреною семантикою.

Ви можете прочитати про λs5 за посиланням вище. Але основна ідея полягає в тому, що λs5 складається з двох частин:

  • Невелика основна мова, яка фіксує основні частини JavaScript, без усіх його недоліків, і
  • Функція знежирення, яка переводить повну мову до цього маленького ядра.

(Ми зазвичай називаємо цю основну мову λs5, хоча технічно кажучи, це лише частина того, що становить λs5.)

Ці два компоненти разом надають нам реалізацію JavaScript: щоб запустити програму, ви зменшуєте її до λs5, а потім запускаєте цю програму. І за допомогою цієї реалізації ми можемо запустити набір тестів на відповідність JavaScript, щоб перевірити правильність λs5: саме тому це називається перевіреною семантикою. І ось, λs5 передає відповідну частину набору відповідності test262.

Проблема

Однак кожна публікація в блозі потребує проблеми. Проблема з λs5 полягає у знебарвленні. Ми щойно заявили, що JavaScript є складним, тоді як основна мова для λs5 проста. Це означає, що ускладнення JavaScript слід розв’язувати не основною мовою, а натомість дезугаризацією. Візьмемо наочний приклад. Ось кілька невинних рядків JavaScript:

Ці пари рядків переходять у наступний код λs5:

Це трохи багато. Це важко читати, а інструменти важко обробляти. Але більш конкретно, λs5 призначений для використання дослідниками, і це роздуття коду перешкоджає дослідникам, які намагаються його прийняти. Ви можете собі уявити, що якщо ви намагаєтеся написати інструмент, який працює за кодом λs5, і у вашому інструменті є помилка, і вам потрібно його налагодити, і вам доведеться пробирати стільки коду лише для найпростіших прикладів, це трохи кошмару.

Звичайне рішення

Отже, коду занадто багато. На щастя, є добре відомі рішення цієї проблеми. Ми застосували ряд стандартних методів оптимізації компілятора, щоб зменшити згенерований код λs5, зберігаючи при цьому його семантику. Ось нудний список оптимізацій, що зберігають семантику, які ми використовували:

  • Усунення мертвого коду
  • Постійне складання
  • Постійне розповсюдження
  • Пропаганда псевдонімів
  • Перетворення призначення
  • Вбудована функція
  • Виберіть тип і усуньте статичні перевірки
  • Очистіть невикористані пов’язки навколишнього середовища

Більшість із них - це стандартні оптимізації підручників; хоча останні два специфічні для λs5. Як би там не було, ми все це зробили і отримали ... 5-10% кодова усадка.

Надзвичайне рішення

Це воно: 5-10%.