История изменений
Исправление monk, (текущая версия) :
Там, где можно однозначно вывести тип и всё заинлайнить, m.foo(10, 20) превратится в 30. Там, где код более полиморфен, сложение будет заменено явным запросом методов.
Он будет инлайнить из другого скомпилированного модуля?
А что будет, если
def bar():
return m.foo(10, 20)
def baz():
m.foo = lambda x,y: x-y
def main():
if readYN(): baz()
print(bar())
?
bar инлайнится, но как компилятор определит, что его надо перекомпилировать после выполнения baz?
В лиспе инлайн есть только если указано явно. Иначе будет вызов foo, а внутри foo на каждый + будет динамически проверяться тип.
почему в браузерах, и даже в .NET появился развитый нативный GUI, а в жаве — нет?
Потому что пользователей браузеров на пару порядков больше, чем пользователей программ на жаве. А какой такой в .NET? Вроде Electron и его вытеснил.
Но я напоминаю, что C++ возник именно как «Си с классами». Не «Си с шаблонами».
Си с классами был Objective C. С++ родился с шаблонами.
Исходная версия monk, :
Там, где можно однозначно вывести тип и всё заинлайнить, m.foo(10, 20) превратится в 30. Там, где код более полиморфен, сложение будет заменено явным запросом методов.
Он будет инлайнить из другого скомпилированного модуля?
А что будет, если
def bar():
return m.foo(10, 20)
def baz():
b.foo = lambda x,y: x-y
def main():
if readYN(): baz()
print(bar())
?
bar инлайнится, но как компилятор определит, что его надо перекомпилировать после выполнения baz?
В лиспе инлайн есть только если указано явно. Иначе будет вызов foo, а внутри foo на каждый + будет динамически проверяться тип.
почему в браузерах, и даже в .NET появился развитый нативный GUI, а в жаве — нет?
Потому что пользователей браузеров на пару порядков больше, чем пользователей программ на жаве. А какой такой в .NET? Вроде Electron и его вытеснил.
Но я напоминаю, что C++ возник именно как «Си с классами». Не «Си с шаблонами».
Си с классами был Objective C. С++ родился с шаблонами.