Ovviamente Mathematica è in grado di rimuovere questo attributo; semplicemente non mi lascia. Qualcuno sa di qualche hack per costringere Mathematica a fare quello che dico?Un modo per forzare Mathematica a rimuovere l'attributo Locked?
risposta
Questa non è una risposta positiva.
Un caso di utilizzo particolare che potrebbe richiedere la rimozione dell'attributo Locked
sarebbe la modifica locale di un simbolo con ad es. Internal
InheritedBlock`. Spesso questo costrutto di scoping viene utilizzato per modificare/rimuovere gli attributi localmente dei simboli di sistema, per ottenere un comportamento diverso per l'ambito del blocco (vedere ad esempio this answer).
Tuttavia, secondo la mia ricerca, dalle 38 Locked
simboli (di tutti i contesti e pacchetti di cariche di Quiet[Needs /@ Contexts[]]
!) nessuno avere altri attributi funzionali che, se è cambiata, si tradurrebbe in un comportamento modificato (ad esempio non Flat
, Orderless
, Hold***
, ecc.) E nessuno di questi ha uno Options
che potrebbe essere modificato. Di solito questi simboli sono molto basilari, quasi tutti dal contesto System`
ad es. I
, List
o True
. Le uniche eccezioni 3 aventi un'attributi funzionali o le opzioni sono:
(* Symbol *) (* Attributes *) (* Options *)
Remove {HoldAll, Locked, Protected} {}
$ProductInformation {Locked, Protected} {"ProductIDName" -> "Mathematica", "ProductKernelName" -> "Mathematica 9 Kernel", "ProductVersion" -> "9.0 for Microsoft Windows (64-bit) (January 25, 2013)", "ProductVersionNumber" -> 9.}
Developer`StartProtectedMode {Locked, Protected} {"Allow" -> Null, "Deny" -> Null, "Execute" -> {}, "Read" -> {}, "ReadWrite" -> {}, "Write" -> {}}
Quindi, oltre a modificare queste funzioni utilizzate da remoto, l'unico reasone si vorrebbe rimuovere Locked
è quello di modificare direttamente le definizioni di qualche simbolo. Ma questo può essere eseguito solo iff il simbolo è anche ReadProtected
, altrimenti il codice è scritto in inferiore a Matematica - livello completamente nascosto all'utente (tranne forse i wrapper di alto livello). Ci sono solo tre tali simboli (ancora una volta, fuori di tutti i contesti standard e pacchetti):
I (* with {Locked, Protected, ReadProtected} *)
$InputStreamMethods (* with {Locked, Protected, ReadProtected} *)
$OutputStreamMethods (* with {Locked, Protected, ReadProtected} *)
In conclusione, direi la rimozione Locked
non sarebbe davvero dare alcun vantaggio per l'esplorazione/modifica interni funzionali per una grande molte funzioni, e anche il cambiamento di comportamento di tali funzioni fondamentali come I
o $Input
sembra essere una pessima idea, quindi nessuno è in grado di investire troppo tempo nel capire un trucco.
Inoltre, poiché lo stesso Locked
ha l'attributo Locked
(poiché v9, in v8 era solo Protected
), non può essere modificato ad es. Locked = Sequence[]
prima di caricare un pacchetto per bypassare la sicurezza anche per cose crittografate. Uno potrebbe ridefinire Attributes
e SetAttributes
prima di caricare i pacchetti, ma dio sa cosa potrebbe andare storto se fatto.
Ovviamente se la funzione è di tipo pacchettizzato e i file del pacchetto sono disponibili e non codificati, è possibile rimuovere manualmente gli attributi modificando direttamente i file. Ma secondo la mia esperienza, la tradizione comune è che le funzioni che sono liberamente esplorabili nei pacchetti non sono Locked
.
Wow, non pensavo che ci sarebbe mai stata una risposta decente pubblicata qui. Nel frattempo, ho postato sul mio blog (http://flarn2006.blogspot.com/2013/02/disabling-mathematicas-locked-attribute.html) su questo, incluso il suggerimento "Sequence []" che hai fatto. Per Mathematica 9, puoi ancora rinominare manualmente l'attributo Locked in 'mathdll.dll', quindi verrebbe considerato come un attributo non valido. – flarn2006
Ahh, mi dispiace, non avevo realizzato che fosse il tuo blog: l'ho trovato, incluso anche nella risposta e poi rimosso a causa di una [discussione in chat] (http://chat.stackexchange.com/transcript/message/ 11536692 # 11536692) su * Mathematica * .SE per non aumentare le tensioni. –
@ flarn2006 Penso sia molto discutibile condividere tali informazioni in pubblico poiché è rilevante per la sicurezza. Se uno non vuole che tu veda il suo codice, perché è la sua proprietà intellettuale, dovresti rispettarlo. La tua domanda sembra mirare a leggere le definizioni di pacchetti codificati, piuttosto che imparare qualcosa sulla funzione di creazione o su qualsiasi uso legale di esso. Posso capire le tue attitudini di hacking, ma per favore non condividerle pubblicamente. – sacratus
- 1. C'è un modo per forzare un Heroku Dyno a dormire?
- 2. Differenza tra Chiara e rimuovere in Mathematica
- 3. Wakelock sotto-locked GCM_LIB
- 4. Forzare la visualizzazione delle immagini alle dimensioni reali in Mathematica
- 5. C#: c'è un modo per forzare un suggerimento da mostrare?
- 6. C'è un modo per importare automaticamente i risultati o i dati da Matlab a Mathematica?
- 7. Esiste un modo per forzare un MSI "casuale" a eseguire l'installazione di un singolo utente?
- 8. Come rimuovere il margine bianco attorno ad alcuni grafici Mathematica
- 9. Come forzare ProGuard a rimuovere il metodo statico pubblico?
- 10. Equivalente Doxygen per Mathematica?
- 11. Modo corretto per limitare l'utilizzo della memoria Mathematica?
- 12. Esiste un modo per forzare l'ordine di esecuzione MySQL?
- 13. Modo appropriato per forzare il caricamento di un WPF Visual
- 14. Esiste un modo per forzare Volley ad aggiornare un'immagine?
- 15. C'è un modo per forzare una scheda inattiva per eseguire JavaScript a velocità normale
- 16. Esiste un modo per forzare il polling utilizzando WatchService?
- 17. Esiste un modo per forzare Checkstyle a ignorare un particolare avviso nel codice sorgente?
- 18. Esiste un modo per forzare il working set di un processo a 1 GB in C++?
- 19. C'è un modo per forzare Firefox a visualizzare nuovamente un titolo/suggerimento?
- 20. Un modo per forzare la modalità rigorosa nel nodo?
- 21. Il modo più semplice per forzare un arresto in Swift
- 22. Java: esiste un modo per forzare un'implementazione di metodi privati?
- 23. GridLine in cima a un grafico a barre in Mathematica
- 24. Posso forzare un lambda C++ 11 a restituire per riferimento?
- 25. Come creare i taccuini Mathematica a schede
- 26. Come faccio a tracciare un campo di pendenza usando mathematica?
- 27. C'è un modo per forzare Facebook a mostrare og: image sui link condivisi?
- 28. Esiste un modo per forzare l'utente a specificare esplicitamente il tipo di argomento del modello?
- 29. C'è un modo per forzare l'apache a restituire 404 anziché 403?
- 30. C'è un modo per forzare JUnit a fallire su QUALSIASI eccezione non controllata, anche se ingerita
"' Bloccato' è un attributo che, una volta assegnato, impedisce la modifica di qualsiasi attributo di un simbolo "Non so perché dici che è" ovviamente in grado di rimuovere questo attributo ". Forse vuoi rimuovere 'ReadProtected' invece? Spiega solo cosa vuoi fare. – Szabolcs
@Szabolcs Suppongo che stia cercando di aggirare * le misure di sicurezza * di Mathematica. –
Perché?Cosa stai cercando di ottenere facendo questo? – rcollyer