- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
https://www.evilfingers.com/publications/research_RU/oldnewlang.pdf языки, которые мы потеряли
...
Кстати, тот, кто считает, метапрограммирование достижением последних десятилетий, — жестоко
ошибается. Да, в языке Си++ оно появилось совсем недавно и в полном объеме (описанном в
последних редакциях Стандарта) не реализовано ни в одном реально существующем компиляторе, a
Nemerle и R# (языки программирования для платформы .Net со встроенной поддержкой
метапрограммирования) — вообще младенцы, но на самом деле концепция метапрограммирования
возникла еще во времена палеолита. Lisp, появившийся в далеком 1958 г., — хороший пример
языка, естественным образом поддерживающий метапрограммирование, одной из задач которого
является создание программы, выводящей точную копию своего собственного исходного текста — так
называемый куин (англ, quine). На Lisp'e он записывается так:
(funcall (lambda (x)
(append x (list (list 'quote x))))
'(funcall (lambda (x)
(append x (list (list 'quote x))))))
Листинг 1 программа на Lisp'е, распечатывающая сама себя
На Си так:
#include<stdio.h>
char*i="\\#include<stdio.h>",n='\n',q='"',*p=
"%s%cchar*i=%c%c%s%c,n='%cn',q='%c',*p=%c%c%s%c,*m=%c%c%s%c%c;%s%c",*m=
"int main(){return!printf(p,i+1,n,q,*i,i,q,*i,q,n,q,p,q,n,q,m,q,n,m,n);}"
;int main(){return!printf(p,i+1,n,q,*i,i,q,*i,q,n,q,p,q,n,q,m,q,n,m,n);}
А теперь попробуйте реализовать тоже самое на Си++ с использованием шаблонов и посмотрите, насколько
сильно они вам «помогут».
j123123 # 0
j123123 # 0 ⇈
Но ведь это же неправильно! Появление ракет _должно_ перевернуть наше мышление! Поэтому — строим киоск за орбитой Плутона и каждому даем по ракете, чтобы туда летать, а горючее покупаем за деньги, вырученные от строительства космодромов и продаж ракет. Кто не может строить ракеты — пусть учит других, как на них летать. Сколько создается новых рабочих мест и главное, что все в бизнесе. Вот тут уж действительно, возврата в прошлое нет... Сигареты стоят миллиарды долларов, и деньги в индустрию вращаются просто огромные. Кто же захочет от них отказываться?! Напротив, ракеты будут стремительно «совершенствоваться», чтобы за сигаретами можно было летать даже на Альфу-Центавра.
j123123 # 0 ⇈
bormand # 0 ⇈
Тот самый момент, когда вместо полёта на луну на ракете предлагается сделать свой велосипед и доехать на нём?
[email protected] # 0 ⇈
guest # 0 ⇈
а могли бы изучать "пи аш пи", делать плагины для "битрикс" и неплохо баблишко рубить
bormand # 0 ⇈
Именно поэтому я за С++.
ASD__77 # 0 ⇈
JloJle4Ka # 0 ⇈
То есть, ДО говнокода?
bormand # 0 ⇈
Ну и проблемами закрытия ресурсов, отличных от памяти, лол.
Desktop # 0 ⇈
bormand # 0 ⇈
Desktop # 0 ⇈
bormand # 0 ⇈
Desktop # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
В коко кстати есть топлевел функции
Desktop # 0 ⇈
bormand # 0 ⇈
Steve_Brown # 0 ⇈
Desktop # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
В C# есть value types, так что понимать про память там надо. А вообще там есть GC, и без понимания памяти ты сделаешь мемори лик
Steve_Brown # 0 ⇈
guest # 0 ⇈
Steve_Brown # 0 ⇈
guest # 0 ⇈
value types имеют семантику.. ээ.. value types. Они копируются по значению, передаются по значению итд.
Классы это reference types, ну они понятное дело живут на куче, и с ними работают по референсу
guest # 0 ⇈
ООП это инструмент. Как молоток или паяльник. Иногда он нужен, иногда нет.
[email protected] # 0
ASD__77 # 0
bormand # 0 ⇈
Desktop # 0 ⇈
bormand # 0 ⇈
Desktop # 0 ⇈
bormand # 0 ⇈
ucnaHckuu_CTblD # 0
MaaKut # 0
Стало быть, между клавиатурой и программистом находится некая субстанция, так что ли?..
Steve_Brown # 0 ⇈
Kozel # 0
Или всё-таки есть язык, настоящее метапрограммирование на котором не выглядит как кандидат сюда и который можно на практике поприменять?
guest # 0 ⇈
Доступ к AST конечно лучше, чем доступ к тексту (или чем вообще никакого доступа), но он может оказаться слишком низкоуровневый.
Взять, например, груви: https://dzone.com/articles/groovy-ast-transformations
>MPS
вроде он никому не нужен. Чувак из JB, который всю вторую половину нулевых носился с идеей DSL, давно к нему охладел (и все остальные люди после chief/puppet/gradle/cocoa pods тоже поняли, что DSL не нужен).
Теперь они пишут на котлине.
Злые языки говорят, что даже Youtrack теперь вместо MPS использует JS
bormand # 0 ⇈
Как только начнёшь добавлять новые синтаксические конструкции, метушить станет сложнее.
3.14159265 # 0 ⇈
Боюсь сейчас тут заспаунится j123123, но метушня в AST и нерегулярный сишкоалголоблядский синтаксис похоже несовместимы.
Без циклопических, головоломных либ сос ложными пасерами вроде шланга или хакостылей вроде ломбока в жабе.
j123123 # 0 ⇈
А я будто бы буду спорить:
https://govnokod.ru/27551#comment654045
https://govnokod.ru/27420#comment627053
https://govnokod.ru/27340#comment621695
https://govnokod.ru/25558#comment473372
3.14159265 # 0 ⇈
Зоответственно либо писать на таком языке неудобно (много синаксиального мусора вроде скобочек). Либо писать удобно, но нужен сложный парсер чтобы разбивать питушню на термы.
Support # 0 ⇈
/fxd
Hijikata # 0
ObeseYoung # 0
bormand # 0 ⇈
OMuKPOH # 0 ⇈
Завещание уже можно составлять. Представь, как твои родичи бегают по чинушам с бумажками...
Steve_Brown # 0 ⇈
ниасилил карочи