- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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 01.12.2021 19:05 # +1
j123123 01.12.2021 19:12 # +1
Но ведь это же неправильно! Появление ракет _должно_ перевернуть наше мышление! Поэтому — строим киоск за орбитой Плутона и каждому даем по ракете, чтобы туда летать, а горючее покупаем за деньги, вырученные от строительства космодромов и продаж ракет. Кто не может строить ракеты — пусть учит других, как на них летать. Сколько создается новых рабочих мест и главное, что все в бизнесе. Вот тут уж действительно, возврата в прошлое нет... Сигареты стоят миллиарды долларов, и деньги в индустрию вращаются просто огромные. Кто же захочет от них отказываться?! Напротив, ракеты будут стремительно «совершенствоваться», чтобы за сигаретами можно было летать даже на Альфу-Центавра.
j123123 01.12.2021 19:13 # 0
bormand 02.12.2021 00:13 # +1
Тот самый момент, когда вместо полёта на луну на ракете предлагается сделать свой велосипед и доехать на нём?
Soul_re@ver 02.12.2021 00:21 # 0
guest6 02.12.2021 00:16 # +2
а могли бы изучать "пи аш пи", делать плагины для "битрикс" и неплохо баблишко рубить
bormand 01.12.2021 19:57 # 0
Именно поэтому я за С++.
ASD_77 01.12.2021 20:18 # 0
JloJle4Ka 01.12.2021 20:19 # 0
То есть, ДО говнокода?
bormand 01.12.2021 20:23 # +1
Ну и проблемами закрытия ресурсов, отличных от памяти, лол.
Desktop 01.12.2021 20:25 # 0
bormand 01.12.2021 20:26 # +1
Desktop 01.12.2021 20:27 # 0
bormand 01.12.2021 20:28 # 0
Desktop 01.12.2021 20:29 # 0
guest6 01.12.2021 23:57 # 0
bormand 02.12.2021 00:03 # 0
guest6 02.12.2021 00:04 # 0
В коко кстати есть топлевел функции
Desktop 01.12.2021 20:28 # 0
bormand 01.12.2021 20:29 # 0
Steve_Brown 03.12.2021 13:24 # 0
Desktop 03.12.2021 13:27 # 0
bormand 04.12.2021 01:23 # 0
guest6 01.12.2021 23:57 # 0
В C# есть value types, так что понимать про память там надо. А вообще там есть GC, и без понимания памяти ты сделаешь мемори лик
Steve_Brown 02.12.2021 12:41 # 0
guest6 02.12.2021 14:47 # 0
Steve_Brown 02.12.2021 16:02 # 0
guest6 02.12.2021 16:08 # +1
value types имеют семантику.. ээ.. value types. Они копируются по значению, передаются по значению итд.
Классы это reference types, ну они понятное дело живут на куче, и с ними работают по референсу
guest6 01.12.2021 23:56 # 0
ООП это инструмент. Как молоток или паяльник. Иногда он нужен, иногда нет.
Soul_re@ver 01.12.2021 19:06 # +3
ASD_77 01.12.2021 20:16 # +1
bormand 01.12.2021 20:17 # +2
Desktop 01.12.2021 20:34 # +1
bormand 01.12.2021 20:36 # 0
Desktop 02.12.2021 13:47 # 0
bormand 01.12.2021 23:54 # +1
ucnaHckuu_CTblD 01.12.2021 22:40 # 0
MaaKut 02.12.2021 01:02 # 0
Стало быть, между клавиатурой и программистом находится некая субстанция, так что ли?..
Steve_Brown 02.12.2021 12:43 # 0
Kozel 02.12.2021 04:30 # +1
Или всё-таки есть язык, настоящее метапрограммирование на котором не выглядит как кандидат сюда и который можно на практике поприменять?
guest6 02.12.2021 04:35 # 0
Доступ к AST конечно лучше, чем доступ к тексту (или чем вообще никакого доступа), но он может оказаться слишком низкоуровневый.
Взять, например, груви: https://dzone.com/articles/groovy-ast-transformations
>MPS
вроде он никому не нужен. Чувак из JB, который всю вторую половину нулевых носился с идеей DSL, давно к нему охладел (и все остальные люди после chief/puppet/gradle/cocoa pods тоже поняли, что DSL не нужен).
Теперь они пишут на котлине.
Злые языки говорят, что даже Youtrack теперь вместо MPS использует JS
bormand 02.12.2021 16:10 # +1
Как только начнёшь добавлять новые синтаксические конструкции, метушить станет сложнее.
3.14159265 02.12.2021 21:10 # 0
Боюсь сейчас тут заспаунится j123123, но метушня в AST и нерегулярный сишкоалголоблядский синтаксис похоже несовместимы.
Без циклопических, головоломных либ сос ложными пасерами вроде шланга или хакостылей вроде ломбока в жабе.
j123123 03.12.2021 05:29 # 0
А я будто бы буду спорить:
https://govnokod.ru/27551#comment654045
https://govnokod.ru/27420#comment627053
https://govnokod.ru/27340#comment621695
https://govnokod.ru/25558#comment473372
3.14159265 02.12.2021 21:15 # 0
Зоответственно либо писать на таком языке неудобно (много синаксиального мусора вроде скобочек). Либо писать удобно, но нужен сложный парсер чтобы разбивать питушню на термы.
Support 04.12.2021 20:36 # 0
/fxd
Hijikata 03.12.2021 14:51 # +1
ObeseYoung 04.12.2021 01:26 # +1
bormand 04.12.2021 01:29 # 0
OMuKPOH 05.12.2021 01:00 # 0
Завещание уже можно составлять. Представь, как твои родичи бегают по чинушам с бумажками...
Steve_Brown 06.12.2021 13:52 # 0
ниасилил карочи